FreeRTOS实验_独立看门狗监视多线程
生活随笔
收集整理的這篇文章主要介紹了
FreeRTOS实验_独立看门狗监视多线程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.首先隨意創(chuàng)建幾個線程,如下圖:
2.然后就要思考了,怎么樣實(shí)現(xiàn)如果其中一個線程死掉了,就不喂狗得以讓系統(tǒng)重啟?
??????? 其實(shí),我們可以反過來想一下,什么情況下才喂狗得以讓系統(tǒng)正常運(yùn)行?答案是,所有線程都活著的時候。
??????? 那么我們就讓所有線程每隔一段時間上報一次“我還活著”事件給監(jiān)視程序,當(dāng)監(jiān)視程序發(fā)現(xiàn)其中一個線程在這段時間內(nèi)沒有上報“我還活著”事件時就停止喂狗。
?????? 我們用事件組來達(dá)到,這一目的,如下圖:
????? ?
3.接下來,我們?yōu)槊總€線程都可以定義一個事件標(biāo)志,如下圖:
????? ?
4.我們現(xiàn)在可以封裝一個函數(shù),當(dāng)某個線程調(diào)用這個函數(shù)的時候,該線程就上報“我還活著”事件給監(jiān)視程序,如下圖:
????? ?
5.萬事俱備,我們現(xiàn)在只欠有一個監(jiān)視程序了,如果收到所有線程上報“我還活著”事件,就喂狗。
??????? 我們此時思考一下,這個監(jiān)視程序肯定不能使獨(dú)立的線程,因為這涉及到該線程也可能死掉的情況。
??????? 思前想后,得到有種方案,定時器或者軟件定時器。
??????? 我個人比較偏向于使用軟件定時器。因為使用軟件定時器可以不占用硬件資源;況且也不是要時間很精確地喂狗,只要在復(fù)位之前能喂一下狗就夠了。
??????? 創(chuàng)建軟件定時器,如下圖:
????? ?
6.監(jiān)視的主體有了,接下來我們可以寫一下監(jiān)視過程了,一旦所有線程都發(fā)送“我還活著”事件,就立即喂狗,如下圖:
????? ?
7.好了,可以開啟,定時器和獨(dú)立看門狗了,如下圖:
????? ?
8.嗯,既然每秒監(jiān)視一次線程嘛,那么當(dāng)然所有線程都要保證在一秒之內(nèi)上報自己還活著啦!如下圖:
????? ?
???? ?
????? ?
??????? 總是,不要讓線程輪轉(zhuǎn)一次超過看門狗復(fù)位時間。。。當(dāng)然你也可以到處去調(diào)用thread_iwdg_refresh()去喂狗,我是不喜歡這么做的。
OK,這樣多線程獨(dú)立看門狗的運(yùn)用方法就寫完了。
2.然后就要思考了,怎么樣實(shí)現(xiàn)如果其中一個線程死掉了,就不喂狗得以讓系統(tǒng)重啟?
??????? 其實(shí),我們可以反過來想一下,什么情況下才喂狗得以讓系統(tǒng)正常運(yùn)行?答案是,所有線程都活著的時候。
??????? 那么我們就讓所有線程每隔一段時間上報一次“我還活著”事件給監(jiān)視程序,當(dāng)監(jiān)視程序發(fā)現(xiàn)其中一個線程在這段時間內(nèi)沒有上報“我還活著”事件時就停止喂狗。
?????? 我們用事件組來達(dá)到,這一目的,如下圖:
????? ?
3.接下來,我們?yōu)槊總€線程都可以定義一個事件標(biāo)志,如下圖:
????? ?
4.我們現(xiàn)在可以封裝一個函數(shù),當(dāng)某個線程調(diào)用這個函數(shù)的時候,該線程就上報“我還活著”事件給監(jiān)視程序,如下圖:
????? ?
5.萬事俱備,我們現(xiàn)在只欠有一個監(jiān)視程序了,如果收到所有線程上報“我還活著”事件,就喂狗。
??????? 我們此時思考一下,這個監(jiān)視程序肯定不能使獨(dú)立的線程,因為這涉及到該線程也可能死掉的情況。
??????? 思前想后,得到有種方案,定時器或者軟件定時器。
??????? 我個人比較偏向于使用軟件定時器。因為使用軟件定時器可以不占用硬件資源;況且也不是要時間很精確地喂狗,只要在復(fù)位之前能喂一下狗就夠了。
??????? 創(chuàng)建軟件定時器,如下圖:
????? ?
6.監(jiān)視的主體有了,接下來我們可以寫一下監(jiān)視過程了,一旦所有線程都發(fā)送“我還活著”事件,就立即喂狗,如下圖:
????? ?
7.好了,可以開啟,定時器和獨(dú)立看門狗了,如下圖:
????? ?
8.嗯,既然每秒監(jiān)視一次線程嘛,那么當(dāng)然所有線程都要保證在一秒之內(nèi)上報自己還活著啦!如下圖:
????? ?
???? ?
????? ?
??????? 總是,不要讓線程輪轉(zhuǎn)一次超過看門狗復(fù)位時間。。。當(dāng)然你也可以到處去調(diào)用thread_iwdg_refresh()去喂狗,我是不喜歡這么做的。
OK,這樣多線程獨(dú)立看門狗的運(yùn)用方法就寫完了。
總結(jié)
以上是生活随笔為你收集整理的FreeRTOS实验_独立看门狗监视多线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cJSON 使用笔记
- 下一篇: FreeRtos 内核函数 cms