硬件看门狗 vs 软件看门狗:区别、优缺点、适用场景分析

做嵌入式系统这么多年,我经常被问到同一个问题:「到底用硬件看门狗还是软件看门狗?」

说实话,这问题没有标准答案。但如果你让我选,我个人的习惯是——能用硬件就别用软件。为什么?咱们慢慢聊。

一、先搞清楚:它们到底在干什么?

看门狗的本质,就是一个「倒计时炸弹」。你必须在它爆炸之前,给它一个信号(喂狗),告诉它「我还活着」。如果它没收到信号,就认为系统挂了,然后强制复位。

硬件看门狗和软件看门狗的区别,说白了就是:这个炸弹是焊在板子上的,还是写在代码里的。

对比项 硬件看门狗 软件看门狗
物理载体 独立芯片或MCU内部外设 定时器中断 + 软件逻辑
独立性 完全独立于CPU 依赖CPU和时钟
失效风险 极低(除非硬件损坏) 较高(CPU死机则失效)
灵活性 低(固定超时、固定动作) 高(可自定义逻辑)
成本 增加BOM成本 几乎为零

二、硬件看门狗:可靠,但有点「死脑筋」

硬件看门狗,我习惯叫它「铁面无私的保安」。它不管你的程序在干什么,只要超时没喂狗,直接拉复位。

优点很明显:

  • 绝对可靠:CPU死机、跑飞、死循环,它都能检测到。因为它的时钟和逻辑完全独立。
  • 不怕软件bug:就算你的喂狗代码写错了,只要没在规定时间内执行,它就复位。
  • 启动即生效:上电就开始计时,不需要软件初始化。

缺点也让人头疼:

  • 灵活性差:超时时间通常是固定的(比如1.6秒),你想改成2秒?换芯片吧。
  • 喂狗时机难把握:喂太早,可能错过真正的死机;喂太晚,又容易误复位。
  • 无法区分故障类型:它只知道「超时了」,但不知道是死循环还是外设卡死。

我踩过的坑: 有一次做工业控制器,用了硬件看门狗。结果发现设备偶尔会莫名其妙复位。查了三天,最后发现是喂狗代码放在了一个条件分支里——某个特殊工况下,那个分支永远进不去。嗯,从那以后,我坚持把喂狗放在主循环的最顶层,并且用独立定时器做二次校验。

三、软件看门狗:灵活,但容易「监守自盗」

软件看门狗,说白了就是「自己监督自己」。它利用MCU内部的定时器中断,在中断服务函数里检查主循环是否还在跑。

优点:

  • 极其灵活:超时时间可以动态调整,甚至可以针对不同任务设置不同的超时阈值。
  • 零成本:不需要额外芯片,一个定时器就够了。
  • 能区分故障:你可以设计多个标志位,知道是哪个任务卡死了。

缺点:

  • 不可靠:如果CPU死机,定时器中断也停了,软件看门狗就形同虚设。
  • 容易被干扰:高优先级中断长时间占用CPU,可能导致喂狗不及时。
  • 依赖时钟:如果主时钟漂移或停振,软件看门狗也跟着完蛋。

警告: 千万不要在中断服务函数里喂狗!我曾经见过一个项目,把喂狗放在定时器中断里。结果主循环死机了,中断还在跑,看门狗永远不触发复位。这等于把看门狗变成了「聋子的耳朵」。

四、适用场景:什么时候该用哪个?

我个人的经验是:看场景,别迷信。下面这张图是我自己总结的决策逻辑:

看门狗选型决策树 系统是否需要看门狗? 是 → 继续分析 否 → 不需要看门狗 CPU死机后能否自恢复? 不能 → 硬件看门狗 能 → 软件看门狗 独立芯片WDT MCU内部WDT 注:实际项目中建议硬件+软件双重看门狗,互为备份 关键路径 可选路径 最终方案

具体来说:

  • 安全关键系统(汽车、医疗、工业安全):必须用硬件看门狗,而且最好用独立芯片。我做过一个汽车BCM项目,客户明确要求「硬件看门狗必须独立于MCU,且超时时间不超过500ms」。
  • 消费电子(智能家居、玩具):软件看门狗就够了。成本敏感,而且死机了用户拔电重启就行。
  • 通信基站/服务器:硬件+软件双重看门狗。硬件保底,软件做精细化监控。
  • 电池供电设备:慎用硬件看门狗。有些硬件看门狗功耗不低,会缩短电池寿命。

五、实战建议:我一般这么干

如果你问我个人习惯,我通常的做法是:

  1. 主看门狗用硬件:选MCU内部自带的硬件WDT,超时时间设为系统最大任务周期的2-3倍。
  2. 辅看门狗用软件:在定时器中断里检查各个任务的运行状态,如果某个任务超过预期时间没更新标志位,就触发软件复位。
  3. 喂狗策略:只在主循环的固定位置喂狗,不要在中断里喂。而且喂狗前要检查关键外设的状态(比如ADC是否正常转换)。

一个小技巧: 我习惯在喂狗之前,先读一下关键寄存器的值。比如检查RTC是否还在走、看门狗计数器是否正常递减。如果发现异常,就不喂狗,让硬件看门狗自然复位。这样等于给看门狗加了一层「自检」功能。

六、总结:别纠结,看需求

硬件看门狗和软件看门狗,不是二选一的问题,而是怎么搭配的问题。

我的建议是:能用硬件就用硬件,能用双重就用双重。毕竟,系统可靠性这东西,多一道保险总比少一道强。

你想想看,一个价值几万块的设备,因为省了几毛钱的看门狗芯片而频繁死机,这账怎么算都不划算。


公众号:蓝海资料掘金营,微信deep3321