我們都知道硬件看門狗的目的:是用來監測系統,防止系統死機,并在死機的情況下使系統復位重啟。
在RTOS操作系統中,如果任務(線程)較多,出現高優先級任務長時間占用CPU資源,低優先級任務長時間得不到執行這種想象,那么我們的系統就是具有Bug的系統。
如上描述,假如我們的線程沒有死機,只是長時間得不到執行。在這種異常情況下,我們又不希望系統復位,只希望執行特定代碼,那我們該如何來避免這種問題呢?
Ⅰ關于看門狗
硬件看門狗:利用一個定時器計數電路,其定時輸出連接到電路的復位端,程序在一定時間范圍內對定時“喂狗”。
因此程序正常工作時,定時器總不能溢出,也就不能產生復位信號。如果程序出現故障,不在定時周期內喂狗,就使得看門狗定時器溢出產生復位信號并重啟系統。
在STM32中,有兩個看門狗:獨立看門狗和窗口看門狗。原理和功能都類似,只是應用場景不一樣。
軟件看門狗:軟件看門狗和硬件看門狗原理類似,都是定期(在時間溢出之內),對其喂狗。只是軟件喂狗的方式是通過自身設計的計數來實現。
Ⅱ硬件+軟件看門狗監測多任務的原理
1.利用一個監測線程(自身),來監測其它多個線程;
2.利用硬件看門狗來監測自身。
如圖:
假如我系統中有多個應用線程(如上圖),我就利用一個監測線程(自身),來監測其它多個應用線程。
同時,為了防止自身線程異常,利用一個硬件看門狗來監測自身。這樣就可以做到雙重監測的作用。
Ⅲ結合軟件來講原理
上一節上述的原理可能對于有些人來說,是比較抽象的。那么這一節來看看代碼:
監測線程(自身):
簡單來說:在監測線程(自身)之中,需要對硬件看門狗進行喂狗。軟件看門狗的角色:在這里就是對齊計數,瀏覽是否溢出,我把它封裝成一個瀏覽函數。具體的喂狗就在其他各個被監測的線程中。
那么,再看軟件看門狗對其中一個應用線程喂狗的代碼:
這里只是簡單的舉例,一個主線程里面的喂狗。相當于:我線程啟動之后,就需要定時喂狗。如果這里長時間不喂狗,那么監測線程(自身)就會發現你沒有喂狗。
Ⅳ簡答的實現方法
看到這里,相信大家都知道其原理了。具體實現的方式方法很多種,可根據自己實際項目需要,添加相應的接口。這里舉例幾點吧。
定義一個數據結構:
這里舉例,是實現最基礎的東西,比如計數器,最大超時值等。
注冊接口函數:
監測瀏覽函數接口:
以上只是教大家方法,具體的實現,可自己根據自己習慣,項目需求來定制化開發。
-
看門狗
+關注
關注
10文章
560瀏覽量
70790 -
STM32
+關注
關注
2270文章
10895瀏覽量
355743 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62144
發布評論請先 登錄
相關推薦
評論