お世話になります。ひやしたです。 早速のReplyどうもです。 hamayanさんWrote. >WDTのリセットの場合正確な周期は必要無いと思われるのでITRONの周期起動 >ハンドラでなくても優先順位の低いTASKを作ってそこでWDTをリセットする方 >法が良いのではないのでしょうか。dly_tskを使って簡易的に周期を生成します。 >50msなら25ms程度が適当かと。 なるほど!です。すごくすっきりしました。 私はRTOSを使い始めたばかりでして、内部の実装も無知なため もしかして周期起動ハンドラがタイマ割り込みハンドラから 直接呼ばれるような構造なのかな?とか想像しておりまして、 「だとすると暴走を確実に検知できないのでは?」とかの心配もしておりました。 TASKで叩くので有れば間違いなく検知できそうですね。 >同様にデバック時の良くやる手は最も優先順位の低いTASKでポートをバタバタ >させてそれをオシロでモニターします。CPU負荷とリアルタイム性を検証する簡 >単な手段として使っています。 こちらも非常に参考になりました。私も使わせていただきます。φ(..) 平田さんWrote. >浮動小数点演算のソースが公開されていれば1.でもいいけど自作するとなると手間が >かかるのと、その関数がどんな値を与えても正確に動くかどうかを検証するのが大変 >ですね。 実はチャレンジしてみたのですが(おっしゃる通り)ソースを完全に理解しない事には、 値によっては正確にトリガしてくれない可能性を否定できませんでした。 #ウォッチドッグを使わない方が安全って事ですネ(^^; 本末転倒。 >が、特定のタスク(たとえばモーターに電圧を供給しているとか、キルスイッチを監 >視しているタスクとか)が思わぬ事象待ちでデッドロックしていても周期起床ハンド >らは動いていそうですね。 ノイズでデッドロックした場合、という事ですね? このあたりになりますと、また違ったアプローチが必要になりそうですね。 >いっそのこと45度程度のテーブルつくって、参照すればいかがですか? 相手が天文計算なので、どうしても精度が必要になりまして。 アドバイスどうもです。 #送信直前にメールを拝見いたしましたので、こちらに着けさせていただきました。 舘野さんWrote. >具体的には各タスクにウオッチドッグカウンタ(以下WDC)を設け、割り込みハンドラ中 >で「現在実行中」タスクのWDCをデクリメント、0になったら異常検出とし、各タスクで >WDCをある値(タイマが10ms間隔で500msにしたければ50)に設定することで「餌をやる」 >事にすればいいかと。 舘野さんのおっしゃる事は、まさに「デッドロックを検出する手段」と 理解したのですが、そのような理解で宜しいのでしょうか?