调试看门狗复位事件

我们尝试通过板载日志和遥测数据流尽可能多地提供有关看门狗重置事件的信息。本文档概述了如何利用这些信息从根本上解决导致看门狗的问题。

"这款" decode_watchdog.py 公用设施

ArduPilot 的工具目录中提供了一个 Python 脚本。可将遥测日志或机载日志中的字符串传入该脚本,它就会在 stdout 上输出人类可读的信息。

./工具/脚本/解码看门狗.py 'WDG: T16 SL0 FL128 FT3 FA0 FTP180 FLR8080153 FICSR4196355 MM76 MC246 IE0 IEC0 TN:Rove';
../_images/decode-watchdog.png

了解 T(线程)字段

这是调度表的偏移量,由载具特定任务和一般系统任务组合而成。它可以在 @SYS/tasks.txt 文件中找到,该文件可以从载具中获取,也可以在数据闪存日志中找到。

有三个魔法任务:

-1: 没有 目前 跑步  调度
-2: 跑步    功能
-3: 等待 对于 一个 IMU 样品

如果处于状态-3,那么故障发生时代码几乎肯定处于中断处理程序中。

将 LR 字段转换为一行代码

某些故障会将导致处理器故障的指令地址填入功能级复位(FLR)寄存器。该地址可转化为一行代码。

  • 确保可以复制在电路板上运行的二进制文件。

  • 试试 addr2line

  • 反汇编二进制文件: arm-none-eabi-objdump -demangle -disassemble-all -full-contents -all-headers