我正在研究cortex-m4 for semihost並使用stm32f429發現板。 我對此semihost故障時板是獨立的(沒有在調試模式下)無法正常工作, 所以,我希望能夠用printf()前法官調試狀態,像在ARM半主機的調試模式下檢查
if ((CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) \
==CoreDebug_DHCSR_C_DEBUGEN_Msk) {
printf("THIS IS SEMIHOST\n");
}
在正常情況下,它將會像我期望的那樣,在調試模式下,我可以看到semihiost日誌,獨立,沒有掛起。但是在一種情況下,當我將代碼燒入閃存時(在linux中使用stoc硬件使用openocd或texane stlink)。第一次運行時,調試模式(CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk)
的位保持爲1.我認爲它不應該處於調試模式,即使我按下了電路板上的復位硬件按鈕,它仍然保持爲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"