分享學習,共同成長:這幾個問題都是新手比較頭痛的,新手在出現HardFault時,可能不是因爲內存溢出,訪問越界或是堆棧溢出,有可能僅僅只是自己一些最基本的規則沒弄清楚而導致,所以分享下自己一些小問題,讓新手朋友們出現類似問題可以借鑑下;
1 調試時程序一直停在SystemIit()中的等待晶振中
是DEBUG裏面的設置有問題,調用的DLL錯誤,在Dialogue DLL中填DARMSTM.DLL, Parameter 填-pSTM32F103VC 仿真stm的那一款就對應填那個參數,這是仿真STM32的動態鏈接,具體爲什麼這樣還等大蝦來解決; 2 仿真時,程序一直進不了_mian,停在BX R0,如圖 解決辦法:需要使用keil4自帶微庫MIrcroLIB,配置勾選如下圖 3 新手仿真時出現hardfault, |
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
新手可能在網上看到解釋內存溢出,訪問出界,堆棧溢出,所以可能瞬間感覺要崩潰了,新手一般都是簡單的程序,所以可能不會出現很複雜的問題,可能僅僅是因爲自己大意或是對C語言不熟悉等造成
兩個函數造成的hardfault有異曲同工之妙,都是因爲程序運行到盡頭導致的hardfualt,第一個函數因爲return會結束函數,並不會執行接下來的while,所以導致出錯;第二個函數函數main執行完以後就沒程序可以執行了,直接導致硬件中斷;
所有關於option的修改都需要把程序重新編譯方可生效,有時候都配置好了也會出現其他問題,如果遇到一直解決不了的,建議最好重新建立工程試試看;
以上純屬新手學習的交流,還望高手多多指點;