プログラムの暴走
Q:マイコンのI/O機能の中に、ウォッチドッグ・タイマという変わった名前のものがあるのを見つけたのですが、これは一体何ですか?
A:ウォッチドッグ・タイマ(watchdog timer)というのは、万一プログラムが暴走したときに、プログラムを終了させる特別な機能です。名前が長いので、略してWDTと書くこともあります。
watchdogとは、「番犬」とか「監視人」という意味の英語です。プログラムが暴走していないか、いつも見張っていてくれることから、このような名前になりました。
Q:プログラムの暴走って、よく聞きますが、どういうことですか?
A:コンピュータは、与えられたプログラムを指定された順番通りに実行するのが仕事です。表示器にデータを出力したり、スイッチなどの状態を入力したりすることも、プログラムが順番通り動いていなければできません。プログラムの動作が誤って不正な無限ループに入ってしまうと、操作も何も受け付けない状態になり、元に戻らなくなります。これを暴走と呼んでいます。
Q:変な動作が続いて、元に戻らないのが暴走ということですか?
A:そうですね。一瞬誤動作してすぐに正常に戻る場合や、操作によって正常に戻せる場合は暴走とは言わないのが普通です。
変な動作が続くといっても、プログラムが暴走したときの症状はいろいろです。パソコンでは、表示が全く変わらなくなり、操作も一切受け付けなくなってしまうのが典型的な暴走の症状です。コンピュータが止まってしまったように見えるのでフリーズとも呼ばれます。このような場合、内部で不正な無限ループに入ってしまっていることが多いのです。
組み込み機器では、内部のマイコンが暴走すると機器そのものが制御不能になります。例えば、ロボットが止まらずに動き続けたり、ヒータの通電が止まらなくなって過熱したりするなど、危険な状態になる可能性があるので、暴走を監視して確実に終了させるウォッチドッグ・タイマがよく用いられています。
Q:どうして暴走が起こるのですか?
A:暴走の原因もいろいろありますが、大別すればプログラムのミスによるものと、ノイズなどによる一時的な誤動作がきっかけです。
プログラムのミスとしては、例えば、スイッチの入力値やシリアル通信の受信値の想定範囲を間違えていて、特定の値が来たときに不正な番地にジャンプして暴走してしまう場合があります。他には絶対に受け取ることがない値を待って無限ループになってしまうような、見つけにくいものもあります。
Q:暴走を止めるには、どうしたらよいのですか。
A:暴走が起きてしまったら、基本的にはシステムをリセットして、初期状態からプログラムを再実行します。リセットをかけるとRAMにあるデータは消えてしまうので、救出可能なデータを保存してからリセットをかける方法も用いられています。ただし、暴走が起きているときは、RAMにあるデータも誤って書き換えられている可能性があるので、その点は注意が必要です。
ウォッチドッグ・タイマによる暴走検出の原理
Q:ウォッチドッグ・タイマは、どうやって暴走を検出するのですか?
A:厳密にいうと、ウォッチドッグ・タイマは暴走が起きたことを検出するわけではありません。プログラムの正常な動作をしていない時間がある程度続いたら、そこで強制的にシステムをリセットしてしまおうという仕組みです。
もう少し詳しく言うと、ウォッチドッグ・タイマそのものは、コンピュータに内蔵されたハードウェアです。ウォッチドッグ・タイマに所定の値「T」をセットして、タイマを起動すると、タイマは0からTまで自動的にカウントアップ(または、Tから0まで自動的にカウントダウン)します。そして、終了値に達すると、自動的にシステムをリセットするか、NMIと呼ばれる特別の割り込みを発生します(図1)。
このままだと、システムは一定時間後に強制リセットされてしまって、動作を続けられません。そこで、ウォッチドッグ・タイマを起動したら、終了値に達する前に必ずウォッチドッグ・タイマをクリアするように、プログラムを作ります。基本的には、プログラムをループ構造にして、周期的にウォッチドッグ・タイマをクリアすることが多いですね。
Q:ややこしいのですね。
A:ウォッチドッグ・タイマに対応したプログラムを作るのは、初めてだとちょっと難しいですね。でも、ループ処理やタイマ処理のやり方を知っていれば、簡単な形で書けますよ。
ウォッチドッグ・タイマが広く使われているのは、システムのハードウェアがとても単純にできるからです。あるマイコンがプログラムを正しく実行しているかをきちんと監視しようとすると、もう1つか2つ別のマイコンが必要になったり、マイコン同士を連携させる仕組みが必要になったり、とても大掛かりになってしまいます。
図1下のような処理であれば、ウォッチドッグ・タイマが終了値に達しないように、それよりも短い周期でウォッチドッグ・タイマをクリアするルーチンをプログラムに組み込むだけです。ソフトウェアで対応すれば、実行時に生じるオーバヘッド(余分に加わる時間)もごくわずかです。
簡単なわりに、暴走を確実に検出できる信頼性も大きな利点です。
信頼性が要求される組み込み用マイコンでは、大部分の製品がウォッチドッグ・タイマを内蔵しています。例えば、テキサス・インスツルメンツ(TI)のMSP430™ファミリでは、標準機能としてウォッチドッグ・タイマを内蔵しています。
Q:ウォッチドッグ・タイマを使うとき、どんなところに注意が必要ですか?
A:2つあります。プログラムが正常に動作している間、終了値に達する前に必ずウォッチドッグ・タイマをクリアすることと、プログラムでクリアしなければならないことです。
プログラムの中で、周期的にウォッチドッグ・タイマをクリアするようにしていても、何かの処理に時間がかかってしまってクリアが間に合わないことがあるかもしれません。そうなると、暴走していなくてもシステムがリセットされてしまいます。1つ1つの処理時間をきちんと管理できる組み込みシステムではウォッチドッグ・タイマを使えますが、もともと処理時間のことをあまり考えていないシステムでは使えません。
ハードウェアのタイマを使えば周期的なクリアを簡単にできます。しかし、そうするとプログラムが暴走してもハードウェアが自動的にウォッチドッグ・タイマをクリアしてしまうので、暴走検出になりません。同様に、タイマ割り込みでクリアするのも危険です。単純なソフトウェアループでクリアする必要があります。
なお、先ほど例に挙げたMSP430マイコンを初めて使う人には、もう1つ注意があります。
Q:どんな注意ですか?
A:MSP430マイコンは、ウォッチドッグ・タイマを内蔵しているだけでなく、パワーオン時やリセット後には自動的にウォッチドッグ・タイマが起動します。そのため、ウォッチドッグ・タイマを使わない場合は、プログラムの最初でウォッチドッグ・タイマを停止する必要があります。これを知らないと、一定周期でリセットを繰り返してしまうので、マイコンが壊れていると思ってしまうかもしれません。
MSP430マイコンは、計測機器、制御機器に多く使われてきた高信頼性のマイコンです。遠隔地で無人動作するようなシステムでは、プログラムの暴走を確実に検出するために、常にウォッチドッグ・タイマが確実に働いていることが大事です。そのために、パワーオン時やリセット後に自動的に起動するようにしているのです。
【関連リンク】
- 低リーク電流のトランスインピーダンス・アンプを内蔵した、世界初のマイコン『MSP430FR2311』
- ハードウェアIP CapTIvateテクノロジーの詳細
- 業界最高のノイズ耐性で、初のIEC 61000-4-6 RFイミュニティ適合認証取得済ソリューションを提供する容量性タッチ・マイコン『MSP430FR2633』の詳細
- MSP430 超低消費電力マイコン・ファミリ
- MSP430 LaunchPadバリュー・ライン開発キット
- 新FRAMマイコン:「MSP430FR6972」
- 産業用マイコン:「MSP430I2040」
- TIのマイコン製品の詳細
- 便利なツールの購入はこちらから:TI store
※CapTIvate、MSP430およびMSP432はTexas Instruments Incorporatedの商標です。その他すべての商標および登録商標はそれぞれの所有者に帰属します。
提供:日本テキサス・インスツルメンツ株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2016年12月31日
Copyright © ITmedia, Inc. All Rights Reserved.