关于单片机看门狗的浅谈理解

单片机中所谓“看门狗”,本质上就是一个计时器,主要作用就是用来防止代码卡死或跑飞,在单片机的应用中十分重要,但使用时却是十分简单方便的。

按字面意思理解,跟看家护院的狗狗是一个意思,就是芯片内置的一个定时器,主要作用就是来保障程序正常运行的,所以叫做看门狗。知道了他就是个单纯的定时器后,就容易理解多了,定时器的唯一一个功能,就是定时,当定时器启动后,内部变量一直累加,当累加到设定值后,自己重启。所以当你在定时器的变量累加到设定值之前,手动把他的变量清零,让他重新累加,那他就一直到不了设定值,也就不会重启。而手动将他的变量置为0的操作,就被称之为“喂狗”。“看门狗”的运行就是用到了这个原理。

在使用“看门狗”时一般需要两步,第一步初始化看门狗,其实就是给看门狗设置计数时间,也就是变量的设定值,当看门狗达到这个设定值时,就会触发重启。但在程序的正常运行下,我们是不希望单片机重启的,所以这时候就需要第二步"喂狗",也就是手动给计数器清零。所以我们一般在程序运行完的末尾加入“喂狗”操作。

当单片机初始化时,声明“看门狗”,看门狗内部计时器开始累加。然后程序开始运行,当程序第一遍运行结束后,执行喂狗操作,给看门狗计时器清零,然后程序重新运行。如果这时程序陷入一个死循环或者代码卡死,那么程序就不能正常运行完,而放在程序最末尾的“喂狗”函数就不会被执行,看门狗的定时器也就不会被重置,当看门狗累加到设定值后,则会触发重启,单片机重新运行。

对于看门狗的使用,还是非常重要的,尤其是对需要长时间工作的硬件设备,当单片机不正常工作了,看门狗则会自动重启代码,就会给后期维护节省很多麻烦。下面的代码就是看门狗在arduino里的运用,stm32的使用也一样。

/*********

*不论是arduino还是stm32,使用看门狗都需要先加载库文件

**********/

#include <avr/wdt.h> //看门狗库文件
#define TIMEOUT WDTO_8S //设定喂狗时间8s  8s后如果收不到喂狗操作,看门狗触发重启。

//初始化函数
void setup()
{
    wdt_enable(TIMEOUT);//开始看门狗 在代码初始化阶段启动看门狗
}

//主循环
void loop()
{

//需要运行的主程序

……
    wdt_reset();//喂狗 在程序运行一遍之后执行喂狗操作
}

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值