60 秒回答模板

看门狗的价值是系统跑飞、死锁或关键调度失效时自动复位恢复,但喂狗必须代表系统健康。更稳的做法是监督任务收集关键任务心跳、队列积压、通信状态和主循环进度,全部正常才喂狗;窗口看门狗还要求不能过早或过晚。超时时间要覆盖最坏合法阻塞、启动和 Flash 擦写,又要满足恢复时限。定位时先读 reset reason。HardFault 可在异常 handler 中保存异常栈帧、CFSR/HFSR、PC/LR/SP;纯 watchdog reset 后普通 CPU 寄存器通常已经丢失,必须依赖 pretimeout/NMI、保留 RAM、备份寄存器、任务心跳快照、栈水位或周期性 PC 采样等提前保存现场。没有预埋现场时,只能结合日志、最后心跳任务和复现调试定位。

考点 监督喂狗
难度 真实面经题
回答目标 展示自己能把看门狗用于可靠恢复,并能通过现场保存定位死机根因。

深入解析

01

看门狗是最后恢复机制

它不能防止 bug 发生,但能限制系统卡死时间。适合无人值守、长期运行和安全相关设备,避免一次异常让设备永久不可用。

02

喂狗要代表系统健康

如果在中断或空循环里无条件喂狗,即使业务任务死锁也不会复位。更合理的是关键任务定期上报心跳,由监督逻辑统一判断后喂狗。

03

周期要按最坏情况设计

超时时间必须覆盖正常的最长擦写、通信等待、启动初始化和临界操作;但也不能太长,否则故障恢复慢。窗口看门狗还要防止异常快速循环不断喂狗。

04

先区分 HardFault 和 watchdog reset

HardFault、MemManage、BusFault 这类异常可在 handler 中从异常栈帧和故障寄存器保存 PC/LR/SP/xPSR 等现场;普通独立看门狗复位后寄存器通常已被复位,不能天然读取卡死瞬间的 PC。

05

看门狗现场要提前保存

要复盘纯 watchdog reset,需要 pretimeout/NMI、保留 RAM、备份寄存器、任务心跳表、栈水位、最后运行任务、错误计数或周期性采样提前落下线索。复位后启动代码读取 reset reason 和这些快照再定位。

06

日志要抗掉电和限写

现场记录应短小、带 CRC 和序号,尽量写保留 RAM 或备份域;频繁写 Flash 要考虑磨损,不能在异常路径里写大量日志。

易错点

  • 把喂狗放在任意周期中断里,导致业务死锁也不会复位。
  • 看门狗周期随便设,不考虑最坏擦写和通信等待。
  • 认为 watchdog reset 后一定能直接读到卡死瞬间的 PC/LR/SP,忽略寄存器通常已丢失。
  • 没有预埋 reset reason、任务心跳、保留 RAM 快照或 pretimeout 现场,复位后只能猜原因。
  • 把看门狗当成解决所有卡死的根因修复,而不是恢复和诊断机制。

面试官追问

为什么不在定时中断里喂狗?

定时中断可能仍然运行,而业务任务已经死锁或卡住;这样看门狗无法发现真正的系统失效。

看门狗复位后如何知道之前卡在哪里?

启动早期读取复位原因和保留现场,解析保存的 PC/LR/SP、任务栈和错误码,再用符号表定位。

面试里怎么把这个答案讲得更工程化?

不要只背定义,要补上适用边界、常见失败现象、排查证据和验证指标,让面试官看到你能把机制落到真实系统里。