JNH官网

【ARM】MDK出现HardFault_Handler硬件中断的排查方法

1、 文档目标

用于排查使用MDK进入开发过程中,是否是因为堆栈溢出导致出现HardFault_Handler硬件中断。


2、 问题场景

HardFault_Handler硬件中断是在对ARM芯片进行开发过程中遇到的最难处理的中断信号(图2-1)。硬件中断出现基本上是由内存溢出、访问越界和堆栈溢出。对于内存溢出、访问越界这两个原因需要自行根据代码的情况去排查。堆栈溢出情况可以通过下面的方法去确认堆栈溢出的大概位置,便于缩小范围,尽快排查问题出现的位置。



图2-1


3、软硬件环境

1)、软件版本:Keil MDK 5.38a

2)、电脑环境:Windows 11

3)、外设硬件:无


4、解决方法

1)、当发现出现硬件中断后,需要在HardFault_Handler函数中设置断点。

2)、当程序停止到断点处后,通过Register窗口中Internal的Stack确认堆栈指针类型是什么?图4-2显示的就是MSP。



图4-2

3)、然后,确认Banked中MSP指针的值。(如图4-3)



图4-3


4)、然后,通过图示的位置打开Memory 1窗口。在Memory 1窗口中的Address中输入MSP的值(如图4-4)。在输出结果中找到以“08”开头的地址信息。这个就是具体代码的位置。



图4-4


5)、然后,在Disassembly窗口中,右键打开菜单找到Show Disassembly at Address(如图4-5-1),在打开的Show code at Address窗口中以0x为开头的方式输入在Memory1中确认的地址信息(如图4-5-2),然后,就可以跳转到对应的代码位置。然后,根据跳转的代码位置去确认堆栈溢出的位置即可。



图4-5-1

图4-5-2

jnh官网 jnh官网 jnh官网 jnh官网 金年会 金年会 金年会 金年会