問題背景
實際調(diào)試、或者產(chǎn)品開發(fā)階段,有時候會碰到產(chǎn)品觸發(fā)異常、報HardFault這類錯誤。
在這里介紹一種排查軟件端問題的調(diào)試方法。
測試原理
簡單來說,就是利用 “MCU觸發(fā)HardFault異常、跳轉(zhuǎn)到HardFault服務(wù)函數(shù)前,會把現(xiàn)場的內(nèi)核寄存器值先壓入堆棧空間保存好” 的這個特性。
所以我們可以:
· 確認(rèn)觸發(fā)HardFault后,使用的是PSP進(jìn)程堆棧,還是MSP主堆棧(一般是MSP,也可理解用戶在SRAM中劃分出來的堆棧空間)
· 根據(jù)對應(yīng)堆棧SP指針,挑出觸發(fā)HardFault的PC指針?biāo)赶虻奈恢谩?/p>
· 注意現(xiàn)場保存、寄存器值入棧順序:xPSR-》PC-》LR-》R12-》R3~R0



實測基于APM32F407demo板,新建會觸發(fā)HardFault的例程——訪問、改寫溢出實際SRAM存儲空間的數(shù)據(jù)。

仿真調(diào)試下,全速運行,成功觸發(fā)Hardfault。

在0x2000_03E0堆棧位置,存儲著進(jìn)入HardFault前的內(nèi)核寄存器信息,如圖所示
·PC指向地址是0x08003AA——可找到對應(yīng)觸發(fā)HardFault的匯編代碼

上述分析可以看到,在對0x2003_0002這個異常存儲空間進(jìn)行操作后,會影響往下代碼指令的執(zhí)行(特別是操作SRAM空間)從而觸發(fā)HardFault
后話HardFault的觸發(fā)還有很多因素,比如客戶的MCU供電問題、某些VCAP腳沒接上、硬件接地干擾、Flash等待周期不符合芯片規(guī)定等等。文章所介紹的方法只是針對軟件部分的排查參考。
審核編輯 :李倩
-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129969 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67504
原文標(biāo)題:APM32芯得 EP.08 | APM32F407 HardFault排查——軟件方案
文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
CD7377CZ/7388工程化調(diào)試故障排查手冊
單片機系統(tǒng)硬件的調(diào)試方法
Keithley吉時利6511常見故障排查及解決方法
瑞薩RZ/T2H PCIe通信的調(diào)試方法
調(diào)試器無法連接的排查方法
在極海APM32系列MCU中如何把代碼重定位到SDRAM運行
start openocd timeout 的一種解決方式
E30M6203-5G網(wǎng)關(guān)通訊遠(yuǎn)程調(diào)試工具說明書
求助,關(guān)于5.0.2 + serial_v1 + apm32f103vet6串口讀一幀問題求解
硬件調(diào)試:JLink 驅(qū)動配置與調(diào)試技巧
基于極海APM32E103 MCU的CoreMark測試方法
研發(fā)排查問題的利器:一款方法調(diào)用棧跟蹤工具
人臉識別門禁終端的一般故障排查方法
電機控制器出現(xiàn)的一種偶發(fā)故障排查與分析
前端調(diào)試實踐
使用APM32一種排查軟件端問題的調(diào)試方法
評論