システムはどのように正確に動作していますか?私は常にソフトウェアとハードウェアウォッチドッグの組み合わせを使用します。私に説明させてください...
私の例では、プリエンプティブリアルタイムカーネルを使用しており、CPU /マイクロコントローラでウォッチドッグサポートを行っていることを前提としています。このウォッチドッグは一定の時間内に蹴られなかった場合にリセットを行います。
1)定期システムタイマー(「RTOS時計」)が動作しています(「スリープ」などの機能が動作しなくなり、システムが使用できなくなる)。
2)すべてのスレッドは、妥当な期間実行できます。
私のRTOS(www.ieton.be/micror2k)は、RTOSクロック割り込みハンドラでコードを実行する可能性を提供します。これはハードウェアウォッチドッグをリフレッシュする唯一の場所なので、クロックが常に実行されていることを確認します(ウォッチドッグがシステムをリセットしない場合)。
(常に優先度が最も低い)アイドル状態のスレッドでは、「ソフトウェアウォッチドッグ」がリフレッシュされます。これは、単に変数を特定の値(たとえば1000)に設定することです。 RTOSクロック割り込み(ハードウェアウォッチドッグをキックする場所)では、この値を減らしてチェックします。値が0になると、アイドルスレッドが1000クロックティックで実行されておらず、システムを再起動したことを意味します(ハードウェアのウォッチドッグを再起動させるために割り込みハンドラ内で無期限にループすることによって可能です)。
元の質問については、私はシステム時計が稼働し続けていると仮定しているので、システムをリセットするのはソフトウェアウォッチドッグです。 RTOSクロック割り込みハンドラでは、ソフトウェアウォッチドッグの状況が発生した場合に備えて、「統計収集」を行うことができます。システムをリセットする代わりに、問題が発生した後に各クロックティックでどのスレッドが実行されているのかを確認し、何が起きているのかを調べることができます。それは理想的ではありませんが、それは助けになります。
もう1つの方法は、複数のソフトウェアウォッチドッグを異なる優先度で追加することです。アイドルスレッドがVariableAを1000に設定し、(専用の)中優先スレッドに変数Bを設定させます。RTOSクロック割り込みハンドラでは、両方の変数をチェックします。この情報を使用すると、ループしているスレッドの優先度が「中」または「中」より高いかどうかを知ることができます。あなたが望むなら、あなたが好きな3番目または4番目のソフトウェアウォッチドッグを追加することができます。最悪の場合は、使用されている優先度ごとにソフトウェアウォッチドッグを追加します(ただし、余分なスレッドが必要になります)。
出典
2009-06-09 11:14:47
Ron
問題は、BはAよりも優先度が高いことです.Bはロックされていますが、Aはウォッチドッグをキックしません。 AはBのロックアップのせいになる。 – Robert