Page 1 of 1

新唐開發平台:進階使用者的七大訣竅 (2) 進入除錯模式找出 Hard Fault 原因

Posted: 04 May 2021, 18:27
by NuvotonMarcom
適用情境
在除錯模式下發現微控制器進入Hard Fault,或是在運作時發現微控制器的UART輸出Hard Fault資訊。


除錯技巧
在除錯模式下找到進入Hard Fault前運行的最後一個指令。

1. 取得 SP (Stack Pointer) 值。
2. 使用SP 在Memory視窗中找到Stack。
3. Stack的第七個值就是最後一筆運行的指令的位址。
4. 在Disassembly 視窗查詢該位址對應的指令。
stack pointer.jpg
stack pointer.jpg (103.43 KiB) Viewed 2154 times

解說
當Cortex-M核要執行一個無效的指令,例如讀取一個不存在的記憶體位置,核心會進入hard fault來保護自己。硬體先將一些CPU暫存器放到Stack中在進入Hard Fault handler。使用者可透過Stack Pointer找到存放最後一筆被執行的指令的記憶體位址,進而找到觸發Hard Fault的程式流程。
hard fault explain.png
hard fault explain.png (51.66 KiB) Viewed 2154 times