当前位置: 首页 > news >正文

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

看门狗定时器(Watchdog Timer,WDT)是嵌入式系统中保障程序可靠运行的最后一道防线。当程序因异常进入死循环或“跑飞”时,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软件控制

一句话总结:看门狗的价值在于“程序失控时一定能复位”,所有使用技巧都围绕一个目标——确保清狗动作只能由健康运行的主程序发出。

http://www.jsqmd.com/news/1405117/

相关文章:

  • Havennlon | 杂谈:AI补出来的,是表达完整性,不是认知完整性
  • 智能堆高机器人:窄通道、集群调度与无人化物流落地实践
  • 亲属关系公证双认证怎么办理?材料有哪些?科普
  • 2026 八月最新廊坊管道维修马桶疏通冻堵处置暗管测漏异物打捞商家汇总 - 启航优客
  • 2026年8月黄山外墙漏水维修靠谱渠道盘点,高层高空渗水修缮避坑指南 - 聪居到家
  • llms-txt-hub安全架构揭秘:CSRF防护、速率限制与Google Web Risk三重防线
  • Android14 WMS-IWindow介绍
  • 电脑搜索应用找不到如何解决
  • 2026年隐形拉链厂家怎么选?一份行业观察与选型指南 - 品牌报告
  • Genesis WordPress缓存优化终极指南:Varnish高性能缓存配置与WordPress命中率提升技巧
  • 7-Zip-zstd压缩工具完全指南:一步到位让7-Zip用上6大现代压缩算法
  • 抖音批量下载工具完全上手手册:5 步用 douyin-downloader 建起无水印视频内容库
  • AXPhotoViewer 网络集成详解:SDWebImage、Kingfisher、Nuke 等 6 大方案对比与选型
  • 微信聊天记录导出终极指南:如何让每一段对话永久留痕?
  • FastCSV 读取 CSV 的 3 种记录类型:CsvRecord、NamedCsvRecord 与 StringArray,一篇搞懂怎么选
  • MobaXterm-keygen 使用指南:三步生成 Custom.mxtpro 注册文件,解锁专业版全部功能
  • 2026年贵阳人工养殖黄鳝基地 解决选场困惑 五家专业参考 - 滚动商讯
  • 温州小程序App制作公司怎么选?2026年十家高口碑服务商评测与实力解析 - 软件测评师
  • 新手养宠避坑指南,线下场地积累真实养犬认知 - 北京同城宠物基地
  • MAC地址每台设备的身份证号
  • 抖音无水印批量下载器完整实战指南
  • 基于SpringBoot的同人创作与分享平台系统(毕业设计项目源码+文档)
  • QSYM 核心架构全解析:从 PIN 插桩到 Z3 求解
  • SmartBugs 跨平台安装终极指南:Windows/macOS/Linux 避坑全攻略
  • 5步搭好免费自托管游戏串流服务:Sunshine 从安装到畅玩全指南
  • SCOOP多机部署实战:用SSH与hostfile构建分布式集群
  • iPhone远程控制安卓手机:Scrcpy-iOS跨平台远程控制从零上手
  • 2026单轴转台选购指南:精度、传动与厂家盘点
  • MiniMax Music 3 环境搭建教程:SGLang-Omni 部署与 API 调用从零开始
  • 【b站咸虾米】3 Vue CLI脚手架 2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例