HardFault皮质,我该如何调试它

时间:2017-10-29 15:08:30

标签: error-handling embedded runtime-error freertos

我使用带有freertos的皮质m4,​​我收到以下错误

Err: -110595: Hardfault occurred!

我不知道该检查什么。 意思是CRIT_ERR_HARD_FAULT,但我该如何追溯它呢?

2 个答案:

答案 0 :(得分:0)

您的 HardFault 处理程序是否被强烈定义?如果您能够连接调试器并且故障可重现,则可以在故障处理程序中设置断点并检查堆栈跟踪以查找可能感兴趣的区域。

或者,this guide提供了一种高度便携且有用的方法来诊断ARM处理器的硬故障并收集故障后的信息。

答案 1 :(得分:0)

这总是很棘手,并且没有共同的清单应该检查什么,以便您有100%的机会在这里取得快速成功。

无论如何检查几个寄存器的值应该给你足够的信息来继续。要做到这一点,你必须知道输入异常的过程是什么 - 特别是核心寄存器和堆栈发生了什么:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/Babefdjc.html

如果您可以使用在线调试,请在硬故障处理程序中添加断点并检查以下内容:

  • 堆叠PC - 如上文所述,在异常进入时,ARM内核会自动将寄存器r0,r1,r2,r3,sp,lr,pc和psr压入堆栈。查阅以确定执行前程序的位置

  • 当前LR - 验证您是来自线程模式(正常程序执行)还是其他中断比较当前LR与文章中的表格

  • ISR_NUMBER IPSR 是当前 PSR 的一部分 - 验证是否发生了硬故障异常或您的硬故障处理程序用作所有类型故障的接收器

    CFSR 以及 SCB 中的其他与故障相关的寄存器 - 它应该为您提供更多信息,确切地说是导致问题的原因。由于SCB是外围块,因此默认情况下在大多数IDE中都不可见。安装外围插件或只是通过内存检查窗口http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/Cihcfefj.html

    访问地址

如果您无法进行在线调试,则需要一个以某种方式转储这些寄存器的功能。

祝你好运!