参考链接:https://www.pianshen.com/article/3253360786/
第一部分:定位问题
1.当出现硬件中断时,首先在硬件中断函数HardFault_Handler(void)打断点,保存现场环境;
2.打开Peripherals -> Core Peripherals -> Fault Reports按钮,可以查看到Hard Faults中的FORCED被勾选,说明是其他异常上访导致的硬件中断,同时观察HFSR(内存地址是0xE000ED2C)寄存区发现第30位置1,查看芯片手册发现是总线fault、存储器管理fault或是用法fault上访导致的硬件中断;

3.找到总线fault状态寄存器BFSR(地址0xE000ED29);用法fault状态寄存器UFSR(地址0xE000ED2A),存储器管理fault状态存储器(地址0xE000ED28),发现存储器管理fault状态寄存器为01,查表可发现是取值访问违例。成功定位错误。

第二部分:定位问题产生的位置
1.定位错误产生的位置:目前方法是先注释一大行,发现没有问题再逐步注释,直到注释到问题代码。
通过寄存器来定位产生问题的位置改天再仔细看下,后续再更新。
本文详细介绍了在嵌入式系统中如何处理硬件中断异常,通过检查HardFault_Handler、FaultReports、HFSR、BFSR、UFSR等寄存器,定位到存储器管理fault的取值访问违例问题。并提到使用逐行注释代码的方法来确定问题代码的位置。
3840

被折叠的 条评论
为什么被折叠?



