PSoC 6 MCU:デバッガがmain()の最初の行で停止する前にmain()のコードが実行される – KBA231071- Community Translated (JA)

Version 1

    Community Translated by NoTa_4591161          Version: **

     

    Translation - English: PSoC 6 MCU: Code in main() executes before the debugger halts at the first line of main() – KBA231071

     

    問題: CM4 CPUでは、main()の先頭でデバッガが停止する前に、main()の一部のコードが実行されます。つまり、一部のコードは2回実行されます。デバッガが実行を停止する前と、デバッガがプログラムカウンターをmain()の先頭にリセットした後です。

     

    背景: この問題はデバッグにのみ影響します。ターゲットを取得するためのデバッガのプロセスには時間がかかります。デバッガはターゲットをリセットしてから、CM4 CPU上のアプリケーションを停止します。リセット後、停止する前に、main()の一部のコードが実行されるのに十分な時間があります。デバッガはプログラムカウンターをmain()の最初の行に配置します。デバッグを開始すると、一部のコードが2回実行されます。

    この複数の実行は目に見えないことがよくあります。Main()の先頭のコードが情報を端末ウィンドウに出力する場合、印刷コマンドが2回表示され、この問題が明らかになる場合があります。

    通常、繰り返し実行しても問題は発生しませんが、発生する可能性があります。たとえば、コードがフラグをテストして設定するとします。コードが2回目に実行されたときに、そのフラグの状態が異なる場合、コードの動作が異なる可能性があります。これは、デバッグ中にプログラムカウンターを手動で移動して一部のコードを再実行した場合と同じです。

     

    解決策: CM4 CPUmain()関数の複数実行がコードの問題である場合、簡単な回避策は、コードの先頭に遅延ループを置くことです。これにより、機密コードが2回実行されるのを防ぎます。必要な遅延の長さは、デバッグ環境の性質(IDE、プローブなど)によって異なります。以下のスニペットは400ミリ秒の遅延を使用します。これは通常、ModusToolboxEclipse IDEには十分です。ご使用の環境で必要な遅延は、長くなる場合と短くなる場合があります。

     

    /* アクティブなデバッガが検出された場合は、SYSRESETREQを実行するための時間を与えます

    * それ以外の場合、デバッガが完全に動作する前にアプリケーションが実行されます */

    If(CoreDebug-> DHCSR&CoreDebug_DHCSR_C_DEBUGEN_Msk

    {

    Cy_SysLib_Delay(400u);

    }