2007-02-12

組込みソフトの作り方[3]

マイコンがシーケンス処理からリアルタイム制御のコントローラにステップアップしたころ、割り込みを使うことで今までやっていた処理を横に置いて、急いでやらなければいけない処理に対応できるようになった。

ただ、割り込みに使える要因は4つとか7つとか数に限りがあったため、メインループでグルグル回る処理と割り込み処理だけでは、複雑なリアルタイム制御のプログラムをスッキリと書くことはできなかった。

そうこうするうちに、マイコンは進化を遂げて、割り込みコントローラ、拡張ポート、タイマー、A/D変換器、D/A変換器など、リアルタイム制御に使いそうな周辺デバイスとCPUをパッケージにしたワンチップマイコンが登場してきた。

ワンチップマイコンが現れる前は モトローラの 68000 や ザイログの Z80 などの汎用のCPUに周辺デバイスを配線して使っていた。

ワンチップマイコンのおかげで、このような周辺デバイスを配置することなく、ワンチップマイコンの中だけで多くのことができるようになった。

ただ、そのせいでワンチップマイコンの取り扱いは複雑になり、ワンチップマイコンの取扱説明書は分厚いもにになってきた。(ハードウェアデバイスの資料はデータブックと呼ばれるが、ワンチップマイコンの場合、データブックというよりは取扱説明書といった方が近い)

このことから、主にワンチップマイコンを専門に扱うエンジニア=組込みソフトエンジニアという構図が生まれてきたように思う。リアルタイムシステムにおいてワンチップマイコンを使いこなすには、ワンチップマイコンの取扱説明書を熟読する必要がある。

なぜなら、取扱説明書にはCPUのレジスタ構成やアセンブラの命令の説明だけでなく、割り込みコントローラやA/D変換器、タイマー設定など数多くの周辺デバイスの初期設定の方法や起動や停止の仕方について事細かに書かれているからである。

これらの設定を間違うと、思った通りに動かないため、最初にうちは周辺デバイスの設定をマニュアル読みながら、少しずつ習熟していく。

このようなワンチップマイコンとの格闘が一通り終わると、リアルタイムシステムをこのマイコンでどうやって実現しようかと考えることになる。

一番簡単な方法は、各種割り込み処理に、10msとか100msなどの一定間隔でタイマー割り込みを追加する方法だ。割り込みコントローラに登録しておくのは、非常に早い応答が要求される処理で、ハードウェアリアルタイムと呼ばれる。それ以外のもうちょっと対応が遅れてもよいソフトウェアリアルタイムの処理は、前述の定時割り込み処理でイベントが発生したかどうかを巡回しておけばよい。

たとえば、キーが押されたかどうかを察知し、割り当てられた処理を起動するまでの許容時間は数百msである。500ms以上かかると遅いと感じるが、200ms以内にレスポンスを返すことができればサクサク動くと評価されるだろう。

そう考えると、10msの定時割り込みでキーが押されたかどうかをチャタリング取りながら80msくらいかけて調べ、起動をかければ十分に間に合う。

定時割り込みでイベントをウォッチし、イベントが発生したら該当する処理を行うようにする。該当する処理に長い時間がかかるようなら、各イベントに割り当てたフラグを立てておき、時間に余裕のあるときにこの処理を実施しておく。

この続きはまた今度。