マルチタスク環境でウォッチドッグに餌を与える戦略 質問する

マルチタスク環境でウォッチドッグに餌を与える戦略 質問する

いくつかの組み込みコードを FreeRTOS に移行したところ、ウォッチドッグに関する興味深いジレンマが残りました。ウォッチドッグ タイマーは、私たちのアプリケーションに必須です。FreeRTOS の使用は、私たちにとっても大きな恩恵でした。アプリケーションがシングルタスクだったときは、ロジック フローの適切な時点でウォッチドッグにデータを供給して、タスクが適切なタイミングで論理的に進んでいることを確認できました。

しかし、複数のタスクがある場合、それは簡単ではありません。 1 つのタスクは何らかの理由で行き詰まって進行していない可能性がありますが、別のタスクは問題なく進行しており、番犬に満足のいく餌を与え続けるのに十分な進行状況です。

1 つの考えは、ウォッチドッグにデータを供給するためだけに別のタスクを起動し、他のタスクが定期的に増加するいくつかのカウンターを使用して、ウォッチドッグ タスクがカウントするときに、他のすべてのタスクで進行が行われているように見えるようにすべてのカウンターを確認し、進行している場合はウォッチドッグにデータを供給するというものでした。

このような状況で他の人はどうしたのか興味があります。

ベストアンサー1

他のすべてのタスクのステータスを監視するウォッチドッグ タスクは、適切なソリューションです。ただし、カウンターの代わりに、各タスクのステータス フラグを使用することを検討してください。ステータス フラグには、UNKNOWN、ALIVE、および ASLEEP の 3 つの値があります。定期的なタスクが実行されると、フラグは ALIVE に設定されます。非同期イベントでブロックするタスクは、ブロックする前にフラグを ASLEEP に設定し、実行時に ALIVE に設定する必要があります。ウォッチドッグ モニター タスクが実行されると、すべてのタスクが ALIVE または ASLEEP の場合にウォッチドッグがキックされます。次に、ウォッチドッグ モニター タスクはすべての ALIVE フラグを UNKNOWN に設定する必要があります (ASLEEP フラグは ASLEEP のままである必要があります)。UNKNOWN フラグを持つタスクは、モニター タスクがウォッチドッグを再度キックする前に、実行され、フラグが再度 ALIVE または ASLEEP に設定されなければなりません。

詳細については、この記事の「マルチタスク」セクションを参照してください。http://www.embedded.com/design/debug-and-optimization/4402288/ウォッチドッグタイマー

おすすめ記事