工業(yè)級無線路由器,作為無線組網(wǎng)中非常重要的設備,洞察客戶應用場景,只要是關乎無線組網(wǎng)可靠性的需求,即使是最細微的技術應用都要做到極致,比如看門狗。為什么工業(yè)級無線路由器這么重視軟硬件看門狗,今天我們就來看看軟硬件看門狗區(qū)別。
看門狗,又叫 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指針不能回來。那么定時時間到后就會使單片機復位。
軟件看門狗技術的原理和這差不多,只不過是用軟件的方法實現(xiàn),我們還是以51系列來講,我們知道在51單片機中有兩個定時器,我們就可以用這兩個定時器來對主程序的運行進行監(jiān)控。我們可以對T0設定一定的定時時間,當產生定時中斷的時候對一個變量進行賦值,而這個變量在主程序運行的開始已經有了一個初值,在這里我們要設定的定時值要小于主程序的運行時間,這樣在主程序的尾部對變量的值進行判斷,如果值發(fā)生了預期的變化,就說明T0中斷正常,如果沒有發(fā)生變化則使程序復位。
對于T1我們用來監(jiān)控主程序的運行,我們給T1設定一定的定時時間,在主程序中對其進行復位,如果不能在一定的時間里對其進行復位,T1 的定時中斷就會使單片機復位。在這里T1的定時時間要設的大于主程序的運行時間,給主程序留有一定的的裕量。而T1的中斷正常與否我們再由T0定時中斷子程序來監(jiān)視。這樣就夠成了一個循環(huán),T0監(jiān)視T1,T1監(jiān)視主程序,主程序又來監(jiān)視T0,從而保證系統(tǒng)的穩(wěn)定運行。
兩者相同點如下:
1) 都是通過定時器實現(xiàn);定時時間到沒有喂狗就進行復位。
2) 都是需要在規(guī)定的時間內喂狗。
3) 兩者都是靠軟件進行喂狗。
兩者的主要差異如下:
1) 附加功能:硬件看門狗芯片一般還附帶了延遲復位和電源檢 測的功能,軟件則沒有。
2) 屏蔽方法:軟件看門狗很容易屏蔽關閉,只需修改其中的寄存器,而硬件看門狗一旦啟動不斷電就停不下來。
3) 啟動方式:軟件看門狗很容易啟動,只需修改其中的寄存器。硬件一般是收到第一個喂狗信號后就啟動。
4) 初始化:硬件看門狗上電后收到第一個喂狗脈沖就完成了初始化,軟件看門狗則需要配置相關的寄存器(或者調用相關的看門狗子程序)。
工業(yè)級無線路由器、工業(yè)級無線DTU具有雙重看門狗,包括軟件看門狗與硬件看門狗,當設備終端出現(xiàn)異常時,會智能進行軟件喚醒或硬件斷電自動重啟,實時保障無線組網(wǎng)與無線數(shù)據(jù)傳輸暢通無阻。
軟件看門狗包括一個喂狗(kicking the dog or service the dog)進程。喂狗進程按一定的周期執(zhí)行喂狗操作,該周期小于等于定時器的周期。具體地,當系統(tǒng)正常工作的時候,每隔一段時間輸出一個信號到喂狗端,給定時器清零;如果超過規(guī)定的時間不喂狗,定時器超時,就會輸出一個復位信號到系統(tǒng),使系統(tǒng)復位,以防止系統(tǒng)死機。
而硬件看門狗開啟則不受軟件的約束,設備上電就可以依賴上拉電阻提供的高脈沖開啟看門狗,只要軟件不及時喂狗,就復位,這個是無條件的。所謂一分錢一分貨,在電子產品也是適用的。
軟件和硬件的看門狗的最主要差異在于開啟看門狗的時機,軟件看門狗必須初始化(配置)看門狗才能使用,如果軟件看門狗是廠商提供的SDK中的一個API接口,開發(fā)者又沒有能力修改底層的uboot、內核,無法在uboot、內核階段開啟和喂狗,開啟看門狗的時機就很晚了,程序就有可能還沒有跑到看門狗初始化就掛了,中間的都不受控。