當硬件仿真遇到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........
最終: