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()這個函數,也就是說一直在喂狗,使看門狗不進行復位,如果沒有喂狗這個函數,看門狗就要咬人了,也就是讓程序不斷的復位,從頭開始執行,看門狗在實際項目應用中,還是很常見的,希望大家多多理解。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM