zoukankan      html  css  js  c++  java
  • zigbee学习之路(十一):看门狗

    一.前言

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

    二.原理与分析

        在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()这个函数,也就是说一直在喂狗,使看门狗不进行复位,如果没有喂狗这个函数,看门狗就要咬人了,也就是让程序不断的复位,从头开始执行,看门狗在实际项目应用中,还是很常见的,希望大家多多理解。

  • 相关阅读:
    vue 将毫秒转为日期
    element-ui 点击获取table的行索引
    LInux设置tomcat端口为80
    java引用传递和值传递
    java包装类的自动装箱及缓存
    理解JVM之java内存模型
    理解JVM之类加载机制
    理解JVM之内存分配以及分代思想实现
    理解JVM之垃圾回收
    理解JVM之对象的生命周期
  • 原文地址:https://www.cnblogs.com/sjsxk/p/5351440.html
Copyright © 2011-2022 走看看