エンベデッドシステムとは
組込み系ソフトとか、ファームウェアとか呼ばれていますが、いったいどんな物なのか?簡単に説明してみましょう。
ファームウェアはいったいどこにある?
ファームウェアはあらゆる電気製品に使用されています。このWebサイトをご覧頂いているパソコンにももちろん搭載されていますし、ネットワークを接続する ルータやハブなどのネットワーク機器、携帯電話、デジカメやFAX、テレビ受像機やDVDプレイヤー、家庭用ゲーム機などにも沢山のファームウェアが使用されています。 家電製品全般だけでなく自動車や航空機…ありとあらゆるものに組込み系ソフトウェア・ファームウェアは使用されてます。
ファームウェアって、ソフトウェアなんでしょ?
そうです。沢山の電気製品に使用されているファームウェアはコンピュータプログラムの一種です。最近では、「えっ?こんな物にも?」というくらい 沢山の製品にコンピュータが搭載されており、そのコンピュータの上で動くプログラムがファームウェア、組込み系ソフトウェアという呼ばれ方をしてます。 一般的な汎用ソフト(アプリケーション・ソフトウェア)とファームウェアとの違いについて少し視点を変えて比較してみましょう。
| 項目 | 汎用ソフト | ファームウェア |
| 動作する環境の違い | 汎用コンピュータ(PC,サーバー,大型コンピュータ)上にて利用したい時にメモリ上にロードし、動作する仕組みになっている。 | ハードウェアに組み込んだデバイス(EPROM、FPGA、DSPなど)に常駐的に保存されたプログラムで、通常はハードウェアの電源の投入と同時に動作を開始できる状況となる。 |
| 通常はOSが共通的に管理している一定の動作環境に従って動作している。メインとなるCPUを用いて動作を行う。 | メインCPUで動く形式のものと、デバイス内部の演算装置で動作するタイプのものがある。 | |
| 目的の違い | 人間がコンピュータを使用する直接的な操作に連動して、データの加工や計算を行うためのソフトウェアであることが多い。 | 人間の操作とは直接連動せず、ハードウェアの各種の装置(デバイス)を初期設定したり、動作させるなどハードウェアからのイベント(きっかけ)によって動作する。 |
| リアルタイム性 | 人間の操作に連動することが多いため、処理速度は、操作に対する応答時間(レスポンスタイム)で計られる場合が多い。 | ファームウェアの処理の多くは、CPUの動作クロックやそのファームウェアの制御する対象であるデバイスの基準クロック、あるいは通信デバイスの場合には通信ビットレートなどに深く関係している。 |
| メインCPUをより高性能なCPUに変更することで、レスポンスタイムも向上する。 | これらの実時間性を厳密にコントロールするためにファームウェアの動作は、早すぎず、遅すぎず、初期設計されたタイミングに合わせて厳密に動作することが要求されることが多い。 |
クロスコンパイルって何?
例えばWIndows上で動くアプリケーションソフトウェアの開発だったら、WIndowsパソコンを使用して開発していれば、 それで問題は無いはず。でもファームウェアではそうはいきません。
プログラムを開発する環境と、実際にそのプログラムが動作する 環境とが異なる為です。
例えば携帯電話で動作するファームウェアを開発する時には、プログラムの製造や単体試験は環境に優れたWIndowsパソコンを 使用して開発する事が多いのですが、結合試験以降は実際の携帯電話で使用されているCPUで動作できるように「クロスコンパイル」 という作業を行います。
クロスコンパイルとはコンパイラが動作しているCPUとは違う種類のCPU向けのコンパイルを行う事です。Windows上で携帯電話 用のコンパイル作業を行う事がこれにあたります。
ファームウェアの試験環境ってどんな感じ?
ファームウェアは通常ハードウェア組み込み環境で動作するため、汎用CPU(一般的にパソコン等で使われているCPU)のマシン語では動作しません。 従ってソースコードを製造し単体試験を行った後は、クロスコンパイル作業が必要になります。
クロスコンパイルしたプログラムは、ターゲットとなるCPUのマシン語に翻訳されているためターゲットCPU上でしか動作しません。 そのためターゲットCPUを用いて結合試験を行う方法を考えなければならないのです。
そのためには例えば、PCボード(疑似ハードウェア)とインサーキットエミュレータ(ICE)を用いてこの試験環境を構築するのが一般的です。 一般的な組み込み用の小型CPUやDSPには、開発用のICEも開発されることが多いのですが、しかし新規開発のDSPやCPUの場合、このICEの開発が間に合っていない場合があります。その場合にはDSPから出力される「コンソール出力信号」を読み取り、DSP内部の状況を把握するという結構面倒な作業を強いられます。
ICEを用いた生産効率に対してコンソール出力によるデバッグ作業はとても効率が悪いものになります。従ってICEが手に入らないと分かっている場合には、あらかじめ開発するファームウェアのソースコード上に、デバッグ用のモニタールーチンを組み込んでおき、ファームウェアの動作ログを外部のどこか(例えば利用していないメモリエリアなど)に吐き出す仕組みを検討しておく必要があります。
ただしファームウェアが厳密なリアルタイム性を要求されるようなものであった場合、デバッグ終了後の総合試験時には、これらのデバッグ用のモニタールーチンを外してビルドすることになるため、デバッグ中のビルドファイルと、製品用のビルドファイルに違いが生まれてしまうことになります。
ファイルサイズ(メモリ上のプログラムサイズ)の違いが発生するほか、処理ステップ数が小さくなったことによるレスポンスタイムの変化などのリスクがあり、これらを念頭に入れて試験計画を立てなければなりません。
割り込み制御
ファームウェア内部の処理はハードウェアまたはソフトウェア割り込みによって通知されるイベントによって起動される仕組みとなります。 アプリケーションがファームウェアに対して何か命令をする時、何らかの手段を用いてファームウェアにアプリケーションの意思を伝えなければなりません。
ファームウェアやデバイスドライバは、OSを介してのみアプリケーションとのインタフェースを許されている場合がほとんどです。従ってアプリケーションは直接ファームウェアに命令を通知することはなく、ファームウェアはOSから指令を伝えられることになります。
その仕組みをソフトウェア割り込みと呼んでいます。
ソフトウェア割り込みは、サスペンド中のファームウェアをたたき起しイベントハンドリングを動機付けする仕掛けです。 同様に、ファームウェアが管理するICからの通知や、タイマーからのタイムアウト通知はハードウェアからの割り込みという方式となり、これをハードウェア割り込みと呼んでいます。
ソフトウェア割り込み、ハードウェア割り込みの設計は慎重に行わなければなりません。 なぜなら、特にタイマー等の割り込みについては他のデバイスドライバと共有しなければならないケースがほとんどのため、 一定周期で起動しなければならない仕組みを作る場合などでは、せっかくタイマーをセットして、たたき起してもらうはずだったのが、 他のドライバに割り込みを横取りされてしまい、寝坊してしまう結果となることも多いのです。
この様な事がないよう、あらかじめ、各割り込みチャネルの優先順位、タイムラインチャート(いつ誰が、割り込みチャネルを使用するのか?、優先順位は?)を表記し、設計しておく必要があります。