使用CmBacktrace進行HardFault_Handler 追蹤

逐夢,無懼!發表於2020-10-24

大家在用STM32的時候有沒有遇到過HardFault的問題呢:

======001

下面針對這個問題做個小總結。

現象還原:在debug模式下進行模擬除錯,全速執行再停止執行,程式會跑到 HardFault_Handler函式中,產生 HardFault,即硬錯。其產生的原因大概有如下幾類:

​ (1)陣列越界操作;

​ (2)記憶體溢位,訪問越界;

​ (3)堆疊溢位,程式跑飛;

​ (4)中斷處理錯誤;

針對HardFault問題的定位,網上有幾種方法,大概都是圍繞著:在debug模式下,檢視一些地址,分析暫存器、函式呼叫棧等,這是很讓人頭疼的事情。這裡分享一種簡單的、直觀的HardFault錯誤定位的方法,使用開源庫:CmBacktrace 。這個庫之前已經有介紹過了,這篇筆記我們來實踐一下。

CmBacktrace簡介

CmBacktrace (Cortex Microcontroller Backtrace)是一款針對 ARM Cortex-M 系列 MCU 的錯誤程式碼自動追蹤、定位,錯誤原因自動分析的開源庫。主要特性如下:

  • 支援的錯誤包括:
    • 斷言(assert)
    • 故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault)
  • 故障原因 自動診斷 :可在故障發生時,自動分析出故障的原因,定位發生故障的程式碼位置,而無需再手動分析繁雜的故障暫存器;
  • 適配 Cortex-M0/M3/M4/M7 MCU;
  • 支援 IAR、KEIL、GCC 編譯器;

 

相關文章