[H8-ML(2066)] Re: ウォッチドッグタイマ
From: hamayan <hamayan@xxxxxxxxxxxxxxx>
Date: 2002年07月09日(火)21時36分08秒
お世話になっています。hamayan です。

"Hirashita"> >> 1,暴走した場合にWDTを叩くタスクは確実にお亡くなりになるのか?
"Hirashita"> >暴走を検出する対象によります。
"Hirashita"> >WDTを叩くタスクより低優先度のタスクに対しては無効でしょうね。
"Hirashita"> 
"Hirashita"> う〜ん、言われてみれば、そんな気もします。(と言いつつ、よく解っていない)
"Hirashita"> 結局は暴走によってRTOSのTCBなどをぶっ壊してくれるのか
"Hirashita"> どうなのかが問題になるのでしょうか。

これは事実です。本来最低優先順位のTASKを作ってそれでWDTリセットを行えば
話は簡単なのですが今回の場合優先順位が逆転してしまっているのでWDTの延長
としての機能は果たしますが、またはより優先順位の高いTASKの監視機能は果た
しますが、それより低い順位のTASKの監視まではできません。
例えば優先順位の高いTASKが暴走し無限ループに嵌まる場合、何か通信の応答を
待っている場合でも良い、システムコールでディスパッチを発生させない限りそ
のTASK以下の優先順位のTASKにはCPU時間が与えられません。
逆に暴走TASKより高い順位のTASKの起床タイミングが発生した時はそのTASKに実
行権が移ります。
だからより優先順位の高いTASKが暴走した時はWDTリセットTASKの実行時間が与え
られなくなりWDTによるRESETが無事発生します。
より下位のTASKが暴走時にはWDTリセットTASKは定周期で起動します。

それで飯を食いながら、風呂に入りながら考えたのですがRTOSなんか使わずに山中
さん案の割り込みプラスメインループでの更新が一番簡単で確実に思えて来ました。
まさか暴走中都合よくメインループの更新処理でグルグル回っているとも考え難いし、
但しROMで実行中の話。

RTOSでやるならWDTのリセットは置いておいて各TASKの実行をモニターする為に割り
込み、または割り込みに準ずる優先度のTASK上から各TASKのカウントダウンタイマー
を行う方法はどうでしょう。
たとえ三角を使ったTASKでも最長実行時間が有ると思えるので割り込みまたはそれに
準するTASKで実行時間のカウントダウンを行い、タイムアウトしたTASKを検出します。
各TASKはTASKの最も外側のループの先頭でタイムアウト時間の更新を掛けます。
正常に動いていれば時間内に絶えず更新となるはずです。

------------------------------------------------------------
hamayan
	so-net:hamayan@xxxxxxxxxxxxxxxx
	でもso-netはケチでメールBOXの容量少ないので
	添付FILEのある時は
	AIRNET:hamayan@xxxxxxxxxxxxxxx
	に送ってね。

スレッド概略
[2050(R)](起点)
 └[2064(U)]
   └[表示中]
     └[2068(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]