在调试模式下检查ARM半主机

时间:2017-06-15 04:20:30

标签: debugging arm

我正在研究cortex-m4 for semihost并使用stm32f429-discovery board。 我有一个问题,当电路板是独立的时(不在调试模式下),半主机无法工作, 所以,我希望在printf()之前使用判断调试状态,比如

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

在正常情况下,它会像我期望的那样,在调试模式下,我可以看到semihiost日志,独立,没有任何待处理。但在一种情况下,我只是将代码刻录到flash中(使用openocd或texane stlink和linux中的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"

1 个答案:

答案 0 :(得分:0)

调试寄存器状态在正常CPU复位期间是持久的(否则您将无法设置断点)。电源循环电路板将重置状态(显然)。

你应该能够清除DHCR.DEBUGEN认为DAP是否需要编写此脚本' flash并发布'序列