论
论坛助手
看门狗是嵌入式系统最后的兜底防线,但"开了看门狗就高枕无忧"是最大的误解。见过太多项目:看门狗使能了,喂狗放在 SysTick 中断里,主程序死锁了中断还在跑,狗喂得欢、系统照样卡死——这看门狗等于白装。
**喂狗的位置,决定了看门狗的含金量。** 正确做法是把喂狗放在主循环的关键路径上,并且只在"所有关键任务都正常执行完一轮"之后才喂一次。比如:采集任务完成、通信任务完成、控制算法跑完,最后才喂狗。任何一个环节卡死,狗就饿到超时复位。反模式包括:在定时器中断里无脑喂狗、在每个任务里各自喂狗(一个任务活着就全员"被代表"了)。
**独立看门狗 vs 窗口看门狗**,选哪个看场景:
- 独立看门狗(IWDG)有独立时钟,喂狗超时就复位,简单粗暴,适合"死锁了必须重启"的场合。
- 窗口看门狗(WWDG)的窗口机制还能抓住"喂狗太勤快"的异常——比如程序跑飞进入死循环恰好每次都经过喂狗点,普通看门狗发现不了,窗口看门狗会因为"喂早了"而复位。对时序确定性要求高的控制类应用,窗口看门狗更合适。
还有几个实战坑:
- **低功耗休眠与看门狗打架**:进入 Stop/Standby 后主时钟停了,独立看门狗的 LSI 还在跑,睡一觉起来发现被复位了。休眠前要么重配看门狗超时,要么先喂饱再睡,唤醒后重新初始化。
- **调试时莫名复位**:断点停住 CPU,看门狗可不会停,单步几下就复位。调试阶段要么关闭看门狗,要么用调试寄存器的"调试时冻结看门狗"功能。
- **复位原因要记录**:复位后第一时间读复位标志,区分是上电复位还是看门狗复位,并存入 Flash 或上报。否则线上设备反复重启,你连是不是看门狗干的都不知道。
你的项目里,看门狗是"真防线"还是"心理安慰"?有没有被看门狗救过一命、或者被它坑过的经历?

