2017-06-15 100 views
0

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

回答

0

调试寄存器的状态在一个正常的CPU复位永久(否则你将无法设置断点)。电源循环板将重置状态(显然)。

你应该能够清除DHCR.DEBUGEN认为DAP,如果你需要脚本这个'闪光和释放'序列。