【问题标题】:STM32f429ZI log the call stack without debuggerSTM32f429ZI 在没有调试器的情况下记录调用堆栈
【发布时间】:2017-05-05 10:47:37
【问题描述】:

我在我的系统中使用 Watch dog。如果它在 5 秒内没有重新加载,它将被触发。我想查看在看门狗重置之前完成的代码列表。在没有连接调试器的情况下可以)在我的代码中记录指令列表。

【问题讨论】:

  • 您使用的是什么操作系统?你为什么不试试ptrace ?此外,您仍然需要调试符号来识别堆栈帧上的函数。如果您不希望调试器始终连接,您可以在 看门狗触发后附加它。
  • 欢迎来到 Stack Overflow!请edit您的问题显示the code you have so far。您应该至少包含您遇到问题的代码的大纲(但最好是minimal reproducible example),然后我们可以尝试帮助解决具体问题。您还应该阅读How to Ask
  • 您仍然可以添加显示,例如 print("Flag");,以了解您的代码在停止之前的位置。
  • @Likhitha:这部分具有看门狗的早期唤醒中断功能。您可以使用它在重置之前将堆栈跟踪以及其他感兴趣的核心状态保存在非易失性存储器中。这通常最容易执行,抓取堆栈指针并将接下来的 N 个字节复制到 RAM 中标记为不会在复位后初始化的区域。然后通过重置后可用的任何渠道打印它。解释是一个棘手的部分,并且受益于熟悉机器代码,将合理的返回地址与映射文件进行比较是一个好的开始。

标签: c stm32 watchdog


【解决方案1】:

有两种方法:

  1. 使用串行调试输出并使用 usart(另一个微)获取数据
  2. 购买USB->串口转换器,使用其中一个UART输出数据。
  3. 在极端情况下:)(例如,当您无法访问引脚时)使用(如果可用)LED 来闪现所需的信息。

【讨论】:

    【解决方案2】:

    对于您的问题,有一个简单但有点贵的解决方案。 Cortex M4 内核支持跟踪指令。因此,您需要检查跟踪信号是否路由到引脚(需要大封装> 100 个引脚),启动后启用跟踪并只需连接硬件跟踪器,它将记录内核执行的每个指令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-07
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2011-02-05
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多