在實時多任務系統中,定時器的喂狗不能在像硬件編程那樣在循環中喂狗。
ucos系統中,多個任務就像把程序划分成了多個main()。喂狗也不像無系統程序那么簡單。在參考了網上高手的帖子后,總結了以下幾種方式:
方法1:在最低優先級進行硬件喂狗。問題:在壓力程序的運行下,低優先級任務可能會長時間無法獲得cpu的使用權,並且無法知道死任務是哪一個。
方法2:在高優先級的任務中,對各個任務進行軟件判斷。 問題:同時造成高優先級的浪費,原先高優先級的操作會被看門狗搶占。喪失實時系統的優勢。
方法3:使用一個低優先級定時器,定時對所有任務進行判斷,查看每個任務內的軟件看門狗是否被清零,對未被被清零的任務進行異常次數累加。累加超出最大范圍時停止喂狗,餓狗直到復位。
推崇方法3,可以避免方法1,2 中的問題,並且判斷的間隔時間容易掌控。
