小白關於keil4調試仿真的幾個問題:一直停在systeminit中的do,while;程序一直停在啓動文件中的BX R0;void HardFault_Handler(void),

分享學習,共同成長:這幾個問題都是新手比較頭痛的,新手在出現HardFault時,可能不是因爲內存溢出,訪問越界或是堆棧溢出,有可能僅僅只是自己一些最基本的規則沒弄清楚而導致,所以分享下自己一些小問題,讓新手朋友們出現類似問題可以借鑑下;

1    調試時程序一直停在SystemIit()中的等待晶振中

是DEBUG裏面的設置有問題,調用的DLL錯誤,在Dialogue DLL中填DARMSTM.DLL, Parameter 填-pSTM32F103VC  仿真stm的那一款就對應填那個參數,這是仿真STM32的動態鏈接,具體爲什麼這樣還等大蝦來解決;
2  仿真時,程序一直進不了_mian,停在BX R0,如圖


解決辦法:需要使用keil4自帶微庫MIrcroLIB,配置勾選如下圖


3  新手仿真時出現hardfault,
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }

新手可能在網上看到解釋內存溢出,訪問出界,堆棧溢出,所以可能瞬間感覺要崩潰了,新手一般都是簡單的程序,所以可能不會出現很複雜的問題,可能僅僅是因爲自己大意或是對C語言不熟悉等造成


兩個函數造成的hardfault有異曲同工之妙,都是因爲程序運行到盡頭導致的hardfualt,第一個函數因爲return會結束函數,並不會執行接下來的while,所以導致出錯;第二個函數函數main執行完以後就沒程序可以執行了,直接導致硬件中斷;

所有關於option的修改都需要把程序重新編譯方可生效,有時候都配置好了也會出現其他問題,如果遇到一直解決不了的,建議最好重新建立工程試試看;

以上純屬新手學習的交流,還望高手多多指點;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章