GAIO CLUB

2003年05月04日

Microsoft Visual Cを使った組み込みシステム開発とは

GAIO CLUB 特集
GAIO CLUB【2003/5月号】
Microsoft Visual C を使った組み込みシステム開発とは
ネイティブ系PCシミュレータを組み込み開発に導入するポイント

ハードからソフトへの転換

家電製品へのマイコン採用が始まった時代、今から20年も前の話です。4ビット、8ビットとその歴史を重ねてきましたが、このころのマイコンの役割は、機能の主体であるハードウエアをコントロールすることでした。この構造はつい最近まで続いてきましたが、「デジタル家電」時代と言われるようになったころから、この役割は逆転するようになりました。今では、携帯電話を初め、組み込みシステムの提供する機能のほとんどがソフトウエアで実装されており、ハードウエアはそのソフトを快適に動作させるためのパーツと言う位置付けになっています。

皆様の現状の開発スタイル

現在デジタル家電の先端を行く携帯、カーナビなどでは、決まったハードウエアの上にネットワークなどの機能が次々と実装されており、パソコンで動作するアプリケーションを作るのと同様の感覚になりつつあります。

しかしながら、皆様の開発環境のほとんどは、大昔の4ビットマイコン時代から変わっていないようです。評価ボードにICEをかぶせて、デバッガで動かしながらソフトを書くと言う方法です。組み込みソフトウエアの構造は、主にアプリ部分とデバイスドライバの2つに分かれていますが、この両者ともが全く同じ環境で開発していると言う例も少なくありません。

ハードに拘束された開発の弊害

ハードウエア中心の開発環境は、プロジェクトの開発者人数が増えてくると、様々な問題を抱えるようになります。 まず、開発者の人数を集めることさえも難しくなります。ハードを使った組み込み開発には、独特の職人的な要素がありますから、その経験者を多数集めることは難しいでしょう。

最近の組み込み機器は、TCP/IPのネットワーク機能などを備えていますから、組み込みとは違うUNIX系やWindowsアプリ系のプログラマを必要とする場合が多くあります。しかし、そのプログラマはハードウエアに対しては未経験者が多く、開発システムがICEデバッガであると、その取り回し方法を最初から学ばねばなりません。

また、クロス開発システムは、MPUに依存する場合が多く、使用するMPUが変わると、プロジェクト全員分の開発システムを新規に入れ替えなければなりません。さらには、ターゲットボードを使ったソフト開発では、ターゲットボードが完成するまで、あるいは安定して動作するまで、ソフトウエアの動作検証はできず、ターゲット完成待ちの無駄な時間を作ってしまいます。

このように、ハードウエア中心の開発環境は、工期を延ばすばかりか、開発システムに対して膨大なコストをかけることになってしまうのです。

開発環境を標準化する

ターゲットボードの様なハードウエアを使った開発システムが弊害を生むのなら、ハードを使わない開発システムを考えれば良いのではないでしょうか。この筆頭に上がるのが「シミュレータ」です。誰もが使い慣れているWindowsの上で、システム設計・検証のすべての作業が行えれば、前に挙げた弊害を防ぐことができます。また、MPU等のクロス開発環境に依存しない環境にすれば、開発システムを標準化し、同じ開発システムを長期にわたって運用することも可能になります。

下の図が、Windowsを用いたシミュレータの適用範囲と開発体制の例を示しています。ハードに依存するデバイスドライバを出来るだけ小さく切り出し、残る大部分の機能アプリ部分の開発システムを、シミュレータを用いた開発システムに移行すれば、ここを標準化できることになります。 デバイスドライバ部分は、従来の組み込み開発作業と同じですから、ここに組み込み開発経験者を集めれば、開発分担も明確に行えることになります。

APIを明確に定義してハード依存部を切り離す

ここで、皆様よくご存じのカーナビを例にとってみます。ご自分の車に未だ付けてないよとおっしゃる方も、容易に想像が付くと思います。

カーナビには基本的なディスクからの地図表示、GPSからの自走位置の表示、VICSによる渋滞情報表示、機能設定などのHMI部分などがあります。それぞれ、ハードからのデータを基に、最終的にはディスプレイ上や音声として道案内することがカーナビの目的になります。

このシステムでは、ハードウエアからデータを受け取った後は、ソフトウエアの処理によりディスプレイ上に結果を反映させることとなり、データを受け取るi/oから後の処理内容は、ハードウエアの構造には依存しません。これは、最近の組み込み機器の傾向である、ソフトウエアによる機能実装にあたります。

このシステムを開発する場合、各デバイスからのデータ取得の部分にAPI(アプリケーションインタフェース)を設けて、カーナビシステムが、このAPI関数を介してデータの取得を行う様に構造化すれば、システムのソフトウエア開発をハードウエアから完全に切り離すことができます。

デバイスの仮想化

この様にハードを切り離す考え方で、実際に開発システムとするには、実際のハードウエアの代わりになるものをWin-dows上で実現しなければなりません。

GPS、VICSなどの情報は単なるデータですから、システムがデータを要求した時に、適切に「偽の」データを返すようにソフトウエア化すれば実現できます。実際の事例では、車を実際に走行させた際に収集したGPS、VICSデータをあらかじめファイル化しておき、システムが要求した際に、そのデータをファイルから読み出してシステムへ入力すると言った単純な仕組みが用いられています。これで、GPSとVICSのハードウエアは、ファイルデータによって仮想化出来たことになります。

また、結果を表示するディスプレイもWindows上のウインドウとして実装すれば実現します。システムが描画する情報を、Windowsの描画システムで置き換え、ディスプレイパネルを想定したウインドウに描画をすれば、ディスプレイデバイスも仮想化できることになります。
  • 実際の例では、カーナビに使用されるグラフィックチップと、Windowsの描画システムでは、表示プレーンの概念、色の数、基本図形の描画機能など異なる部分が多くありますが、すべて、Windowsの描画コマンドで置き換えることが可能です。

ネイティブ系シミュレータで機能アプリの開発を!

このコーナーで取り上げたシミュレーションシステムは、「ネイティブ系」と呼ばれるシミュレータです。ソフトウエアによる機能実装の多い組み込みソフトウエアの開発には非常に有効なシミュレータです。

コーディング、デバッグにはマイクロソフトの開発環境であるVisual C++ (VisualStudio .NET)を使用して、C言語でコーディングされたソフトをWindows用のコンパイラでコンパイルし、PCにネイティブなWindowsアプリケーションとして動作させるものです。

ガイオにはこのタイプのシミュレータ「Native-G」があります。組み込みシステムに特有のハード割り込みや、μITRONなどのリアルタイムOSに付いても、Win-dowsのスレッドとして仮想的に動作させる仕組みを持っており、組み込みシステムのほとんどをWindows上で動作させることが可能です。

ネイティブ系シミュレータは、組み込みソフト開発を、組み込み特有の癖のあるクロス開発環境から解放し、開発システムを一般的なWindows開発ツールで標準化できる開発手法です。ご検討の際には、是非ご相談下さい。

人気のコラム

最新のコラム