适用情境
在除错模式下发现微控制器进入Hard Fault,或是在运作时发现微控制器的UART输出Hard Fault信息。
除错技巧
在除错模式下找到进入Hard Fault前运行的最后一个指令。
取得 SP (Stack Pointer) 值。
使用SP 在Memory窗口中找到Stack。
Stack的第七个值就是最后一笔运行的指令的地址。
在Disassembly 窗口查询该地址对应的指令。
解说
当Cortex-M核要执行一个无效的指令,例如读取一个不存在的内存位置,核心会进入hard fault来保护自己。硬件先将一些CPU寄存器放到Stack中在进入Hard Fault handler。使用者可透过Stack Pointer找到存放最后一笔被执行的指令的内存地址,进而找到触发Hard Fault的程序流程。
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
微控制器
+关注
关注
48文章
7487浏览量
151042 -
uart
+关注
关注
22文章
1227浏览量
101170 -
Cortex-M
+关注
关注
2文章
227浏览量
29726
发布评论请先 登录
相关推荐
如何分析Hard Fault错误的原因?
可能很多工程师在使用Cortex-M处理器做开发的时候最怕遇到的一类错误就是调试时遇到Hard Fault。引发Fault异常的情况有很多,除了程序本身的因素以为,设备外部环境的
发表于 10-25 14:40
Hard fault产生原因硬件方面常见原因
一、 Hard fault 产生原因硬件方面常见原因:1. 电源设计有错误,造成器件供电不稳;2. 电源质量不好,文波,噪声过大;3. 器件
发表于 02-14 07:40
程序进入硬件错误中断hard_fault如何寻找原因?
程序运行后,会卡死,进入硬件错误中断,但我不知道问题出在哪?该如何解决?在MDK环境下,进入调试模式,运行后进入rt_hw_hard_fault
发表于 02-13 13:45
程序在运行一段时间后报In Hard Fault Handler错误的原因?怎么解决?
= 0x8
r12 = 0x3
lr= 0xbcf
pc= 0x168c
psr = 0x21000000
想根诸位请教,进入In Hard Fault Handler的原因有哪些?
发表于 06-28 06:02
程序在运行一段时间后报In Hard Fault Handler错误的原因?
= 0x8
r12 = 0x3
lr= 0xbcf
pc= 0x168c
psr = 0x21000000
想根诸位请教,进入In Hard Fault Handler的原因有哪些?
发表于 08-28 07:45
如何排查程序的Hard fault错误
Hard fault产生原因,硬件方面常见原因: 1. 电源设计有错误,造成器件供电不稳; 2. 电源质量不好,文波,噪声过大; 3.器件接
发表于 11-22 14:13
•7次下载
评论