問題背景
實際調試、或者產品開發階段,有時候會碰到產品觸發異常、報HardFault這類錯誤。
在這里介紹一種排查軟件端問題的調試方法。
測試原理
簡單來說,就是利用 “MCU觸發HardFault異常、跳轉到HardFault服務函數前,會把現場的內核寄存器值先壓入堆棧空間保存好” 的這個特性。
所以我們可以:
· 確認觸發HardFault后,使用的是PSP進程堆棧,還是MSP主堆棧(一般是MSP,也可理解用戶在SRAM中劃分出來的堆棧空間)
· 根據對應堆棧SP指針,挑出觸發HardFault的PC指針所指向的位置。
· 注意現場保存、寄存器值入棧順序:xPSR-》PC-》LR-》R12-》R3~R0
實測基于APM32F407demo板,新建會觸發HardFault的例程——訪問、改寫溢出實際SRAM存儲空間的數據。
仿真調試下,全速運行,成功觸發Hardfault。
在0x2000_03E0堆棧位置,存儲著進入HardFault前的內核寄存器信息,如圖所示
·PC指向地址是0x08003AA——可找到對應觸發HardFault的匯編代碼
上述分析可以看到,在對0x2003_0002這個異常存儲空間進行操作后,會影響往下代碼指令的執行(特別是操作SRAM空間)從而觸發HardFault
后話HardFault的觸發還有很多因素,比如客戶的MCU供電問題、某些VCAP腳沒接上、硬件接地干擾、Flash等待周期不符合芯片規定等等。文章所介紹的方法只是針對軟件部分的排查參考。
審核編輯 :李倩
-
寄存器
+關注
關注
31文章
5325瀏覽量
120052 -
函數
+關注
關注
3文章
4308瀏覽量
62445
原文標題:APM32芯得 EP.08 | APM32F407 HardFault排查——軟件方案
文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論