嵌入式系統中「看門狗」

2021-06-19 02:49:59 字數 4232 閱讀 9661

1、概述:

watchdog對於沒有底層開發經驗的開發人員來說,可能比較陌生,但是它在系統起到非常重要的作用,相當於系統警察,當系統發生嚴重錯誤(如程式進入死迴圈等)不能 恢復的時候,watchdog能夠讓系統重啟。watchdog的應用主要是在嵌入式作業系統中,避免了系統在無人干預時長時間掛起的情況。

2、watchdog模組

在比較高檔的嵌入式硬體晶元中,都有乙個watchdog模組,如果在mcu/mpu中沒有整合watchdog,一般會在此嵌入式系統中加乙個專門的watchdog晶元來實現watchdog機制。此模組主要的功能包括:

1、提供watchdog控制暫存器和配置暫存器,供軟體開發人員根據系統需要進行靈活配置。

2、提供一介面,使應用軟體能夠定時給watchdog「餵狗」。

3、提供watchdog機制,當系統進入不可恢復錯誤時,能產生乙個不可遮蔽中斷來通知系統自動重啟(一般這樣,也有改變為其他處理方式的),只有相應的復位訊號才能清除它。

3、watchdog的實現方式:

對於watchdog模組的實現,不同的硬體晶元有不同的方式,這裡介紹2中工作方式:

1、利用系統作業系統時鐘來實現watchdog

在intel xscale系列中,利用了作業系統時鐘的比較暫存器3(osmr3)做為watchdog的執行主體,當系統的watchdog啟用後,軟體就必須在一定時間內從osmr3讀出當前的計數,然後加上一定的計數值(下一次到期的計數值),再寫回到osmr3中,軟體一直週期性的重複這個過程,如果軟體沒有重新寫入新的計數使定時器到期,此osmr3會利用乙個gpio觸發系統復位。

2、晶元的專門watchdog模組

對於現在的很多晶元,已經整合了專門的watchdog模組,比如arm11的晶元,watchdog模組中,提供了比較靈活的配置和控制機制:

a、寬範圍設定過期時間間隔,從0。5秒到128秒可以使用者配置

b、可以靈活配置在低功耗下,使用或者停止watchdog功能

c、可以靈活配置在debug等狀態下,使用或者停止watchdog功能

根據不同的系統,設定好相應的暫存器,啟用watchdog後,需要應用程式週期性的服務watchdog,即我們所說的「餵狗」,對於 watchdog模組,需要定時向watchdog service register按順序寫入0x5555,0xaaaa.一般 在watchdog模組中還會提供watchdog reset status register,從中可以找到復位的具體原因。

3、微控制器的watchdog實現

許多微控制器片內自帶看門狗電路,微控制器復位時將片內自帶看門狗電路禁止,只有當程式訪問該電路時,電路啟動。如51系列微控制器對sfr中的0a6h 位址順序寫入#01eh、#0e1h;而96系列微控制器則對sfr中的0a6h位址順序寫入#1eh、#0e1h;工控主機板上看門狗電路本身並不要求復位後重新啟動,但bios在復位後將板上看門狗禁止,啟動和餵狗方法與微控制器相同。如研祥的fsc-1713主機板,在watchdog程式設計狀態,只要執行如下兩條指令:

outportb(0x2e,0xf6);  

outportb(0x2f,time-out-value);

可實現watchdog的啟停,其中time-out-value ≠0啟動;time-out-value =0停止[2] 。能夠用指令禁止看門狗是為了適應使用者程式開發階段的需要,這同時給看門狗啟動和執行失敗留下了後門,在看門狗啟動時或啟動前遇干擾而使程式跑飛,則看門狗啟動失敗,無法行使監控職能。

4、結論

watchdog在嵌入式系統中發揮著非常重要的作用,其實現方式也千差萬別,根據不同的硬體設計,可以選用不同的watchdog,但它們的作用是一樣的:保證系統在出現不可恢復錯誤時,能夠自動讓系統重啟。

1.intel xscale pocessor developer's manual    

2.arm11 晶元使用者手冊

3.watchdog失效機理與對策研究

以上就是原文,對我理解看門狗有一定的幫助,也希望能夠幫助大家。

linux嵌入式系統開發之看門狗---應用篇 

「小濤哥,你的這個什麼板子是不是壞了啊,為啥老是重啟,好奇怪啊….」小王好奇的指著我心愛的板子說。

「笨死啦,沒看到嗎, 我昨天化了一上午寫的乙個看門狗程式…」我生氣而又無奈的說。

「等等,啥?看門狗?我聽過哈巴狗,牡羊狗,落水狗,流浪狗,還就是沒聽說過你的說的那個啥子 看門狗 」小王嘴一噘鎖,「哼,你是看我不懂,忽悠我的吧」..

「切,不懂就是不懂,這還就是你沒聽過的 看門狗 」我故意提高了音調說。

算啦,也不賣官腔了,開始今天的課程----linux嵌入式系統開發之看門狗----應用篇。

話說這個看門狗,還真是形象。什麼個意思呢?就是一直「狗」它會盯著系統的定時器,如果定時器的時間值到了,你還沒有喂它東西的話,它肯定就不爽了,就把你的系統重啟,懲罰一下你,為啥這麼久了不喂它東西吃。所以嘛,為了保持系統正常執行,就要在定時器到之前不斷的喂它東西吃,賄賂一下它。

回到這個程式,為了不是看門狗叫(重啟咱們的電腦),就不斷地要從終端輸入字元來餵狗(清空定時器,讓計時值總是從0開始計數),這樣的話,就可以保持狗不會飢餓,也就不會重啟我們的電腦了。不多說了,咱們結合**來詳細介紹。

必要的標頭檔案#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

struct watchdog_info;

#define watchdog_ioctl_base 'w'

#define wdioc_getsupport _ior(watchdog_ioctl_base, 0, struct watchdog_info)

#define wdioc_settimeout _iowr(watchdog_ioctl_base, 6, int)

#define wdioc_gettimeout _ior(watchdog_ioctl_base, 7, int) 27 

#define wdios_disablecard 0x0001        /* turn off the watchdog timer */

#define wdios_enablecard 0x0002 /* turn on the watchdog timer */

#define wdioc_setoptions _ior(watchdog_ioctl_base, 4, int)

#define wdioc_keepalive _ior(watchdog_ioctl_base, 5, int)

int getch (void)   //無回顯的從螢幕輸入字元,來達到餵狗的目的

//suspend some seconds

int zsleep(int millisecond)

int init()

return fd;

}int main(int argc,char **argv)

}close(fd);   //關閉裝置

return 0;

}「小王,看清楚了嗎?這就是看門狗的應用程式,可不是你說的什麼流浪狗,哈巴狗」我拍拍小王的頭說。

「看到了,只是感覺沒啥用啊,除了你向我炫耀的左右外..」小王調皮地說道。

「啊!啊! 切,我是怕你不懂,所以就沒怎麼講它的用途和原理,以及實際的應用..」我嚇唬她到,「難的在下一節有關看門狗驅動的編寫上,知道不..」

「嗯..嗯,知道,你啊,一點幽默都不懂..不想跟你說了..」小王生氣的說…

「好了,不跟你耍嘴皮子啦,我還是給你說說這個程式咋用吧..」我不耐煩的說。

你,這樣,先gcc編譯一下,生成可執行的檔案,然後下到板子上執行,這個時候你要小心啦,要不斷的按鍵盤(除了esc),否則系統就會重啟啦,就像你開始的那樣。哈哈哈…

2010-08-24 09:52

看門狗其實就是這麼回事:

比如說你正在繞著一座小山裸奔。——程式按預定流程執行。

每次經過山腳下的某個地方,你都給一條大狼狗一根肉骨頭。——餵狗。

奔著奔著,你奔叉了道,跑到了不該去的山頂。——程式跑飛了。

或者,你在裸奔的途中睡著了。——程式宕機。

這時,那條大狼狗,由於一直得不到餵食,餓瘋了,掙脫鎖鏈來追你。——看門狗定時器溢位。

你被它一嚇,腳底一軟,從山上咕嚕咕嚕滾下來。起來一看,靠,又回到了出發地點。於是只好又從頭開始......

LINUX系統看門狗

arm linux開發 warewin 2g 3g無線傳輸 dtu 和路由器 筆記 看門狗定時器 wdt watch dog timer 它實際上是乙個 計數器,一般給看門狗乙個大數,程式 開始執行後看門狗開始倒計數。如果程式 執行正常,過一段時間cpu 應發出指令讓看門狗 復位,重新開始倒計數。如...

linux作業系統新增看門狗定時

先貼 看門狗實體地址 define watchdog base 0x01c20000 基位址 define block size 0x1000 4k大小 define rwdog0 irq en 0xca0 define rwdog0 irq sta 0xca4 define rwdog0 ctrl...

嵌入式系統

嵌入式開發的相關領域 搞嵌入式若能熟悉嵌入式應用的一些主要領域,這樣的人更受企業歡迎。主要的相關 領域包括 a 數字影象壓縮技術 這是嵌入式最重要最熱門的應用領域之一,主要是應掌握mpeg 編譯碼演算法和技術,如 pda 高精電視 機頂盒等都涉及mpeg高速解碼問 題。b 通訊協議及程式設計技術 這...