在購買路由器等物聯(lián)網設備時,都看到看門狗這項功能,那么,看門狗是真的狗嗎?答案肯定不是,看門狗機制是什么呢?聚英電子來給您解答。
看門狗,又叫 watchdog timer,是一個定時器電路, 一般有一個輸入,叫喂狗,一個輸出到MCU的RST端,MCU正常工作的時候,每隔一段時間輸出一個信號到喂狗端,給 WDT 清零,如果超過規(guī)定的時間不喂狗,(一般在程序跑飛時),WDT 定時超過,就會給出一個復位信號到MCU,是MCU復位. 防止MCU死機. 看門狗的作用就是防止程序發(fā)生死循環(huán),或者說程序跑飛。
在系統(tǒng)運行以后也就啟動了看門狗的計數(shù)器,看門狗就開始自動計數(shù),如果到了一定的時間還不去清看門狗,那么看門狗計數(shù)器就會溢出從而引起看門狗中斷,造成系統(tǒng)復位。所以在使用有看門狗的芯片時要注意清看門狗。硬件看門狗是利用了一個定時器,來監(jiān)控主程序的運行,也就是說在主程序的運行過程中,我們要在定時時間到之前對定時器進行復位如果出現(xiàn)死循環(huán),或者說PC指針不能回來。那么定時時間到后就會使單片機復位。
工作原理:
1、看門狗是一個用獨立時鐘源提供的脈沖進行累加計數(shù)的計數(shù)器,無需任何外部元件;
2、獨立的RC時鐘信號源是指RC振蕩器與OSC1引腳的外接RC振蕩器,OSC1和OSC2外接晶體振蕩器或陶瓷諧振器構成的單片機系統(tǒng)時鐘是分離的,這就意味著,即使單片機進入系統(tǒng)時鐘停振的睡眠狀態(tài),監(jiān)視計時器仍然能夠運行;
3、在單片機執(zhí)行程序期間,一次看門狗定時器超時溢出,將使單片機產生復位操作,如果單片機處于睡眠狀態(tài),一次看門狗定時器超時溢出將使單片機被喚醒,恢復正常運行狀態(tài),并且繼續(xù)執(zhí)行在進入睡眠之前被擱置的程序;
4、每次看門狗定時器超時溢出,都會使得狀態(tài)條件寄存器中的TO位被清0,以記錄曾經發(fā)生的這次看門狗溢出事件,供作程序查詢判斷用;
5、當監(jiān)視計時器等于O時,看門狗定時器將被永久禁止,當監(jiān)視計時器等于1時,看門狗定時器將被永久啟用。
硬件看門狗的主體是個定時電路,并由被監(jiān)控CPU提供周期性“喂狗”信號,對定時器清零(俗稱“清狗”)。CPU正常作時,由于能定時“清狗”,看門狗內的定時器不會溢出。當CPU出現(xiàn)故障,則不能繼續(xù)提供“清狗”信號,使得看門狗內定時器不斷累加溢出,從觸發(fā)個復位信號對CPU進復位,使CPU重新運作。
一般來說,看門狗也叫“看門狗定時器”!為什么叫定時器呢?因為我們也可以把它理解成定時器。在使用的時候可以給他一個值,讓他在程序啟動后啟動后開始定時。常見有以下兩種或情況:
1、系統(tǒng)復位:在看門狗函數(shù)中設置一個函數(shù),每間隔一段時間發(fā)送給CPU一次復位信號,CPU進行復位操作。
2、如果系統(tǒng)正常運行不想讓系統(tǒng)產生復位:
程序正常啟動,定時器開始,初始值減小,判斷初始值是否為0,如果為0、給CPU發(fā)送復位信號,我們可以重置看門狗,簡稱喂狗,讓其繼續(xù)檢測等待下一次投喂。
反之,計數(shù)器重置重新計數(shù),這個過程稱為清狗操作。
當沒有東西可以喂狗時,CPU就會收到復位信號,系統(tǒng)復位重新運行。
在系統(tǒng)運行以后,定時器就會被啟動,如果到時間后還不去清狗,計時器就會溢出從未引起看門狗中斷,造成系統(tǒng)復位。因此我們在使用過程中要及時去清狗!