会,但这是典型的错误用法。看门狗(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