業務ソフト開発と組み込み開発の違い
組み込みコンピュータのシステム構成とクロス開発
組み込みコンピュータは、ハードウエア構成も、パソコンやサーバー機とは大きく違っています。洗濯機に組み込まれたコンピュータであれば、洗濯槽のモーターや注水/排水のバルブを制御するための、出力回路が必要です。水位センサーからの入力回路、スタート・ボタンや各種の設定ボタンからの入力回路も必要です。逆に、通常のパソコンのようなLCDモニター、キーボード、マウス、ハード・ディスク、CD-ROMドライブなどは、洗濯機には付いていません。
組み込みコンピュータ向けのプログラミング言語は、C言語が主流です。C言語は、入出力デバイスやハードウエアを直接操作できるという点において、組み込み向けにもなじみやすい言語です。オブジェクト指向言語のような高度な機能はなく、抽象度も低いですが、そのぶんオーバーヘッドが少ない点が、組み込み向けとしてはメリットになります。
C言語を使うケースのほかに、OSの内部処理の一部や、割り込みハンドラの入り口や出口の処理など、高級言語では書けない部分で、アセンブリ言語を用いる場合があります。また、携帯電話でダウンロードして実行するプログラムなどのように、組み込み系でも互換性の要求が強い場合には、Java言語を利用する場合があります。
組み込み機器の制御用コンピュータは、その機器に合わせた独自のハードウエア構成になっており、プログラム開発のための機能は持っていません。例えば、洗濯機を制御するコンピュータの場合、LCDモニターやキーボードがありませんし、ソース・プログラムを格納するファイルやハード・ディスクなどの2次記憶装置もありません。CPUは8ビットや16ビットですし、WindowsやLinuxといった開発環境として適したOSも動いていません。
したがって、組み込みコンピュータの中では、ソース・プログラムの編集やコンパイルなどの作業はできません。組み込み機器のプログラム開発の作業は、組み込み機器内の制御用コンピュータとは別のコンピュータ(開発者のパソコンなど)の上で行います。これを「クロス開発」と呼びます。クロス開発とは「プログラムの開発環境と実行環境が別のコンピュータである」という意味です。
これに対して、パソコン用のプログラムは、パソコン上で開発して、同じパソコン上で実行やデバッグを行います。すなわち、開発環境と実行環境が同じコンピュータです。このような開発方法を「セルフ開発」と呼びます。
図1: 組み込み機器(洗濯機)とパソコンのハードウエア構成(クリックで拡大) |
クロス開発の実際
組み込み機器のクロス開発では、開発用のパソコン(ホストと呼びます)と、開発対象である組み込み機器内の制御用コンピュータ(ターゲットと呼びます)が別です。したがって、開発したプログラムのオブジェクト・コードを実行する前には、何らかの方法で、開発用のパソコンから実行環境であるターゲットに転送する必要があります。
オブジェクト・コードの転送には、ICE*2などのハードウエア開発ツールを用いる場合と、ターゲット上で動くモニターやOS、転送用プログラムなどのソフトウエアを用いる場合があります。後者の場合は、ターゲットのハードウエア構成に応じて、シリアル、USB、LANなどの回線を経由して転送を行います。このほか、CFカード、SDカードなどのリムーバブル・メディアを用いる方法もあります。
*2: ICEとは、In-Circuit Emulatorの略で、プログラムのダウンロードやデバッグなどのために、開発対象機器のCPUと開発用ホストとの間に接続して利用する、ハードウエア機器です。
ソフトウエアを使って転送するには、ターゲット上でも、オブジェクト・コードを受信するためのプログラムが動いている必要があります。また、リムーバブル・メディアを用いるには、ターゲットにおいて、そのメディア上に置かれたオブジェクト・コードをブート(起動)する機能、すなわちロードして実行する機能が動いている必要があります。
いずれにしても、ターゲット上で、ある程度のプログラムが動いた後でないと、これらの方法は使えません。したがって、ターゲットのハードウエアが完成した直後に最初に動かすプログラムは、ICEなどのハードウエアを使って転送する必要があります。また、ターゲット上でシリアル、USB、LAN、リムーバブル・メディアなどを使えない場合は、最終的なプログラムが完成するまで、ICEなどによる転送を続ける必要があります。
組み込みコンピュータのソフトウエア開発は、クロス開発であり、オブジェクト・コードの転送や異なる2つのコンピュータ環境の使い分けが必要となります。このため、パソコンのプログラムをセルフ開発する場合よりも、開発が難しくなります。ただし、後述する統合開発環境(IDE)のEclipseを利用すれば、オブジェクト・コードの転送が自動化され、クロス開発であることをあまり意識せずに開発できます。