問(wèn)題背景
實(shí)際調(diào)試、或者產(chǎn)品開(kāi)發(fā)階段,有時(shí)候會(huì)碰到產(chǎn)品觸發(fā)異常、報(bào)HardFault這類錯(cuò)誤。
在這里介紹一種排查軟件端問(wèn)題的調(diào)試方法。
測(cè)試原理
簡(jiǎn)單來(lái)說(shuō),就是利用 “MCU觸發(fā)HardFault異常、跳轉(zhuǎn)到HardFault服務(wù)函數(shù)前,會(huì)把現(xiàn)場(chǎng)的內(nèi)核寄存器值先壓入堆??臻g保存好” 的這個(gè)特性。
所以我們可以:
· 確認(rèn)觸發(fā)HardFault后,使用的是PSP進(jìn)程堆棧,還是MSP主堆棧(一般是MSP,也可理解用戶在SRAM中劃分出來(lái)的堆??臻g)
· 根據(jù)對(duì)應(yīng)堆棧SP指針,挑出觸發(fā)HardFault的PC指針?biāo)赶虻奈恢谩?/p>
· 注意現(xiàn)場(chǎng)保存、寄存器值入棧順序:xPSR-》PC-》LR-》R12-》R3~R0
實(shí)測(cè)基于APM32F407demo板,新建會(huì)觸發(fā)HardFault的例程——訪問(wèn)、改寫(xiě)溢出實(shí)際SRAM存儲(chǔ)空間的數(shù)據(jù)。
仿真調(diào)試下,全速運(yùn)行,成功觸發(fā)Hardfault。
在0x2000_03E0堆棧位置,存儲(chǔ)著進(jìn)入HardFault前的內(nèi)核寄存器信息,如圖所示
·PC指向地址是0x08003AA——可找到對(duì)應(yīng)觸發(fā)HardFault的匯編代碼
上述分析可以看到,在對(duì)0x2003_0002這個(gè)異常存儲(chǔ)空間進(jìn)行操作后,會(huì)影響往下代碼指令的執(zhí)行(特別是操作SRAM空間)從而觸發(fā)HardFault
后話HardFault的觸發(fā)還有很多因素,比如客戶的MCU供電問(wèn)題、某些VCAP腳沒(méi)接上、硬件接地干擾、Flash等待周期不符合芯片規(guī)定等等。文章所介紹的方法只是針對(duì)軟件部分的排查參考。
審核編輯 :李倩
-
寄存器
+關(guān)注
關(guān)注
31文章
5433瀏覽量
124412 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4379瀏覽量
64829
原文標(biāo)題:APM32芯得 EP.08 | APM32F407 HardFault排查——軟件方案
文章出處:【微信號(hào):geehysemi,微信公眾號(hào):Geehy極海半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
硬件調(diào)試:JLink 驅(qū)動(dòng)配置與調(diào)試技巧

基于極海APM32E103 MCU的CoreMark測(cè)試方法

研發(fā)排查問(wèn)題的利器:一款方法調(diào)用棧跟蹤工具

人臉識(shí)別門(mén)禁終端的一般故障排查方法

電機(jī)控制器出現(xiàn)的一種偶發(fā)故障排查與分析
DCS日常維護(hù)與故障分析排查方法

怎么用Clion開(kāi)發(fā)APM32

射頻放大器調(diào)試與故障排查
一種創(chuàng)新的動(dòng)態(tài)軌跡預(yù)測(cè)方法

一種簡(jiǎn)單高效配置FPGA的方法

伺服電機(jī)有哪些調(diào)試方法?如何調(diào)?
APM32F10xx進(jìn)入低功耗模式的問(wèn)題分析

一種利用wireshark對(duì)遠(yuǎn)程服務(wù)器/路由器網(wǎng)絡(luò)抓包方法

端到端測(cè)試用例怎么寫(xiě)
一種無(wú)透鏡成像的新方法

評(píng)論