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