- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
PSoCCreatorにより自動生成されるファイル(CapSense_Control.c・CapSense_Control.hなど)を書き換えたいです。
しかし、ビルド後に書いたコードが消えることがあります。
書きかえたコードが消えないようにするにはどのようにすべきでしょうか?
コードはmain.cファイルなどに書くべきでしょうか?
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご連絡が遅くなり申し訳ございません。
現在、サンプルコードはございません。
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
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
main.cでコード記述を行うことを推奨致します。
例として以下のスレッドで自動生成ファイルの書き換え例がありますが、ご理解いただいている通り、コンポーネント構成の変更等の後に変更が書き換えられる可能性があります。
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
追加で確認させてください。
上記スレッド、以下の自動生成された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)を書けばいいのでしょうか?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご連絡が遅くなり申し訳ございません。
現在、サンプルコードはございません。
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
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
回答ありがとうございます。
動作確認いたします。