適用情境
在除錯模式下發現微控制器進入Hard Fault,或是在運作時發現微控制器的UART輸出Hard Fault信息。
除錯技巧
在除錯模式下找到進入Hard Fault前運行的最后一個指令。
取得 SP (Stack Pointer) 值。
使用SP 在Memory窗口中找到Stack。
Stack的第七個值就是最后一筆運行的指令的地址。
在Disassembly 窗口查詢該地址對應的指令。
解說
當Cortex-M核要執行一個無效的指令,例如讀取一個不存在的內存位置,核心會進入hard fault來保護自己。硬件先將一些CPU寄存器放到Stack中在進入Hard Fault handler。使用者可透過Stack Pointer找到存放最后一筆被執行的指令的內存地址,進而找到觸發Hard Fault的程序流程。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
微控制器
+關注
關注
48文章
7926瀏覽量
153887 -
uart
+關注
關注
22文章
1273瀏覽量
103464 -
Cortex-M
+關注
關注
2文章
230瀏覽量
30273
發布評論請先 登錄
相關推薦
熱點推薦
如何分析Hard Fault錯誤的原因?
可能很多工程師在使用Cortex-M處理器做開發的時候最怕遇到的一類錯誤就是調試時遇到Hard Fault。引發Fault異常的情況有很多,除了程序本身的因素以為,設備外部環境的
發表于 10-25 14:40
Hard fault產生原因硬件方面常見原因
一、 Hard fault 產生原因硬件方面常見原因:1. 電源設計有錯誤,造成器件供電不穩;2. 電源質量不好,文波,噪聲過大;3. 器件
發表于 02-14 07:40
程序進入硬件錯誤中斷hard_fault如何尋找原因?
程序運行后,會卡死,進入硬件錯誤中斷,但我不知道問題出在哪?該如何解決?在MDK環境下,進入調試模式,運行后進入rt_hw_hard_fault
發表于 02-13 13:45
程序在運行一段時間后報In Hard Fault Handler錯誤的原因?怎么解決?
= 0x8
r12 = 0x3
lr= 0xbcf
pc= 0x168c
psr = 0x21000000
想根諸位請教,進入In Hard Fault Handler的原因有哪些?
發表于 06-28 06:02
程序在運行一段時間后報In Hard Fault Handler錯誤的原因?
= 0x8
r12 = 0x3
lr= 0xbcf
pc= 0x168c
psr = 0x21000000
想根諸位請教,進入In Hard Fault Handler的原因有哪些?
發表于 08-28 07:45
如何排查程序的Hard fault錯誤
Hard fault產生原因,硬件方面常見原因: 1. 電源設計有錯誤,造成器件供電不穩; 2. 電源質量不好,文波,噪聲過大; 3.器件接
發表于 11-22 14:13
?7次下載
評論