適用情境
在除錯(cuò)模式下發(fā)現(xiàn)微控制器進(jìn)入Hard Fault,或是在運(yùn)作時(shí)發(fā)現(xiàn)微控制器的UART輸出Hard Fault信息。
除錯(cuò)技巧
在除錯(cuò)模式下找到進(jìn)入Hard Fault前運(yùn)行的最后一個(gè)指令。
取得 SP (Stack Pointer) 值。
使用SP 在Memory窗口中找到Stack。
Stack的第七個(gè)值就是最后一筆運(yùn)行的指令的地址。
在Disassembly 窗口查詢該地址對應(yīng)的指令。
解說
當(dāng)Cortex-M核要執(zhí)行一個(gè)無效的指令,例如讀取一個(gè)不存在的內(nèi)存位置,核心會(huì)進(jìn)入hard fault來保護(hù)自己。硬件先將一些CPU寄存器放到Stack中在進(jìn)入Hard Fault handler。使用者可透過Stack Pointer找到存放最后一筆被執(zhí)行的指令的內(nèi)存地址,進(jìn)而找到觸發(fā)Hard Fault的程序流程。
審核編輯:湯梓紅
-
微控制器
+關(guān)注
關(guān)注
48文章
8175瀏覽量
159803 -
uart
+關(guān)注
關(guān)注
22文章
1286瀏覽量
105477 -
Cortex-M
+關(guān)注
關(guān)注
2文章
232瀏覽量
30815
發(fā)布評論請先 登錄
如何分析Hard Fault錯(cuò)誤的原因?
Hard fault產(chǎn)生原因硬件方面常見原因
程序進(jìn)入硬件錯(cuò)誤中斷hard_fault如何尋找原因?
M0516LDE老是進(jìn)入Hard_Fault_Handler的原因?怎么解決?
程序在運(yùn)行一段時(shí)間后報(bào)In Hard Fault Handler錯(cuò)誤的原因?怎么解決?
程序在運(yùn)行一段時(shí)間后報(bào)In Hard Fault Handler錯(cuò)誤的原因?
使用指針調(diào)用函數(shù)產(chǎn)生 Hard Fault
如何排查程序的Hard fault錯(cuò)誤
新唐開發(fā)平臺(tái):進(jìn)階使用者的七大訣竅(6)使用PinView進(jìn)行功耗的除錯(cuò)

新唐開發(fā)平臺(tái):進(jìn)階使用者的七大訣竅(3)使用System Viewer檢查寄存器狀態(tài)

評論