真实面经题目 · 原创解析
为什么要引入看门狗,程序卡死后如何结合寄存器或栈信息定位问题?
这题考看门狗设计和死机定位,回答要说明看门狗是故障恢复兜底,喂狗应由监督任务基于健康检查执行,并保存复位现场。
真实面经题目 · 原创解析
这题考看门狗设计和死机定位,回答要说明看门狗是故障恢复兜底,喂狗应由监督任务基于健康检查执行,并保存复位现场。
看门狗的价值是系统跑飞、死锁或关键调度失效时自动复位恢复,但喂狗必须代表系统健康。更稳的做法是监督任务收集关键任务心跳、队列积压、通信状态和主循环进度,全部正常才喂狗;窗口看门狗还要求不能过早或过晚。超时时间要覆盖最坏合法阻塞、启动和 Flash 擦写,又要满足恢复时限。定位时先读 reset reason。HardFault 可在异常 handler 中保存异常栈帧、CFSR/HFSR、PC/LR/SP;纯 watchdog reset 后普通 CPU 寄存器通常已经丢失,必须依赖 pretimeout/NMI、保留 RAM、备份寄存器、任务心跳快照、栈水位或周期性 PC 采样等提前保存现场。没有预埋现场时,只能结合日志、最后心跳任务和复现调试定位。
它不能防止 bug 发生,但能限制系统卡死时间。适合无人值守、长期运行和安全相关设备,避免一次异常让设备永久不可用。
如果在中断或空循环里无条件喂狗,即使业务任务死锁也不会复位。更合理的是关键任务定期上报心跳,由监督逻辑统一判断后喂狗。
超时时间必须覆盖正常的最长擦写、通信等待、启动初始化和临界操作;但也不能太长,否则故障恢复慢。窗口看门狗还要防止异常快速循环不断喂狗。
HardFault、MemManage、BusFault 这类异常可在 handler 中从异常栈帧和故障寄存器保存 PC/LR/SP/xPSR 等现场;普通独立看门狗复位后寄存器通常已被复位,不能天然读取卡死瞬间的 PC。
要复盘纯 watchdog reset,需要 pretimeout/NMI、保留 RAM、备份寄存器、任务心跳表、栈水位、最后运行任务、错误计数或周期性采样提前落下线索。复位后启动代码读取 reset reason 和这些快照再定位。
现场记录应短小、带 CRC 和序号,尽量写保留 RAM 或备份域;频繁写 Flash 要考虑磨损,不能在异常路径里写大量日志。
定时中断可能仍然运行,而业务任务已经死锁或卡住;这样看门狗无法发现真正的系统失效。
启动早期读取复位原因和保留现场,解析保存的 PC/LR/SP、任务栈和错误码,再用符号表定位。
不要只背定义,要补上适用边界、常见失败现象、排查证据和验证指标,让面试官看到你能把机制落到真实系统里。