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