码迷,mamicode.com
首页 > 其他好文 > 详细

zigbee学习之路(十一):看门狗

时间:2016-04-04 10:21:11      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

一.前言

     今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来。

二.原理与分析

    在CPU 可能受到一个软件颠覆的情况下,看门狗定时器(WDT)用作一个恢复的方法。当软件在选定时间间隔内不能清除WDT 时,WDT 必须就复位系统。看门狗可用于受到电气噪音、电源故障、静电放电等影响的应用,或需要高可靠性的环境。如果一个应用不需要看门狗功能,可以配置看门狗定时器为一个间隔定时器,这样可以用于在选定的时间间隔产生中断。这也是我们学习看门狗的作用,我们首先要配置WDT寄存器,WDT寄存器如下:

技术分享

    这次实验选用的是看门狗模式,时间间隔1秒检测一次,清除位也要配置,相当于喂狗。

三.程序

#include <ioCC2530.h>

#define uint unsigned int

#define uchar unsigned char

#define LED1  P1_0    //P1_0连接LED1

#define LED2  P1_1    //P1_1连接LED2

#define LED3  P1_4    //P1_4连接LED3

//函数声明 void LED_IO_Init(void); void Watchdog_Init(void); void FeetDog(void); void Delayms(uint xms);

/*********************  函 数 名  : main  功能描述  : WatchDog测试(通过注释掉“喂狗函数”来观察实验现象)  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ****************/

void main(void)

{    

   LED_IO_Init();  //LED IO初始化    

   Watchdog_Init();  //看门狗初始化        

while(1)    

{                       

  LED1=~LED1;        

Delayms(1000);            //通过注释测试,可以看到LCD1以少于1s的时间间隔闪烁,说明系统在不停地复位 //    

    FeetDog();       // 防止程序跑飞    

} }

/***************  函 数 名  : LED_IO_Init  功能描述  : LED_IO初始化函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE *********/

void LED_IO_Init(void)

{    

P1DIR=0xff;       

LED1=0;        //点亮LED1    

LED2=0;        //点亮LED2,指示作用   

  LED3=1;        //点亮LED3,指示作用

}

/************************  函 数 名  : Watchdog_Init  功能描述  : 看门狗初始化函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE *************************/

void Watchdog_Init(void)

{    

WDCTL = 0x00;  //这是必须的,打开IDLE才能设置看门狗    

WDCTL |= 0x08; //时间间隔一秒,看门狗模式      

}

/************************  函 数 名  : FeetDog  功能描述  : 喂狗函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ************************/

void FeetDog(void) {     WDCTL = 0xa0;     WDCTL = 0x50; }

/***************************  函 数 名  : Delayms  功能描述  : 毫秒延时  输入参数  : xms:延时时间,如 i=xms 即延时i/2毫秒  输出参数  : none  返 回 值  : none ***********************/

void Delayms(uint xms) 

{    

uint i,j;    

for(i=xms;i>0;i--)      

for(j=587;j>0;j--);

}

四.总结

    通过上面这个程序,我们可以看出,主程序里一直在执行FeetDog()这个函数,也就是说一直在喂狗,使看门狗不进行复位,如果没有喂狗这个函数,看门狗就要咬人了,也就是让程序不断的复位,从头开始执行,看门狗在实际项目应用中,还是很常见的,希望大家多多理解。

 

zigbee学习之路(十一):看门狗

标签:

原文地址:http://www.cnblogs.com/sjsxk/p/5351440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!