我先試著搜了搜,看到了一位大佬的精辟講解,哈哈哈,謝謝大佬這里引用一下:
看門狗其實就是這么回事:
比如說你正在繞著一座小山裸奔。——程序按預定流程執行。
每次經過山腳下的某個地方,你都給一條大狼狗一根肉骨頭。——喂狗。
奔著奔著,你奔叉了道,跑到了不該去的山頂。——程序跑飛了。
或者,你在裸奔的途中睡著了。——程序死機。
這時,那條大狼狗,由于一直得不到喂食,餓瘋了,掙脫鎖鏈來追你。——看門狗定時器溢出。
你被它一嚇,腳底一軟,從山上咕嚕咕嚕滾下來。起來一看,靠,又回到了出發地點。于是只好又從頭開始裸奔。——程序復位。 |
下面我也借鑒了一下搜狗的知識:
看門狗,又叫 watchdog timer,是一個定時器電路, 一般有一個輸入,叫喂狗,一個輸出到mcu的rst端,mcu正常工作的時候,每隔一端時間輸出一個信號到喂狗端,給 wdt 清零,如果超過規定的時間不喂狗,(一般在程序跑飛時),wdt 定時超過,就回給出一個復位信號到mcu,是mcu復位. 防止mcu死機. 看門狗的作用就是防止程序發生死循環,或者說程序跑飛。(這個講解就更加專業一些,也讓我理解更加深刻了)
(我在我目前正在學習的中微的芯片數據手冊上看到的,希望之后的實踐中會加深理解)
注: 1. 若使用 WDT 功能,一定要在程序的某些地方放置“CLRWDT”指令,以保證在 WDT 溢出前能被清 零。否則會使芯片不停的復位,造成系統無法正常工作。
2. 不能在中斷程序中對 WDT 進行清零,否則無法偵測到主程序“跑飛”的情況。
3. 程序中應在主程序中有一次清 WDT 的操作,盡量不要在多個分支中清零 WDT,這種架構能最大限度 發揮看門狗計數器的保護功能。
4. 看門狗計數器不同芯片的溢出時間有一定差異,所以設置清 WDT 時間時,應與 WDT 的溢出時間有較 大的冗余,以避免出現不必要的 WDT 復位。
|