找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6599|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

使用Arduino UNO的看門狗

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:419881 發(fā)表于 2018-11-2 20:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
看門狗定時器用避免電子設(shè)備出現(xiàn)故障造成死機,例如死循環(huán)。為此,看門狗作為一個物理定時器,在程序運行時不斷的增加,并驅(qū)動一個中斷, 如果達到某一個設(shè)定的值,就會復(fù)位微處理器。在正常操作下,定時器在程序流程中的定期設(shè)置為0, 但如果代碼進入死循環(huán),定時器復(fù)位不會發(fā)生,看門狗觸發(fā)中斷并重新啟動。

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:420284 發(fā)表于 2018-11-3 22:22 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報

板凳
ID:521352 發(fā)表于 2019-4-29 23:04 | 只看該作者
好厲害
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表