嵌入式看门狗:喂狗必须证明业务在前进
设备还在打印日志,控制业务却已停住,这类假活故障最容易被周期喂狗掩盖。嵌入式看门狗能否发挥作用,取决于刷新依据是否代表业务进展,以及硬件超时在真实工况下是否仍然合适。
把刷新动作放进固定定时中断,只能证明该中断仍可执行。若采集任务永远等待一个不会到来的完成事件,中断仍会准时刷新计数器,设备便失去自动恢复机会。监督对象应改成任务的进度契约,例如一次有效测量已提交、一次输出命令已获确认,而不是函数被调用过。进度标记应在动作完成之后更新;若先更新再执行可能阻塞的操作,监督者看到的就是尚未兑现的成功。允许长期空闲的任务,则应明确声明等待状态及其合法持续条件。
监督任务每轮读取各业务的完成序号,并与上次快照比较。周期不同的业务不能强求同时更新,而应各有允许停滞时长;事件型任务也不能因为没有外部请求就被判死。对于等待外设的状态,需要验证等待理由仍成立且等待没有超限。序号比简单布尔标志更容易识别新一轮完成,且读取和更新必须满足目标处理器的原子访问条件。若某个业务失约,故障应保持锁存,避免其他正常任务继续完成时把失败证据覆盖。
刷新权集中后,还要防止监督者替业务伪造健康状态。监控代码只能观察已提交结果,不能在发现停滞时顺手推进业务序号。若系统具有明确运行模式,进度契约应随模式成组切换,切换过程也需有时间上限。验证时可故意阻断结果提交而保留日志和定时中断,确认硬件最终复位;再让设备停在合法等待状态,检查是否误判。这样的故障注入检验的是监督覆盖范围,单纯删掉喂狗语句只能验证计数器会不会到期。
业务判定正确仍不代表超时参数正确。使用独立低速振荡器的看门狗,其时基往往随温度、电压和器件离散性变化。计数值相同时,时钟越快,实际复位时间越短。配置应依据具体型号数据手册中的频率上下限,分别计算最早和最晚复位时刻。前者必须容纳合法刷新间隔,后者必须早于系统能够承受的故障持续上限。只拿典型频率计算一个标称秒数,会同时低估误复位和恢复过慢两种风险。
若启用了硬件窗口刷新,限制还包括不能过早刷新。设允许的刷新时间区间随时基变化而移动,软件刷新计划必须落在所有要求覆盖工况的共同安全区内;没有交集时,就应改变窗口配置或业务安排,不能继续微调某个固定延时。窗口机制可发现部分跑飞循环中的频繁刷新,却无法自动判断业务数据是否正确。没有窗口功能的型号,也不能把独立看门狗与另一种外设的窗口行为混为一谈。
调试暂停、启动阶段和低功耗期间的计数行为,还需逐项依据芯片手册确认。调试器冻结了计数器,可能让实验室里稳定的启动流程在脱离调试器后持续重启。反过来,某些睡眠模式中计数继续运行,恢复业务前就可能到期。嵌入式产品应把这些运行阶段纳入同一时间预算,在极端温度下验证最长合法启动过程,并测量故障注入到复位输出的实际时间。测得的单次结果用于核对计算,不能取代手册给出的全范围边界。
可靠监督需要两份证据:业务确实按约定前进,复位窗口确实覆盖器件时基变化。先建立进度契约,再计算刷新边界,看门狗才会在该复位时动作,也能在合法运行时保持安静。





