加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

基于STM32、FreeRTOS實現(xiàn)硬件看門狗+軟件看門狗監(jiān)測多任務的思路

2021/03/01
649
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

這是一篇舊文,技術(shù)交流群有人在討論這個問題,今天就來分享一下。

我們都知道硬件看門狗的目的:是用來監(jiān)測系統(tǒng),防止系統(tǒng)死機,并在死機的情況下使其系統(tǒng)復位重啟。

嵌入式專欄

1

在RTOS操作系統(tǒng)中,如果任務(線程)較多,出現(xiàn)高優(yōu)先級任務長時間占用CPU資源,低優(yōu)先級任務長時間得不到執(zhí)行這種想象,那么我們的系統(tǒng)就是具有“Bug”的系統(tǒng)。

如上描述,假如我們的線程沒有死機,只是長時間得不到執(zhí)行。在這種異常情況下,我們又不希望系統(tǒng)復位,只希望執(zhí)行特定代碼,那我們該如何來避免這種問題呢? 

關(guān)于看門狗硬件看門狗:利用一個定時器計數(shù)電路,其定時輸出連接到電路的復位端,程序在一定時間范圍內(nèi)對定時“喂狗”。

因此程序正常工作時,定時器總不能溢出,也就不能產(chǎn)生復位信號。如果程序出現(xiàn)故障,不在定時周期內(nèi)喂狗,就使得看門狗定時器溢出產(chǎn)生復位信號并重啟系統(tǒng)。
 

在STM32中,有兩個看門狗:獨立看門狗和窗口看門狗。原理和功能都類似,只是應用場景不一樣。

軟件看門狗:軟件看門狗和硬件看門狗原理類似,都是定期(在時間溢出之內(nèi)),對其喂狗。只是軟件喂狗的方式是通過自身設(shè)計的計數(shù)來實現(xiàn)。

嵌入式專欄

2

硬件+軟件看門狗監(jiān)測多任務的原理1.利用一個監(jiān)測線程(自身),來監(jiān)測其它多個線程;2.利用硬件看門狗來監(jiān)測自身。

如圖:

假如我系統(tǒng)中有多個應用線程(如上圖),我就利用一個監(jiān)測線程(自身),來監(jiān)測其它多個應用線程。

同時,為了防止自身線程異常,利用一個硬件看門狗來監(jiān)測自身。這樣就可以做到雙重監(jiān)測的作用。

嵌入式專欄

3

結(jié)合軟件來講原理上一節(jié)上述的原理可能對于有些人來說,是比較抽象的。那么這一節(jié)來看看代碼:

監(jiān)測線程(自身):

簡單來說:在監(jiān)測線程(自身)之中,需要對硬件看門狗進行喂狗。軟件看門狗的角色:在這里就是對齊計數(shù),瀏覽是否溢出,我把它封裝成一個瀏覽函數(shù)。具體的喂狗就在其他各個被監(jiān)測的線程中。

那么,再看軟件看門狗對其中一個應用線程喂狗的代碼:

這里只是簡單的舉例,一個主線程里面的喂狗。相當于:我線程啟動之后,就需要定時喂狗。如果這里長時間不喂狗,那么監(jiān)測線程(自身)就會發(fā)現(xiàn)你沒有喂狗。

嵌入式專欄

4

簡答的實現(xiàn)方法

看到這里,相信大家都知道其原理了。具體實現(xiàn)的方式方法很多種,可根據(jù)自己實際項目需要,添加相應的接口。這里舉例幾點吧。

定義一個數(shù)據(jù)結(jié)構(gòu):

這里舉例,是實現(xiàn)最基礎(chǔ)的東西,比如計數(shù)器,最大超時值等。

注冊接口函數(shù):

監(jiān)測瀏覽函數(shù)接口:

以上只是教大家方法,具體的實現(xiàn),可自己根據(jù)自己習慣,項目需求來定制化開發(fā)。

FreeRTOS

FreeRTOS

FreeRTOS 專職開發(fā)人員一直與芯片公司緊密合作, 為客戶提供市場領(lǐng)先external_link以及免費的商用級、高品質(zhì) RTOS和工具。

FreeRTOS 專職開發(fā)人員一直與芯片公司緊密合作, 為客戶提供市場領(lǐng)先external_link以及免費的商用級、高品質(zhì) RTOS和工具。收起

查看更多

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級嵌入式軟件工程師,業(yè)余維護公眾號『strongerHuang』,分享嵌入式軟硬件、單片機、物聯(lián)網(wǎng)等內(nèi)容。