我正在研究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"