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

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

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

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

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

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

嵌入式專欄

1

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

如上描述,假如我們的線程沒(méi)有死機(jī),只是長(zhǎng)時(shí)間得不到執(zhí)行。在這種異常情況下,我們又不希望系統(tǒng)復(fù)位,只希望執(zhí)行特定代碼,那我們?cè)撊绾蝸?lái)避免這種問(wèn)題呢? 

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

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

在STM32中,有兩個(gè)看門狗:獨(dú)立看門狗和窗口看門狗。原理和功能都類似,只是應(yīng)用場(chǎng)景不一樣。

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

嵌入式專欄

2

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

如圖:

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

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

嵌入式專欄

3

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

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

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

那么,再看軟件看門狗對(duì)其中一個(gè)應(yīng)用線程喂狗的代碼:

這里只是簡(jiǎn)單的舉例,一個(gè)主線程里面的喂狗。相當(dāng)于:我線程啟動(dòng)之后,就需要定時(shí)喂狗。如果這里長(zhǎng)時(shí)間不喂狗,那么監(jiān)測(cè)線程(自身)就會(huì)發(fā)現(xiàn)你沒(méi)有喂狗。

嵌入式專欄

4

簡(jiǎn)答的實(shí)現(xiàn)方法

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

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

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

注冊(cè)接口函數(shù):

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

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

FreeRTOS

FreeRTOS

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

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

查看更多

相關(guān)推薦

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

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