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

Post Reply
User avatar
NuvotonMarcom
Posts: 203
Joined: 10 Sep 2018, 17:23

04 May 2021, 18:27

適用情境
在除錯模式下發現微控制器進入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 419 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 419 times

Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 1 guest