keil遇到hardfault時原因的查找


當硬件仿真遇到hardfault會進入響應的中斷軟件陷阱中void HardFault_Handler(void),此時通過view-registers中的

1 如果STACK=MSP,則查看SP的堆棧值,在memrory窗口輸入sp的值回車,在地址內容之后的第21字節開始的4個字節為LR的值,在堆棧調用窗口右擊選擇show callee code,在反匯編窗口右擊選擇show code at address,輸入LR的值然后回車,就是發生hardfault前的調用大致位置,仔細查找即可,

一般都是因為數組越界,訪問了超過范圍或者未定義的地址,或者利用字符串庫函數或者內存操作庫函數時出現的情況。

 或者用

CmBacktrace +addr2line定位hardfault:

其中addr2line可全盤搜索,然后將其放到C盤WINDOWS下,在ENV中添加軟件包,在keil-mdk中設置axf輸出(注意output下的bin和user下axf名字要一致),然后在出現hard fault后,在win 的命令行中切換到項目axf文件所在的文件夾,然后按照cmbacktrace中的提示在命令行中運行addr2line -e........

 

 最終:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM