【问题标题】:HardFault cortex, how do i debug itHardFault cortex,我该如何调试它
【发布时间】:2017-10-29 15:08:29
【问题描述】:

我正在使用带有 freertos 的 cortex m4,我收到以下错误

Err: -110595: Hardfault occurred!

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

【问题讨论】:

标签: error-handling embedded runtime-error freertos


【解决方案1】:

这总是很棘手,没有通用的清单应该检查什么才能让您有 100% 的机会快速成功。

无论如何,检查几个寄存器的值应该会给你足够的信息来继续。为此,您必须知道进入异常的过程是什么——尤其是核心寄存器和堆栈发生了什么:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/Babefdjc.html

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

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

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

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

  • CFSRSCB 中的其他与故障相关的寄存器 - 它应该为您提供更多信息,究竟是什么导致了问题。由于 SCB 是一个外围模块,因此默认情况下它在大多数 IDE 中是不可见的。安装外设插件或通过内存检查窗口访问地址http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/Cihcfefj.html

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

祝你好运!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2019-03-09
      相关资源
      最近更新 更多