この新しい記事では、 ウォッチドッグ、何に使用できるか、プロジェクトでどのように使用するか Arduinoの。 この興味深いまだ知られていない機能について知っておくべきすべてのこと。 そして、はい、その名前が示すように (ウォッチドッグ)、いくつかの問題を追跡するために使用できます。
ここで見てみましょう あなたが知る必要があるすべて に関して…
ウォッチドッグとは何ですか?
コンピューティングでは、 番犬 これは、システムまたはプログラムのパフォーマンスを監視するために使用される監視メカニズムです。 その主な機能は、クラッシュやフリーズなどの異常な状況やシステム障害を検出して対応し、継続的な運用やシステムの回復を保証するための修正措置を講じることです。
番犬 タイマーで作動する これは特定の時間間隔に設定されます。 システムまたはプログラムがその時間間隔内に特定のアクションを実行しないか、ウォッチドッグに電力を供給しない (つまり、再起動しない) 場合、ウォッチドッグはシステムが望ましくない状態にあるか、正しく応答を停止していると見なし、デフォルトを採用します。アクション。 このアクションは実装によって異なる場合があり、システムの再起動、エラー ログの生成、アラームの発生、問題を修正するための特定のアクションの実行などが含まれる場合があります。
ウォッチドッグは、オペレーティング システムからサーバー、デバイスに至るまで、さまざまなコンピュータ システムやデバイスで使用されます。 Arduino を含む組み込みおよび重要なリアルタイム システム。 その主な目的は、問題を自動的に検出して対応することでシステムの信頼性と可用性を向上させ、それによって障害発生時の手動介入の必要性を減らすことです。
Arduino ウォッチドッグとは何ですか?
Arduinoのウォッチドッグタイマーはアプリケーションのニーズに応じて調整する必要があります。 彼 ウォッチドッグタイマー 内部 128 kHz クロック ソースを使用します (使用するボードと MCU によって異なる場合があります)。 アクティブにすると、ゼロからユーザーが事前に設定した値までカウントを開始します。 ウォッチドッグ タイマーがこの値に達してもリセットされない場合、マイクロコントローラーがリセットされます。
ウォッチドッグタイマー ATmega328Pで実装されています。 Arduino UNO、10 の異なる時間設定があり、それぞれがタイマーがオーバーフローしてリセットを引き起こすタイミングを決定します。 さまざまな時間間隔は、16 ミリ秒、32 ミリ秒、64 ミリ秒、0.125 秒、0.25 秒、0.5 秒、1 秒、2 秒、4 秒、8 秒です。これについては、後の表で説明します。
ウォッチドッグ タイマーで何ができるかがまだ不明な場合は、 Arduino UNO、見てみましょう 例 グラフで理解できるようにします。 この例では、LED の単純な点滅を使用します。 LED は while() ループに入る前に、設定された期間点滅します。 この while() ループは、ロックされたシステムの代替として使用されます。 while() ループ中はウォッチドッグ タイマーがリセットされないため、システムが再起動され、システムがクラッシュして再起動する前に LED が再び点滅し始めます。 このサイクルはこれからも続きます…
考慮事項と機能
ウォッチドッグタイマー コードの先頭では無効になっています。 ウォッチドッグを有効にする前に x 秒の遅延が組み込まれます。 この遅延は、Arduino ブートローダーが新しいコードがロードされているかどうかを確認し、コードをフラッシュ メモリに書き込むのに十分な時間を確保できるようにするために重要です。 この側面は予防策として重要です。 コーディングの誤りや不適切な考慮事項により、書かれたコードが非常に短い間隔で無限にマイクロコントローラーをリセットする状況が発生する可能性があります。 これにより、Arduino ボードが損傷し、コードが Arduino ボードに適切にアップロードされなくなる可能性があります。 これが起こった場合、ロックされた Arduino 上の ISP として別の Arduino を使用してブートローダーを書き込む必要があります...
Arduino ウォッチドッグを使用する場合は、次のようにする必要があります。 ビットレジスタ チップの動作を定義します。 関連するレジスタとその意味については、Arduino ボードにあるマイクロコントローラのデータシートに詳しく説明されています。 ただし、Arduino 統合開発環境 (IDE) には、このプロセスを簡略化するために設計されたいくつかの関数とマクロが付属しており、ライブラリを含めることでインポートできます。 #含む AVRチップのウォッチドッグを使用します。
このようにして、ウォッチドッグを構成できます wdt_enable() 関数を使用してアクティブ化する。 この関数の引数は、タイマーがリセットされていない場合にボードがリセットされるまでの時間を決定します。 コード内で設定できる値については、次のとおりです。
ウォッチドッグがトリガーされるまでの時間 | wtd_enable() 引数 |
15ミリ秒 | WDTO_15MS |
30ミリ秒 | WDTO_30MS |
60ミリ秒 | WDTO_60MS |
120ミリ秒 | WDTO_120MS |
250ミリ秒 | WDTO_250MS |
500ミリ秒 | WDTO_500MS |
1秒 | WDTO_1S |
2秒 | WDTO_2S |
4秒 | WDTO_4S |
8秒 | WDTO_8S |
Arduinoでのウォッチドッグの使用例
最後に、Arduino IDE での例を使用して、ウォッチドッグが実際にどのように使用されるかを見ていきます。 ご覧のとおり、これは非常に単純です。このようなさまざまなソース コードがインターネット上で見つかります。そのため、プロジェクトでウォッチドッグを使用するための独自のコードを練習、変更、作成できます。 見てみましょう 私たちの例:
#include <avr/wdt.h> // Incluir la biblioteca watchdog (wdt.h) void setup() { wdt_disable(); // Desactivar el watchdog mientras se configura, para que no se resetee wdt_enable(WDTO_2S); // Configurar watchdog a dos segundos } void loop() { wdt_reset(); // Actualizar el watchdog para que no produzca un reinicio //Aquí iría el código de tu programa... }
Arduino のこのスケッチ例からわかるように、次のものがあります。 XNUMXつの機能 ウォッチドッグを管理するための注目すべきプログラミング言語は次のとおりです。
- wdt_disable() Arduinoの設定中にタイマーを無効にします。
- wdt_enable(ティエンポ) 前の表で示したように、タイマーに間隔を割り当てて、対応する時間を指定して開始します。
- wdt_reset() 割り当てられた間隔を更新し、プログラムが再起動しないようにします。