【日拱一卒,脚踏实地】快速理解-看门狗(Watchdog)机制

1 如何定义看门狗

看门狗,英文名称为Watch Dog Timer,是设计者为了防止CPU死机而设计的一种定时器模块。有了它的存在,机器一般就不会死机了。

2 怎么使用看门狗

看门狗本质是一种定时器,但与一般定时器达到计时时间触发中断不同,看门狗会触发CPU的复位,也就是机器的重启。

下面,以一个简单的流水灯小程序,来说明如何使用看门狗。

While (1)
{
LED1=1;LED2=0;LED3=0;LED4=0;
Delay (10ms);
LED1=0;LED2=1;LED3=0;LED4=0;
Delay (10ms);
LED1=0;LED2=0;LED3=1;LED4=0;
Delay (10ms);
LED1=0;LED2=0;LED3=0;LED4=1;
Delay (10ms);
}

上述程序表示每隔10ms,依次轮流点亮4个LED灯。
由于程序是在while死循环里,所以会一直重复上面这个过程。

接下来,我们给它加入看门狗,程序变成下面这样:

WDT time =50ms; //设置看门狗的定时时间为50ms
WDT =1;				  //看启看门狗
While (1)
{
Clear WDT(); 		  //喂狗,给看门狗清零
LED1=1;LED2=0;LED3=0;LED4=0;
Delay (10ms);
LED1=0;LED2=1;LED3=0;LED4=0;
Delay (10ms);
LED1=0;LED2=0;LED3=1;LED4=0;
Delay (10ms);
LED1=0;LED2=0;LED3=0;LED4=1;
Delay (10ms);
}

上述程序加入看门狗后, 就开始计时了,只要时间到了50ms,机器就会进行重启。
进入死循环后,注意首先要进行喂狗,即对看门狗定时器进行清零操作,这样每个循环才能都从零开始计时。如果不进行喂狗,将会每过50ms,机器就会进行复位一次,如此高频的复位,所造成的后果将不亚于死机,此时看门狗就会变成一条疯狗了。
所以,在使用看门狗之前,一定要喂好狗。

上述看门狗程序运行机理如下:
由于一个循环轮流点亮流水灯用时40ms,此时距离看门狗复位还有10ms的时间,下个循环又进行了清零操作,所以只要程序正常运行(即不发生死机),看门狗就永远不会触发机器重启。
当程序发生死机之后,就不会回到while死循环第一步进行喂狗了,而是等50ms过去,看门狗就会触发机器复位,此时CPU虽然死机了,但看门狗模块不会受影响,还能正常运行,所以能触发机器复位。

CPU
死机
看门狗
复位

好了,以上内容,就是我对看门狗的理解,希望对大家有所帮助。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值