お世話になっています。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 に送ってね。