看門狗,又叫 watchdog,從本質上來講就是一個定時器電路,通常有一個輸入和一個輸出,其中輸入叫作喂狗,輸出通常鏈接到另一個部分的復位端,通常是鏈接到單片機。 看門狗的功能是按期的查看芯片內部的狀況,一旦發生錯誤就向芯片發出重啓信號。看門狗命令在程序的中斷中擁有最高的優先級。
看門狗,又叫watchdog timer,是一個定時器電路,通常有一個輸入,叫喂狗(kicking the dog/service the dog),一個輸出到MCU的RST端,MCU正常工做的時候,每隔一段時間輸出一個信號到喂狗端,給 WDT清零,若是超過規定的時間不喂狗(通常在程序跑飛時),WDT定時超過,就會給出一個復位信號到MCU,使MCU復位。防止MCU死機. 看門狗的做用就是防止程序發生死循環,或者說程序跑飛。
[1]
看門狗是一種監控系統的運行情況的手段,經過軟硬件結合的方式實現對系統運行情況的監控。穩定運行的軟件會在執行完特定指令後進行喂狗,若在必定週期內看門狗沒有收到來自軟件的喂狗信號,則認爲系統故障,會進入中斷處理程序或強制系統復位。系統上電後根據不一樣的工做模式能夠選擇使能看門狗的時機,若看門狗被使能則計數器開始計數,若是在設定的時間內沒有及時喂狗則會發生看門狗超時。看門狗主要由寄存器、計數器和狗叫模塊構成:經過寄存器對看門狗進行基本設置,計數器計算狗叫時間,狗叫模塊決定看門狗超時後發出的中斷或復位方式。
[2]
看門狗電路的應用,使
單片機能夠在無人狀態下實現連續工做,其工做原理是:看門狗芯片和單片機的一個I/O引腳相連,該I/O引腳經過程序控制它定時地往看門狗的這個引腳上送入高電平(或
低電平),這一程序語句是分散地放在單片機其餘
控制語句中間的,一旦單片機因爲干擾形成程序跑飛後而陷入某一
程序段進入死循環狀態時,寫看門狗引腳的程序便不能被執行,這個時候,看門狗電路就會因爲得不到單片機送來的信號,便在它和單片機復位引腳相連的引腳上送出一個
復位信號,使單片機發生復位。即程序從
程序存儲器的起始位置開始執行,這樣便實現了單片機的自動復位。
[3]
硬件看門狗
硬件看門狗是利用了一個
定時器,來監控主程序的運行,也就是說在主程序的運行過程當中,咱們要在定時時間到以前對定時器進行復位。若是出現死循環,或者說PC
指針不能回來,那麼定時時間到後就會使
單片機復位。經常使用的WDT芯片如MAX813,5045,IMP 813等。
軟件看門狗
而在某些狀況下,也會採用純軟件的方法來設置看門狗,如在單片機系統中,利用閒置的定時器/計數器就能夠設計一個軟件看門狗。具體實現步驟以下:
首先,在初始化程序中設置定時器/計數器的方式以控制寄存器(TMOD) 和定時時間的初值,而且打開中斷。
而後,根據定時器的時間,在主程序中按必定的時間間隔插人復位定時器的指令(喂狗), 兩條喂狗指令之間的時間間隔能夠根據系統時鐘與指令週期計算出來,並且該時間週期應該小於定時器的定時時間。
最後,在定時器的中斷服務程序中,設置一條無條件轉移指令,將程序計數器PC轉移到初始化程序的入口。
在非單片機系統,如PowerPC系統中,也能夠採用多線程的方式來設置軟件狗,其主要的步驟以下所述:
首先,新建一個看門狗線程,該線程維護一個全局變量數組,該數組至關於每一個工做線程的計數器。看門狗線程爲一一個死循環,每隔一段時間就會循環一次,並將全局變量數組的每個值都加1後判斷是否超過預約義的上限值,若發現某個線程對應的變量數值超過最大值,則看門狗線程會重置該線程。
而後,每一個工做線程中,每隔一段時間就會將對應的全局變量置0 (喂狗)。
軟件看門狗的優勢是無需額外的硬件支持,但當系統存在嚴重的錯誤時(例如:中斷服務出錯),則有可能致使軟件看門狗失效。
[4]