4 Replies Latest reply on Jun 13, 2018 12:45 AM by fj0176bu_1406951

    PSoC Creator 自動生成ファイル書き換え

    fj0176bu_1406951

      PSoCCreatorにより自動生成されるファイル(CapSense_Control.c・CapSense_Control.hなど)を書き換えたいです。

      しかし、ビルド後に書いたコードが消えることがあります。

      書きかえたコードが消えないようにするにはどのようにすべきでしょうか?

      コードはmain.cファイルなどに書くべきでしょうか?

        • 1. Re: PSoC Creator 自動生成ファイル書き換え
          hrtk

          main.cでコード記述を行うことを推奨致します。

           

          例として以下のスレッドで自動生成ファイルの書き換え例がありますが、ご理解いただいている通り、コンポーネント構成の変更等の後に変更が書き換えられる可能性があります。

          Re: CapSense auto reset

           

           

          Hirotaka Takayama

          • 2. Re: PSoC Creator 自動生成ファイル書き換え
            fj0176bu_1406951

            追加で確認させてください。

             

            Re: CapSense auto reset

            上記スレッド、以下の自動生成されたAPI内のコードを書き換えています。

            3. CapSense_Filter.cのCapSense_FtUpdateBaselineの一部を変更します。

            #if (CapSense_BASELINE_TYPE == CapSense_IIR_BASELINE)

                /* Calculate baseline value */

                if ((CapSense_WD_TYPE_ENUM)wdType != CapSense_WD_PROXIMITY_E)

                {

                      #if (CapSense_REGULAR_SENSOR_EN)

                          #if (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE)

                                history = (uint32) ptrSensor->bsln[freqChannel] << 10u;

                                history |= ptrSensor->bslnExt[freqChannel];

                          #else

                                history = ptrSensor->bsln[freqChannel];

                          #endif /* (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE) */

             

                          #if (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN)

                                baselineCoeff = ptrWidgetRam->bslnCoeff;

                          #else /* (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN) */

                                baselineCoeff = CapSense_REGULAR_IIR_BL_N;

                          #endif /* (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN) */

             

                          history = CapSense_FtIIR1stOrder_custom((uint32)ptrSensor->raw[freqChannel], history, baselineCoeff, CapSense_REGULAR_IIR_BL_SHIFT);

                         

                          #if (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE)

                                ptrSensor->bsln[freqChannel] = LO16(history >> 10u);

                                ptrSensor->bslnExt[freqChannel] = LO16(history & 0x03FF);

                          #else

                                ptrSensor->bsln[freqChannel] = LO16(history);

                          #endif /* (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE) */

                      #endif /* (CapSense_REGULAR_SENSOR_EN) */

            }

             

            この場合、どのようにmain.cにコード書くべきでしょうか?

            main.cにそのまま、同じコード(CapSense_FtUpdateBaseline)を書けばいいのでしょうか?

            • 3. Re: PSoC Creator 自動生成ファイル書き換え
              hrtk

              ご連絡が遅くなり申し訳ございません。

              現在、サンプルコードはございません。

               

              PSoCを専門とするエンジニアと話をした結果、CapSense_Filter.cにて複数のAPIを自身で作成するのが良い手段となりましたので報告致します。

               

              ☆作成するAPI

              CapSense_UpdateAllBaselines_custom()

              CapSense_UpdateWidgetBaseline_custom()

              CapSense_UpdateSensorBaseline_custom()

              CapSense_FtUpdateBaseline_custom()

              CapSense_FtIIR1stOrder_custom()

               

               

              ☆解説

              新たに作成された _custom() というAPIは既存のものではないため、書き換えが行われません。

              そのため、この方法で書き換えられないようにすることが可能です。

              _custom() APIの中身はオリジナルのAPI群とほぼ同様で、違う部分は Re: CapSense auto reset でお伝えしてある部分です。

               

              よろしくお願い致します。

              Hirotaka Takayama

              • 4. Re: PSoC Creator 自動生成ファイル書き換え
                fj0176bu_1406951

                回答ありがとうございます。

                動作確認いたします。