具体的には、携帯電話、自動車、カーナビゲーションシステム、炊飯器、信号機、エレベーター、自動販売機、デジタルカメラ、テレビなどなど、生活の周りにある電気製品のほとんどが組込みシステムだ。
フリー百科事典『ウィキペディア(Wikipedia)によると、組込みシステムの特徴について以下のように書かれている。
【汎用システムに対する組み込みシステムの特徴】
- ソフトウェアだけでなくハードウェアも専用のものを開発することが多い。
- 機械の制御を行う場合にはリアルタイム制御が重要になる。
- 大量生産される製品の場合にはコストが非常に重要となるので、少ない容量のメモリと、安価なCPUで動作する必要がある。
- ほとんどの組み込みシステムでは、ユーザがプログラムを入れ替えたり更新したりすることは想定されない。そのため汎用コンピュータよりも自由にオペレーティングシステムやシステム構成を選択できる。
- 多くの場合、ソフトウェアはROMに書き込まれた状態で出荷されるため、出荷後にバグが発見されると、製品回収・ROM交換作業などが必要になり、多大な費用がかかる。近年、ソフトウェアはROMではなくフラッシュメモリに格納され書き換え可能になったが、出荷後の改修が困難なことは変わっていない。
- ソフトウェアはC言語で記述されることが多い。32ビットマイコンなどの比較的ハードウェア資源が豊富な環境ではC++やJavaが使用されることもある一方で、ハードウェアを直接操作する場面や、4ビットマイコンなどの資源が貧弱な環境では、現代でもアセンブリ言語の使用が必須である。
- デバッグは、ICEと呼ばれる機器を用いてパソコンをCPUに接続してリモートで行う。近年では、ICEを使わずJTAGエミュレータやROMエミュレータなどのエミュレータや、パソコン上でCPUの機能をシミュレートするシミュレータも使用される。
- 近年ではPCベースのハードウェアの低価格化に伴い、PCベースのハードウェアを使用し、OSも組み込み向けにカスタマイズしたWindowsやLinuxを採用することも多い。
- 携帯電話やデジタル家電、自動車など、必要とする機能が多岐にわたるシステムは、複数のマイコン・複数のOSを組み合わせたものとなり、数百人単位の開発人数・数年規模の開発期間を必要とする。このため、大規模組み込みシステムと呼ばれることがある。
逆に組込みシステムではないもの(Wikipediaでは汎用システム)って具体的にはなんだろうか? 一番分かりやすいのはパーソナルコンピュータやワークステーションだろう。
PCの特徴は IBM と Microsoft のおかげで、アプリケーションソフトから見たハードウェアのインターフェースが共通になっているため、アプリケーションソフトの制作者はPCのハードウェアの違いをあまり意識しないでよいという点だと思う。(Mac もMacの中だけで考えれば同じ)
共通のハードウェアプラットフォームがあり、そこへいろいろなソフトウェアをインストールして使える、もしくは、その都度その都度ソフトウェアをダウンロードして使えるようなシステムは汎用システムとなるように思える。
そうすると、現在の携帯電話は電話としての機能は特定の用途を実現するための組込みシステムだが、電話をかけていないときは、インターネットに接続しWEBブラウジングや Java アプリを実行したりできるので、汎用システムであるとも言える。
ゲーム機も同じだ。CDやカセットを入れ替えて共通のコントローラを使って、いろいろなアプリケーションソフトを使うことができる。
そう思っていたら、任天堂の Wii のコマーシャルが流れてきて「ああ、これが組込みの特徴かも知れない」とピンときた。
Wii は何と言ってもWiiリモコンがこれまでのゲーム機にはないデバイスだ。具体的にはモーションセンサと呼ばれる三次元の加速度センサが新しい。この三次元の加速度センタを使うことで、リモコンを上下、左右に振ったり、突き出したりする動きをセンシングしてゲームに取り入れることができる。
これまでのゲーム機は基本的に左手の親指で十字のコントローラを動かし、右手の親指でボタンを押すというインターフェースしか持っていなかったが、三次元の加速度センタを使うことでまったく新しいゲームの遊び方を提案することが可能になった。
ニンテンドウDS のタッチスクリーンとタッチペンも同じようにそれまでのゲーム機にはなかった新しいインターフェースデバイスだった。リモコンに仕込まれた振動装置も新しいデバイスだったがこれはこれまでの環境を劇的に変化させるようなものではなかった。
Wii リモコンを見たときに「これが組込みの特徴かもしれない」と思った。新しいハードウェアデバイスをシステムに取り込むことで顧客満足度を高めることができるのが組込みシステムではないかという考え方だ。
でも、一般的にはパソコンの方がアプリケーションソフトの入れ替えによって用途が無限に広がり、顧客満足を高めるくふうがしやすいように見える。でも、よく考えるとパソコンのインプットデバイスはキーボード、マウス、マイクであり、アウトプットデバイスはディスプレイとスピーカと意外に限定されている。
だからできることのバリエーションの大部分はディスプレイの中だけに閉じている。人間の入力情報の多くは視覚からきているので、パソコンのディスプレイからいろいろな情報を流すことが可能なのだが、人間の生活はディスプレイの中だけに閉じているわけではない。現実の世界はディスプレイの中の世界よりももっともっと広い。
プラットフォームを共通にするということはアプリケーションソフトの入れ替えが容易になるというメリットはあるものの、見方を変えれば「世界を固定する」ことのようにも考えられる。
世界を固定すると言っても、狭く囲う場合と広く囲う場合がある。固定した世界の範囲が広いと、一見そのプラットフォームで提供できる世界が無限に広がっているように見えるが、システムを作る側も利用する側もそう思い込んでしまうと、実際の世界はどんどん広がっているのに、固定された世界の中しか商品や市場を見ていないということになりかねない。
今回の任天堂のWii を見てそう思った。Wii の登場で、PS3やX-BOXは一見無限に広がっていそうな固定された世界で勝負しようとしていて、現実世界の広さを見失っているように思えてきた。
この話は「洗濯機メーカーは新しい洗濯機を開発しようとしてはいけない」の記事で書いたことに共通する。現行機種と現行機種の使われ方だけを見ていると、真のユーザーニーズや、デバイスの制限でできていなかったことをすっかり忘れてしまう。
ハードウェアデバイスは常に進化している。自分たちの市場とはまったく関係ないところで開発されたデバイスが、思いもよらないところで役に立ったりする。Wii のモーションセンサもITmediaの記事によると、もともとは自動車のエアバッグを作動させるときのために開発されたセンサらしい。
そう考えると、組込みシステムが相手にする世界は非常に広く、現行製品にありとあらゆるデバイスを取り入れることで、その市場における顧客満足をより高める製品に進化させる可能性があるように思う。
そうなると、組込みソフトウェアエンジニア側も、どのようなキーデバイスが取り込まれて、開発環境もどう変化するのか分からないので常に柔軟な対応が迫られる。
逆に言えば、あらゆる未知のデバイスを使いこなせるスキルの下地があればその市場において非常に競争力の高い商品をアウトプットできるようになる。
組込みか組込みでないかの違いは「世界を固定するかしないかの違い」であり、組込みは世界を固定しないだけに技術者に求められるスキルも多様であり、挑戦者にとってのやりがいが大きいと考えるのはどうだろう。
0 件のコメント:
コメントを投稿