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

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
RyYo_1406951
Level 5
Level 5
100 replies posted 50 replies posted 25 replies posted

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

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

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

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

0 件の賞賛
1 解決策

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

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

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

元の投稿で解決策を見る

0 件の賞賛
4 返答(返信)
HirotakaT_91
Moderator
Moderator
Moderator
500 replies posted 250 replies posted 100 replies posted

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

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

Re: CapSense auto reset

Hirotaka Takayama

0 件の賞賛

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

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)を書けばいいのでしょうか?

0 件の賞賛

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

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

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

0 件の賞賛

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

動作確認いたします。

0 件の賞賛