クライアントから提供された、カスタマイズされた独自の RTOS に取り組んでいます。
RTOS は、優先プリエンプションを伴うラウンド ロビン スケジューリングを使用します。
シナリオは -
- Renesas H8S コントローラは 20 MHz で動作しています
- イーサネット割り込みの割り込みを構成しました (LAN9221 チップが割り込みを行っています)
- LAN コントローラからデータを読み取る OS タスクは、OS で最優先で実行されています。
- システムで 2 番目に優先度の高い別の OS タスク TCP
- ウォッチドッグを参照する OS タスク
ネットワーク上の爆撃状態をシミュレートするために、ネットワーク トラフィックを生成しました。問題は、イーサネットのデータ レートが高い (500 パケット/秒を超える) 場合です。1 秒間に設定された ISR ウォッチドッグが起動されます。
ウォッチドッグは、OS 機能の問題を検出するために、OS の優先度の低いタスクによってサービスされるように構成されています。
ISR の頻度と優先度の高いタスクがウォッチドッグ タスクをスケジュールできないとは思えません。私の疑いを確認するために、私は ISR 自体でウォッチドッグにサービスを提供し、2000 パケット/秒まで動作することを発見しました。
より高いデータ/割り込みレートでもウォッチドッグが起動しないように、状況を処理する方法を提案してください。
ウォッチドッグは、通常の OS 優先度で実行されている OS タスクで更新され、無限ループをキャッチするのに役立ちます。
OS 優先度が最も高いタスクは、Ethernet パケット読み取りタスクです。イーサネットがパケットを受信したときに発生するハードウェア割り込みが 1 つあります。ISR では、待機中のイーサネット パケット読み取りタスクをスケジュールします。
また、私のシステムでは、タイマー割り込みを使用して OS が実行されていません (他の OS の実行と同様)。OS はラウンド ロビンであり、自発的に制御を放棄します。そのため、ウォッチドッグ タスクの優先度を通常よりも高くすることはできません。そうしないと、OS は常に優先度が高く、準備ができていることを検出し (ウォッチドッグはイベントを待機せずに無限ループで更新されます)、他のタスクを実行する時間がありません。何らかのイベントを待っているタスクだけが高い優先度を持つことができます。
したがって、問題は、頻繁な割り込みと優先度の高いタスク (イーサネット パケットの読み取り) の継続的なスケジューリングのために、ウォッチドッグ タスクがリフレッシュする時間がないことです。