標(biāo)題: 使用Arduino UNO的看門狗 [打印本頁]

作者: zsy0425    時(shí)間: 2018-11-2 20:32
標(biāo)題: 使用Arduino UNO的看門狗
看門狗定時(shí)器用避免電子設(shè)備出現(xiàn)故障造成死機(jī),例如死循環(huán)。為此,看門狗作為一個(gè)物理定時(shí)器,在程序運(yùn)行時(shí)不斷的增加,并驅(qū)動一個(gè)中斷, 如果達(dá)到某一個(gè)設(shè)定的值,就會復(fù)位微處理器。在正常操作下,定時(shí)器在程序流程中的定期設(shè)置為0, 但如果代碼進(jìn)入死循環(huán),定時(shí)器復(fù)位不會發(fā)生,看門狗觸發(fā)中斷并重新啟動。

    使用看門狗防止死機(jī):Arduino為用戶提供了方便操作的函數(shù)和宏,可以直接引入庫:
#include <avr/wdt.h>    這個(gè)函數(shù)庫提供了三個(gè)API函數(shù)供我們使用:
wdt_enable(timeout) //看門狗使能并設(shè)置超時(shí)時(shí)間
wdt_disable() //關(guān)閉
wdt_reset() //復(fù)位timeout可以使用wdt.h文件中定義的宏常量,也可以自定義時(shí)間;
通常情況下,需要在setup()函數(shù)中使能看門狗定時(shí)器,并在loop()中不斷的喂狗防止溢出,官方給出的示例代碼如下:
#include <avr/wdt.h>
void setup(){   
pinMode(13,OUTPUT);   
wdt_enable(WDTO_2S); //開啟看門狗,并設(shè)置溢出時(shí)間為兩秒}
void loop(){   
digitalWrite(13,HIGH);   
delay(100);   
digitalWrite(13,LOW);   
delay(100);   
wdt_reset(); //喂狗操作,使看門狗定時(shí)器復(fù)位}


作者: wenhongge    時(shí)間: 2018-11-3 22:22
學(xué)習(xí)了
作者: 柯尼賽格    時(shí)間: 2019-4-29 23:04
好厲害




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1