2017-06-15 20 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,如果你需要腳本這個'閃光和釋放'序列。