2017-06-15 13 views
0

私はセミホスト用にcortex-m4を研究し、stm32f429ディスカバリボードを使用しています。 私は、通常の状況ではARMセミホスティングのデバッグモードを確認してください

if ((CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) \ 
     ==CoreDebug_DHCSR_C_DEBUGEN_Msk) { 
    printf("THIS IS SEMIHOST\n"); 
} 

のように、 だから、私はprintfの()の前に裁判官のデバッグステータスを使用することを願って、ボードがスタンドアロンの(デバッグモードではない)であるときに動作しないことができるsemihostに問題がある、それを私の期待どおり、デバッグモードでは、私はスタンドアロンで、何も保留中semihiostログを見ることができます。しかし、ある状況では、私はちょうどフラッシュにコードを燃やす(Linuxでstlinkハードウェアとopenocdまたはtexane stlinkを使用して)。デバッグモードでなければならないと思っていました。ボード上のハードウェアボタンをリセットしても、それはまだ1を保ち、プログラムはprintf()で保留になります。 。

電源を抜いてからもう一度接続すると、デバッグモードのビットが0に戻り、正しく動作します。この問題は解決できますか?または私は間違ったopenocdコマンドを使用しますか?ありがとう。私が使用

openocdコマンド:

openocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg \ 
-c "init" \ 
-c "reset init" \ 
-c "flash write_image erase XXX.bin 0x8000000" \ 
-c "reset run" \ 
-c "shutdown" 

答えて

0

デバッグレジスタ状態(そうしないと、ブレークポイントを設定することができない)、通常のCPUリセット間で永続的です。ボードの電源を入れ直すと状態がリセットされます(明らかに)。

この「フラッシュおよびリリース」シーケンスをスクリプト化する必要がある場合は、DHCR.DEBUGENをDAPとみなすことができます。

関連する問題