Error handling HardFault cortex,如何调试它

Error handling HardFault cortex,如何调试它,error-handling,embedded,runtime-error,freertos,Error Handling,Embedded,Runtime Error,Freertos,我将cortex m4与freertos一起使用,收到以下错误 Err: -110595: Hardfault occurred! 我不知道该检查什么。 意思是CRIT\u ERR\u HARD\u FAULT,但我如何追溯它?您的HARD FAULT处理程序是否定义得很强?如果您能够连接调试器,并且故障是可再现的,则可以在故障处理程序中设置断点,并检查堆栈跟踪以查找可能感兴趣的区域 或者,为ARM处理器提供了一种高度可移植且有用的诊断硬故障和收集故障后信息的方法。这总是很棘手,并且没有通用的

我将cortex m4与freertos一起使用,收到以下错误

Err: -110595: Hardfault occurred!
我不知道该检查什么。
意思是CRIT\u ERR\u HARD\u FAULT,但我如何追溯它?

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


或者,为ARM处理器提供了一种高度可移植且有用的诊断硬故障和收集故障后信息的方法。

这总是很棘手,并且没有通用的检查表,您可以通过检查哪些内容获得100%的快速成功机会

无论如何,检查几个寄存器的值应该会给您提供足够的信息来继续。要做到这一点,您必须知道输入异常的过程是什么——特别是核心寄存器和堆栈发生了什么:

如果可以使用联机调试,请在硬故障处理程序中放置断点并检查以下内容:

  • 堆叠PC-如上文所述,在异常条目上,ARM内核会自动将寄存器r0、r1、r2、r3、sp、lr、PC和psr推送到堆栈上。查一查,看看程序在执行前的位置

  • 当前LR-要验证您是否来自线程模式(正常程序执行)或其他中断,请将当前LR与本文中的表进行比较

  • IPSR中的ISR\U编号是当前PSR的一部分-验证是否确实发生了硬故障异常,或者硬故障处理程序是否被用作所有类型故障的接收器

  • CFSRSCB中的其他故障相关寄存器-它应该为您提供问题的确切原因的更多信息。由于SCB是一个外围块,默认情况下,它在大多数IDE中都不可见。安装外设插件或通过内存检查窗口访问地址

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


祝你好运

不完全是这样,但可能是相关的,从arm文档开始,然后从那个里向后工作。