組み込みソフトウェアの開発環境を整える前に、まず開発の手順や一般アプリ開発との違い、そしてOSは何をしているのかを解説しておこう。
前回「組み込みソフトウェア開発はC言語が主流だ」では、開発言語としてのC言語について解説しました。C言語に限らずプログラミング言語は通常、人間の言葉を用いてテキスト形式で記述します。しかしマイコンは、テキストデータを直接理解できません。このためテキスト形式のプログラムは、マイコンが実行できる言葉=機械語(バイナリ)に変換する必要があります。この作業をコンパイル=変換または翻訳と呼びます。
C言語のプログラムを機械語に変換するソフトウェアはCコンパイラ、PL/Mの場合はPL/Mコンパイラ、アセンブリ言語の場合はアセンブラです。コンパイルされたプログラムは別のツールによって最終的にROM化され、組み込みシステムが完成します。今回は、プログラムをROM化するまでに必要なクロス開発環境について取り上げます。
クロス開発環境の解説に入る前に、組み込みシステムの開発プロセスについて簡単に解説します。実際はさまざまな開発手法がありますが、組み込みシステム開発プロセスを単純化すると、図1のようになります。
組み込みシステム開発で最初に行うことは仕様検討です。仕様には、外部仕様と内部仕様の2種類があります。
外部仕様とは、ユーザーの立場からシステムに対して要求される仕様です。例えば、「『電源』と印字されたボタンを押すとシステムが起動し、0.5秒以内にLCDに『ようこそ』の文字を出力すること」とユーザー(あるいはクライアント)が要求したとします。これはシステムに対してユーザーが要求する機能であり、これを外部仕様あるいは機能仕様と呼びます。
開発する側は、ユーザーからの機能仕様を実現するために、マイコンの選定やハードウェアおよびソフトウェアの機能を含めて仕様を検討します。このときの仕様を、内部仕様あるいは設計仕様と呼びます。
内部仕様は外部仕様を実現するための仕様ですから、先の例の場合、「マイコンは、それほど高機能でなくとも大丈夫だ。開発を楽にするためにはOSが必要だな。しかし0.5秒以内にシステムを起動するためにはLinuxでは厳しいな。ではITRONはどうだ? ITRONは起動は早いがいままでに使った経験がないから実装は難しいかも。ではWindows CEではどうだ? その場合のランタイムはどうする? いっそのことOSなしで開発してみてはどうだろう?」など、開発現場ではさまざまな議論がなされ、最善の方法を選択していきます。
仕様検討が終わると、ハードウェアとソフトウェアの役割分担を決めます。例えばシステムにプッシュスイッチが100個あるとします。このときスイッチのチャタリング(図2)を検出して、スイッチが定常状態になったかどうかを決定するためにハードウェアを使うと、スイッチの数だけ回路が必要になります。これでは回路の規模が大きくなり、実装面積やコスト面から考えても全体的に無駄です。
この場合、ソフトウェアを使って定常状態を検出すると、1種類の関数だけでスイッチの状態が判定できます。つまり、スイッチのチャタリングを検出するためには、ソフトウェアで機能を実装した方が有利です。
逆に、コストを犠牲にしてもソフトウェアよりハードウェアで実現した方がよい例もあります。例えば、3D画像の高速処理を要求するシステムの場合、それをソフトウェアで実現することは非常に困難です。この場合、多少コストがかかっても画像処理用のプロセッサをメインCPUとは別に用意し、それぞれのハードウェアが役割分担しながら全体の処理を行うようにします。
このようにシステム全体を見渡して、ハードウェアとソフトウェアの役割分担を明確にし、最も効率的に外部仕様を実現できる見通しを立てた後、ハードウェア部門とソフトウェア部門に分かれ、それぞれの機能を設計および実装します。
ソフトウェア部門ではコーディングを行い、モジュールごとに単体テストを行います。すべてのモジュールが単体で動作したなら、これらを統合して結合テストを行います。ハードウェア部門でも同様の作業を行い、各部門での問題点が解決した後、ハードウェアとソフトウェアのすべてを組み合わせて、システム全体のテストを行います。すべてのテストが無事終了したなら製品化を行い、出荷が開始します。
Copyright © ITmedia, Inc. All Rights Reserved.