こんにちは、ダック です。

マイコンについての研修中にウォッチドッグ・タイマーというものが出てきました。
ウォッチドッグ・タイマーは、マイコンの要になる CPU の番犬ともいうべきものです。マイコンなどに多く組み込まれています。
Arm® のシステムにもウォッチドッグ・タイマーは搭載されていますし、アルテラ社の Nios® II (ソフトコア・プロセッサー) でも使用することができます。

ウォッチドッグ・タイマーとは

ウォッチドッグ・タイマーとは、システムが正常に動いているかの見張りをしてくれるものです。
CPU などが正常に動いているかをチェックしてくれます。もちろん異常を見つけたら、それに応じた反応をしてくれます。

図 1. ウォッチドッグ・タイマーとは

監視のシステム

では、どのようにチェックしているのでしょうか。
ウォッチドッグ・タイマーは、一定時間をカウントしてその間に CPU が定期的にカウンタをリセットします。
もしカウンタがリセットされず、カウント値が一定値を超えた場合は、異常を知らせます。

図 2. ウォッチドッグ・タイマーの仕組み

一定時間信号が無く、異常を検知した場合の処理はあらかじめ決めておきます。その処理を始めさせるのがウォッチドッグ・タイマーなのです。
常に同じ時間でなくとも、制限時間内にリセットをかけられれば問題ありません。

通常時、異常発生時の動作は以下のようになります。

図 3. 通常時、異常発生時の動作

図 3 の異常発生時の動作の例では、CPU から一定時間信号が来なければウォッチドッグ・タイマーは異常を知らせる信号を出します。そして、その信号を受け取った CPU は初期化を行います。
CPU はマイコンの要です。CPU がうまく機能しなければシステム全体が正常に動作しなくなります。
その CPU に何かがあったことを知らせるための重要な役割を果たすのがこのウォッチドッグ・タイマーなのです。

覚えておきたい +α

ウォッチドッグ・タイマーは、通常デバッグするときには止めておきます。
ステップ実行など、通常の速度での動作をしない場合には、ウォッチドッグ・タイマーがそれを異常とみなし、CPU を初期化させてしまうためです。
デバッグ用のソースコードを見れば、最初の方にウォッチドッグ・タイマーを止めるためのコードが書いてあるのではないのでしょうか。