|
控制板加了看门狗,现场该复位的时候却没复位,或者反过来频繁复位。这两个现象看着相反,根子是同一件事:喂狗的逻辑没想清楚。
只喂狗不检查状态,是很常见的写法。主循环里定时喂狗,程序卡在某个 while 里等外设响应,主循环根本转不到,狗自然咬人——这种情况看门狗是有效的。但如果是中断里喂狗,主循环卡死时中断照常跑,狗就永远不咬,等于没加。
喂狗放在哪里,决定了它保护的是什么。放在定时器中断里,保护的是「系统还活着」;放在主循环末尾、并且要求关键任务都置了完成标志才喂,保护的才是「业务流程走完了」。后者才是有意义的。
复位后的处理同样重要。复位次数要记在备份寄存器或 Flash 里,上电清零;连续复位超过三次,就该进安全状态——输出全关、给上位机报故障,而不是一遍遍重启把执行机构反复带动。
窗口看门狗比普通看门狗好用。它不光要求「按时喂」,还要求「不能太早喂」。喂太早说明主循环跑飞了或者时钟配错了,同样会复位。
还有一条在硬件层面:看门狗靠内部低速时钟时,时钟本身受温度和电压影响;对安全性要求高的场合,用外部独立看门狗芯片,复位信号直接拉 MCU 的复位脚,不依赖软件。
苏州永节电子科技有限公司做单片机开发与控制板定制,程序侧的安全逻辑与硬件复位电路一起设计,www.yjeie.com。
|