打印
[FAQ]

触发HardFault硬件错误问题定位

[复制链接]
665|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 糊糊糊锅 于 2022-4-24 10:10 编辑

#技术资源# #申请原创#
出现HardFault_Handle硬件错误的原因主要有两个方面:
1.内存溢出或者访问越界(包括使用野指针)
2.堆栈溢出
遇到hardfault中断可以使用以下方法进行排查定位:
1.在中断HardFault_Handle中的while()处打上断点,全速运行后,想办法让程序出现问题触发HardFault,让程序执行到此处停止。
2.看左侧Registers Window窗口(界面上找不到窗口的话,Keil菜单栏点击“View”——“Registers Window”),在寄存器查看窗口查找R14(LR)的值。如果R14(LR) = 0xFFFFFFE9,继续查看MSP(主堆栈指针)的值,如果R14(LR) = 0xFFFFFFFD,继续查看PSP(进程栈指针)的值。

3.Keil菜单栏点击“View”——“Memory Windows”——“Memory1”,在“Address”地址栏中输入MSP的值:0x20011BA0,然后在对应行里找到地址。地址一般以0x08开头的32位数。注意从右往左看。

4.在Keil菜单栏点击“View”——“Disassembly Window”(此反汇编窗口一般默认已经开启),在“Disassembly”窗口中右击,在下拉菜单中选择“Show Disassemblyat Address…”。在弹出框“Show Code atAdress”的地址框中输入地址0x08002D0C进行搜索,然后就会找到相对应的代码。这里的代码就是进入循环中断之前的情况。仔细查看附近区域的相关代码来排查错误具体原因。

使用特权

评论回复
沙发
skyred| | 2022-5-5 13:39 | 只看该作者
值得学习~

使用特权

评论回复
板凳
teltium| | 2022-7-14 21:41 | 只看该作者
高质量贴 不错

使用特权

评论回复
地板
huquanz711| | 2022-7-15 07:51 | 只看该作者
感谢分享经验

使用特权

评论回复
5
MessageRing| | 2022-10-4 20:52 | 只看该作者
学习一下

使用特权

评论回复
6
海滨消消| | 2022-10-10 15:13 | 只看该作者
这帖子可以学习一下

使用特权

评论回复
7
渔夫的烟斗| | 2023-8-15 15:41 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

1

粉丝