ここで、ソフトウェアの概念を分かりやすく理解するために、ソフトウェアの一般的な階層構造について説明します。
前述のソフトウェアを階層構造で模式化すると図1のようになります。一番下の層がハードウェア層(物理層)で、一番上の層がアプリケーション層になります。便宜的に中間の階層を“中間層”と呼ぶことにします。
下位の層から順番に見ていくと、まず、一番下にハードウェア層としてマイコンがあります。マイコンには通常、動作させるためのレジスタが存在し、特定のレジスタに、1を書いたり0を書いたりすることで、目的にあった動作をさせます。しかしながら、(マイコンにもよりますが)32ビットのマイコンともなると、設定するべきレジスタも膨大になるため、毎回、レジスタが位置するアドレスを確認し、その特定のビットを設定するといった作業を、全てのレジスタに対して行うことは非現実的です。このような手間をできるだけ減らすために、1つ上の層にあるデバイスドライバが存在します。
デバイスドライバでは、マイコンに搭載のペリフェラルの設定に応じたAPIを定義し、例えば、SPIの初期化を行う場合、SPI初期化関数をコールするだけで、特にレジスタを意識することなく、初期化のコードが書けるといった大変便利なソフトウェアです。
このようなデバイスドライバを使用してアプリケーションソフトを完成させるユーザーもたくさんいます。
その場合、図2(1)のように、ハードウェア、デバイスドライバ、アプリケーションソフトの3階層のシンプルなソフトウェア構成となります。
一方、現行製品ではOSを採用しており、新製品ではそのOSの上で動作するアプリケーションソフトの資産を有効に活用したい、といった要求もあります。その場合は、同じOSを実装することで資産をそのまま流用し、かつ、必要な機能の追加や変更ができるようになります。
この場合、図2(2)のように、ハードウェア、デバイスドライバ、OS、アプリケーションソフトで構成され、4階層のソフトウェア構成となります。
イーサネットやUSBなどの比較的複雑な通信機能やファイルシステムなどを使用する場合も、OSを採用するのが一般的です。
この場合、プロトコルスタックやファイルシステムなどのミドルウェアが追加され、図2(3)のように、ハードウェア、デバイスドライバ、OS、ミドルウェア、アプリケーションソフトで構成され、5階層のソフトウェア構成となります。
そして最後に、アプリケーションソフトが入り、最終的なソフトウェアが完成します(どのソフトウェア構成でも、必ず必要になるのが、アプリケーションソフトです)。
以上のように、マイコンのソフトウェアにはさまざまな種類のものがあり、それらのソフトウェアは幾つかの階層に分類することができます。ソフトウェアの階層を理解することで、各種ソフトウェアのアプリケーション内での役割を認識し、最適で必要十分なソフトウェアを選択する際に大いに役立つと思います。
実際のアプリケーション開発において、どのソフトウェア構成を採用するかを判断する基準に、実現したい機能(要求仕様)が第一に挙がりますが、それと同じぐらい大きな要素として、資産(レガシィと読んだりします)の流用性、開発期間や予算などがあります。「サードパーティーのソフトウェアを採用することで短期間のうちに要求仕様を満足できるが、予算が足りない」、「自前で要求仕様を満たすアプリケーションソフトを開発すれば、コストが抑えられるが、開発期間内に完成できない」など、ユーザーの置かれている状況はさまざまです。皆さんも、本稿を踏まえ、状況に応じた最適なソフトウェアを選んでみてください。
Copyright © ITmedia, Inc. All Rights Reserved.