十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

看门狗定时器(WDT)的实用技巧

看门狗定时器(WDT)的实用技巧 看门狗定时器Watchdog TimerWDT是嵌入式系统中保障程序可靠运行的最后一道防线。当程序因异常进入死循环或“跑飞”时WDT 会在超时后强制复位 MCU使系统恢复正常。然而WDT 用得不规范反而可能让这道防线形同虚设。本文结合工程实践总结四条关键技巧。一、实测 WDT 实际运行周期示波器观测法WDT 超时周期受时钟源、预分频/后分频系数、温度及器件离散性影响数据手册给出的标称值未必等于实际值。推荐用以下方法实测方法在 CLRWDT 指令前后翻转一个 I/O 引脚或驱动 LED用示波器观察该引脚波形。LED_PIN 1; // 置高CLRWDT(); // 清狗LED_PIN 0; // 置低判读要点•若系统正常运行示波器上可测得清狗动作的实际间隔周期即程序主循环的执行周期•若故意注释掉 CLRWDT可观察到 WDT 超时后复位造成的周期性重启波形从而测得真实的 WDT 超时时间。这一实测值是后续设计清狗策略的基准。二、全程序只保留一处CLRWDT原则整个工程中CLRWDT应当且只应当出现在一个位置通常是主循环的固定点。原因如下•WDT的本质要求是程序必须在超时周期之内完成一次清狗否则触发复位•若代码中散落多个CLRWDT超时窗口的起算点将变得难以追踪——任何一处清狗都会重置计数导致你无法准确判断“从最后一次清狗到下一次清狗”的最长路径是否满足时序要求•单点清狗还能保证只有主循环完整地、按预期路径执行到该点看门狗才会被清除。一旦程序卡死在中途任意环节WDT 必然超时并复位——这正是看门狗存在的意义。注意清狗点应放在主循环中“必须经过”且能代表程序健康运行的位置而不是随意放置。三、切勿在定时器中断中清狗这是一个常见但危险的反模式。先看一个典型错误做法void __interrupt() ISR(void){if (TMR0IF) {CLRWDT(); // 错误不要在中断服务程序中清狗TMR0IF 0;}}为什么不行WDT 的设计初衷是处理“不可逃脱的死循环”这类致命异常。关键在于——即使主程序卡死在死循环中定时器中断通常仍可正常触发只要全局中断未被关闭。这会造成1. 主程序陷入死循环系统功能已失效2. 定时器中断照常触发CLRWDT 在中断里被执行看门狗不断被清除3. 中断返回后程序重新回到死循环继续卡死4. 结果系统永久瘫痪但 WDT 永远不会复位——看门狗彻底失效。正确做法是把CLRWDT放在主循环中让“主程序是否健在”成为能否清狗的唯一判据。四、WDT 的使能方式配置位与软件控制WDT有两种激活途径可根据产品需求选择。方式一配置位使能推荐用于量产#pragma config WDTEN ON在配置字Configuration Bits中使能后WDT从芯片上电起始终运行无法被软件关闭可靠性最高适合对安全性要求高的量产产品。方式二软件使能SWDTEN 位在配置位中将WDT设为软件可控模式如WDTEN SW或OFF视具体器件而定然后在代码中置位SWDTEN使能#pragma config WDTEN SW // 允许软件控制// 在初始化代码中WDTCONbits.SWDTEN 1; // 软件开启 WDT此方式便于调试阶段灵活开关WDT调试器单步/断点时若WDT一直运行会频繁复位影响调试体验量产前再切换为配置位强制使能。提示不同系列器件的寄存器命名和控制细节有差异使用前请查阅对应器件数据手册的Watchdog Timer章节确认SWDTEN位所在寄存器及配置字选项。五、小结技巧核心要点示波器实测翻转I/O CLRWDT实测清狗周期与超时时间单点清狗全程序仅一处CLRWDT保证超时窗口可预测禁止中断清狗中断在死循环中仍触发会使WDT永久失效双途径使能量产用配置位WDTEN ON调试用SWDTEN软件控制一句话总结看门狗的价值在于“程序失控时一定能复位”所有使用技巧都围绕一个目标——确保清狗动作只能由健康运行的主程序发出。
返回列表