单片机死循环里会不会重启看门狗?

嵌入式 · 6 浏览
单片机死循环里会不会重启看门狗?

回答(4)

死循环里喂狗等于自杀式保护,建议用独立看门狗+外部硬件狗双保险,成本低但可靠性高。
硬件老王 · 2026-08-20
注意有些MCU的WDT在调试模式下会自动暂停,比如STM32的DBG模块,否则仿真时老复位。
阿峰单片机 · 2026-08-20
我一般把喂狗放在RTOS的空闲任务里,但会加个计数器,如果主任务超过N次没更新就故意不喂,强制复位。
老周嵌入式 · 2026-08-20
会,但这是典型的错误用法。看门狗(WDT)设计初衷是检测程序跑飞或死锁,如果在主循环里无条件喂狗,等于把看门狗变成了一个定时器,完全失去保护意义。正确做法是:只在主循环的关键节点(如任务调度、通信轮询)喂狗,且喂狗前必须检查关键标志(如系统心跳、任务超时)。 实操建议: 1. 将喂狗放在主循环末尾,但用条件判断——例如`if (system_ok) { feed_wdt(); }`,system_ok由中断或任务更新。 2. 避免在中断里喂狗,否则主循环卡死时中断仍会喂狗,掩盖故障。 3. 若必须死循环喂狗(如低功耗模式),应使用窗口看门狗(WWDT),它要求喂狗时间窗口,超时或提前都会复位。 示例(伪代码): ```c while(1) { if (task1_done && task2_done) { feed_wdt(); } // 其他任务 } ``` 这样即使某个任务死循环,看门狗也会复位系统。
mcuku 阿沐 · 2026-08-20