組み込みシステム
組み込みシステムとは、ごく少数の非常に特定の問題を解決するためだけに構築されたコンピュータのことで、簡単に変更することはできません。組み込みという言葉は、システムに組み込まれているという意味です。大きなシステムの中に組み込まれているのです。通常、コンピュータのようには見えず、キーボードやモニタ、マウスもありません。しかし、他のコンピュータと同じように、プロセッサとソフトウェア、入力と出力を持っています。
例えば、エレベータに埋め込まれたコントローラは、押されたボタンに基づいて、エレベータを異なる階に移動させるようにモータに指示します。デコーダは、衛星テレビのセットトップボックス(STBと呼ばれる)に埋め込まれており、ディッシュからの信号を読み取って、テレビが理解できるものを送信します。多くの場合、このタイプのシステムは、特定の時間内にその仕事をしなければなりません。これはリアルタイムコンピューティングと呼ばれています。セットトップボックスが別のタスクを行うために中断された場合、例えばテレビの画像が悪くなることがあります。汎用コンピュータは、他のことをしている間に短い一時停止をすることがよくありますが、これはリアルタイムではありません。
組み込みシステムは、ホテルのドアロックのカードリーダや車の中の様々なものを制御します。MP3 プレーヤーやデジタルカメラのような小さなものから、交通信号システムや飛行機、工場の組立ラインのような大きなものまで制御することができます。


ADSLモデム/ルータの内部の写真。組み込みシステムの最新の例。ラベル付けされた部品は、マイクロプロセッサ(4)、RAM(6)、およびフラッシュメモリ(7)を含む
組込みシステムの事例
組込みシステムは、多くの種類の電気機器に使用されています。
- 通信システムでは、電話、携帯電話網、wi-fiルータなどに使用されています。
- 家電製品には、放送受信機、MP3プレーヤー、携帯電話、ビデオゲーム機、デジタルカメラ、DVDプレーヤー、GPS受信機、ホームセキュリティシステム、プリンターなどがあります。
- 電子レンジや洗濯機、防犯カメラ、食器洗浄機などの家電製品には、システムが組み込まれています。
- 交通機関では、電車や飛行機、自動車などの機関車からあらゆるものに組み込みシステムが使われています。
- 産業界では、電子制御装置、カードリーダー、金属部品を自動的に作るCNCマシンなどを搭載した電動機が使用されています。
- 除細動器、自動血圧計、自動インスリンポンプなどの医療機器。
- トランシーバーや衛星、ミサイルの誘導装置などの軍事機器。
共通機能
- 組み込みシステムは、汎用コンピュータとは異なり、特定の作業を行うために設計されています。
- パソコンではないように見えますが、フルモニターやキーボードはないかもしれません。
- 多くの組み込みシステムは、リアルタイムで、短時間で(人間から見ればほぼ瞬時に)物事を行うことができなければなりません。
- 多くの組み込みシステムは、特に医療機器や航空機を制御するアビオニクスにとって、非常に安全で信頼性の高いものでなければなりません。
- 非常に迅速に起動します。人は、車が始まるまで1~2分待ったり、緊急時の装備が始まるのを嫌がります。
- それは、リアルタイム・オペレーティング・システム、またはRTOSと呼ばれるこれらの要件を満たすのに役立つ特別なオペレーティングシステム(または時には非常に小さな自作のOS)を使用することがあります。
- 組込みシステム用に書かれたプログラム命令はファームウェアと呼ばれ、読み取り専用メモリやフラッシュメモリチップに格納されています。ファームウェアは、限られたコンピュータのハードウェアリソース(メモリが少ない、キーボードやスクリーンが小さい、または存在しない)で動作します。
組み込みシステムは、必ずしもスタンドアロンのデバイスではありません。ラジオ、スロットル制御、汚染制御など、自動車の様々な部品のように、セットで作られていることもあります。インターネットや携帯電話のネットワークと通信できる場合もありますし、USBリーダーや他の接続がある場合もあります。
ユーザーインターフェース
組み込みシステムは、ユーザーインターフェースが全くないものから、電気信号を送受信するだけのものまで、現代のコンピュータのようなグラフィカルなユーザーインターフェースを備えたものまで、様々です。多くの場合、いくつかのプッシュボタンと小さなディスプレイ、そしていくつかの LED を備えています。より複雑なシステムでは、スマートフォンのように、画面ごとにボタンの意味を変えることができるタッチスクリーンを備えている場合もあります。


ボタンとシンプルなLCDディスプレイを備えたユーザーインターフェースの一例です。
ハードウェア
ハードウェアには、チップ、配線、回路基板、ボタン、ディスプレイなどがあります。
CPU
最も重要なチップは中央処理装置またはCPUです。これは、ソフトウェアの命令を実行します。これは、標準的なマイクロプロセッサまたはマイクロコントローラであることができます。マイクロコントローラには、マイクロプロセッサだけでなく、単純な周辺機器も含まれているため、システムの小型化と低コスト化が可能です。それらの部品を変更することができないので、彼らはより少ない柔軟性を持っています。通常、これらの部品には、フラッシュメモリやシリアルポート、USBなどのサポートが含まれます。
汎用コンピュータのマイクロプロセッサとは異なり、大きくて速いことが必ずしも良いとは限りません。多くの組み込みプロセッサは非常に小さくなっています。これは、使用するスペースや電力を少なくするためであることもあれば、より安価にするためであることもあります。汎用コンピュータは、32ビットや64ビットのワードを読み込んでGHzで計測される速度で動作するマイクロプロセッサを使用しますが、組み込みプロセッサは通常4ビットから32ビットで、通常数十MHz(100倍遅い)で計測される速度で動作します。しかし、プログラムも小さくなり、使わないものはチェックしません)。
既製のコンピュータボード
いくつかの組み込みシステムで使用できる「既製の」コンピュータボードがあります。これらは多くの場合、Windows CE、Linux、NetBSD、または組み込みリアルタイムオペレーティングシステムを使用しています。
すでに作られている回路基板を使った方が簡単な場合もあります。これらは通常、汎用コンピュータと多くのコンポーネントを共有していますが、汎用コンピュータの1つよりも小さくなっています。VIA EPIAのようなボードは、Microsoft Windowsを実行することができます。その利点は、電気工学の時間をある程度節約でき、PCタイプのソフトウェア開発に使用されるのと同じソフトウェア開発ツールを使用できることです。このような組み込みデバイスの例としては、カジノのATMやディスプレイがあります。これは、リアルタイムの要件がそれほど厳しくない場合に有効です(例えば、ジョブが5秒ではなく8秒かかる場合でもあまり問題になりません)。
ASICおよびFPGAソリューション
デバイスが非常に小型である必要がある場合や、非常に大量に販売される(「大量販売」)場合には、必要とされる機能を正確に実行するカスタムまたは特殊なチップを作ることが理にかなっています。これは、プロセッサ、浮動小数点演算ユニット、メモリキャッシュ、およびインターフェイスなどの完全なシステムを単一の集積回路に搭載したSoC(System on a Chip)です。SoCは、特別注文のアプリケーション専用集積回路(ASIC)として作ることもできるし、組み込みシステムを構築する人がプログラムするFPGA(Field-Programmable Gate Array)を使って作ることもできる。
周辺機器
組み込みシステムは、外部の世界や他のコンポーネントと、周辺機器などを使って話をします。
- シリアルポート。RS-232、RS-422、RS-485。これは、9ピン(またはそれ以上)のコネクタを使用して、非常に一般的に使用されていました。
- 同期シリアル通信インタフェース。I²C相互統合回路、I²S相互統合サウンド、SPI、MIcrowire、...
- ユニバーサルシリアルバス(USB)。
- ネットワーク。イーサネット、コントローラエリアネットワーク、LonWorks、...
- ディスクリート入出力。汎用入出力(GPIO)。これは、オン/オフ信号を持つ単線にすることができます。小型のキーパッドに使用したり、LEDを点灯させたりすることができます。
- アナログ→デジタル/デジタル→アナログ変換器(ADC/DAC)。光センサーやモーター制御のように強度が変化するものを測定します。
- デバッグ中。ソフトウェアエンジニアのためのJTAG、ICSPポート。


ネットワークアプリケーションをターゲットにした組み込みシステム「Soekris net4801」。
ソフトウェア
オペレーティングシステム
組み込みシステムは、多くの場合、完全なオペレーティングシステムを必要としません。特別に構築された小さくてシンプルなオペレーティング・システムを使用していて、非常に早く起動するものもあれば、全く必要ないものもあります。組込みシステムは、簡単には適応されませんが、より信頼性の高いタスクを実行できるように構築されています。ハードウェアがシンプルであるため、多くの場合、構築コストが安くなり、動作が速くなります。
これに対して、汎用コンピュータは、新しいプリンタやハードドライブのように、まだ知らないハードウェアを実行するために、新しいデバイスドライバやソフトウェアを準備する必要があります。また、異なるアプリケーションプログラムを実行する必要があります。
組込みシステムが大きくなるにつれて、今までは汎用コンピュータやメインフレームだけだったものが、組込みシステムでは一般的になってきています。これには、保護されたメモリ空間や、LinuxやNetBSDなどのオープンなプログラミング環境が含まれています。
簡単なものから複雑なものまで、OSの例をいくつかご紹介します。
- シンプルな制御ループ - タイマーとループを使って、異なるサブルーチンを繰り返し呼び出すようにしています。小規模なシステムでは一人で作ることが多い。
- 割り込み制御 - タスクはさまざまな種類のイベントによって開始されます。イベントは、時限的なもの(例えば、10秒ごと)や、ボタンの押下やデータの受信などです。
- nonpreemptive multitasking - 各タスクは順番に実行され、終了するとOSのスケジューラを呼び出して次のタスクを実行します。
- プリエンプティブマルチタスクまたはマルチスレッド - タスクを一定時間後に停止して、別のタスクをしばらく実行させることができます。どのタスクもシステムを占有することはできません。このレベルでは、システムは「オペレーティングシステム」カーネルを持っていると考えられ、タスクを並列に実行することができます。このタイプのOSは、通常、組み込みOSのみを扱う会社から購入します。
リアルタイム オペレーティング システムには、MicroC/OS-II、Green Hills INTEGRITY、QNX、VxWorks などの製品があります。MacOS や Windows 7 とは異なり、これらのオペレーティング システムはほとんどの人にはあまり知られていません。しかし、時間と安全性が非常に重視される多くの場所で使用されています。人々は毎日これらのOSを使用していますが、それに気付いていません。
大規模なカーネルの一般的な例としては、Embedded Linux や Windows CE があります。これらのカーネルは、厳密なリアルタイムシステムに必要な厳しい時間制限はありませんが、特にワイヤレスルータやGPSのようなより強力なデバイスでは、より一般的になりつつあります。これにより、デバイスドライバ、ウェブサーバ、ファイアウォール、その他のコードのために、パブリックドメインのコードを再利用することができます。PC向けのアプリケーションを書くことに慣れているソフトウェア開発者にとっては、これがより身近なものになるでしょう。必要に応じて、FPGA やその他の特別なハードウェアを、厳しい時間制限を必要とするものに使用することができます。
ツール
他のソフトウェアと同様に、組み込みシステムの設計者は、コンパイラ、アセンブラ、デバッガを使用して組み込みシステムソフトウェアを開発します。しかし、より特殊なツールを使用することもあります。
- デジタル信号処理を使用するシステムでは,開発者はMATLAB,MathCad,Mathematicaなどの数学ツールを使用することができます.
- カスタムコンパイラとリンカは、特定のハードウェアの最適化を改善するために使用されることがあります。
- 組込みシステムは、独自の特別な言語やデザインツールを持っていたり、Basic Stampで使用されているような既存の言語に拡張機能を追加したりすることができます。
デバッグツール。
- インサーキット デバッガ (ICD) は、JTAG インタフェースを介してマイクロプロセッサに接続するハードウェア デバイスです。これにより、マイクロプロセッサがソフトウェアを実行する際に、外部からマイクロプロセッサを起動したり停止させたりする。また、メモリやレジスタを読み込んだり、ソフトウェアプログラムをメモリに格納したりすることもできます。
- ロギングやシリアルポート出力を使用した外部デバッグで、点滅モニタ(printfs)のいずれかを使用して動作をトレースすることができます。
- インタラクティブな常駐デバッグ - OS がサポートしている場合、開発者が入力したコマンドを実行する組み込みプロセッサ上のシェルです (Linux など)。
- インサーキット・エミュレータは、ボード上のマイクロプロセッサに取って代わり、マイクロプロセッサができるすべてのことを完全に制御することができます。
- 完全なエミュレータは、ハードウェアのすべての機能をシミュレートし、そのすべてを制御して変更することができます。ハードウェアは実際には存在しませんが、そのふりをしたバージョン(「仮想」マシン)が通常のPC上にあります。
- ロジックアナライザやマルチメータで外線をチェックする。
外部デバッグに制限されない限り、プログラマは通常、ツールを使用してソフトウェアをロードして実行し、プロセッサ内で実行されているコードを表示し、その動作を開始または停止することができます。コードの表示は、アセンブリコードまたはソースコードである場合があります。統合システム(VxWorksやGreen Hillsなど)の中には、ソフトウェアの実行時にどれだけのスペースを必要とするか、どのようなタスクが実行されているか、そして何が起こったかを追跡するなどの特別な機能を備えているものもあります。
どのような組込みシステムが作られているかによって、どのようにデバッグできるかが変わってきます。例えば、単一のマイクロプロセッサシステムをデバッグするのと、ペリフェラル(DSP、FPGA、コプロセッサ)でも処理が行われているシステムをデバッグするのとでは違います。
安全性と信頼性
組込みシステムは、何年もエラーなく動作することが期待される機械に搭載されていることが多く、エラーが発生しても自力で回復する場合もあります。これは、通常、ソフトウェアの開発とテストがパソコン用よりも慎重に行われていることを意味し、ディスクドライブやファンなどの信頼性の低い機械的な可動部は避けられています。
安全性と信頼性を重視する場所
- システムの中には、修理のために安全に停止することができないものや、修理が困難なものがあります。例えば、宇宙システム(人工衛星、ローバー)、海底ケーブル、原子力発電所の制御などです。
- 航空機の制御、化学工場の制御、列車の信号、心臓の除細動器など、失敗すると人を殺す可能性があります。
- システムが停止してしまったり、ミスをしてしまうと大損をしてしまいます。電話のスイッチ、工場の制御装置、レジスター、自動精算機。
エラーから回復する方法 - メモリリークなどのソフトウェアバグや、ハードウェアのソフトエラーの両方があります。
- 何かが動作しなくなった場合に、組み込みシステムを再起動するウォッチドッグタイマ。
- 別のシステムが動作を停止した場合に、1つのシステムが引き継ぐことができる部品を複製します。
- 部分的な機能を提供するソフトウェア「リンプモード」。
- イミュニティ・アウェア・プログラミング
質問と回答
Q: 組み込みシステムとは何ですか?
A: 組み込みシステムとは、特定の問題を解決するために作られた、変更が容易でないコンピュータのことです。
Q: 組み込みシステムは汎用コンピュータとどう違うのですか?
A:組み込みシステムは、通常、キーボード、モニター、マウスを持たず、特殊な機能を持つものです。汎用のコンピュータは、様々なタスクを実行することができます。
Q: 組込みシステムの例にはどのようなものがありますか?
A:エレベーターのコントローラー、セットトップボックス、ホテルのドアロックのカードリーダー、交通信号システム、飛行機、工場の組み立てラインなどが、組み込みシステムの例です。
Q: リアルタイム・コンピューティングとは何ですか?
A: リアルタイム・コンピューティングとは、組込みシステムが特定の時間内に作業を完了させる必要がある場合のことです。もしそれが中断されると、テレビの画質が悪くなるなどの問題が発生する可能性があります。
Q: 組込みシステムの構成要素は何ですか?
A: 他のコンピュータと同様に、組み込みシステムには、プロセッサ、ソフトウェア、入力、出力があります。
Q: 組込みシステムが制御する可能性のあるタスクにはどのようなものがありますか?
A: 組み込みシステムは、MP3プレーヤーやデジタルカメラのような小型デバイスや、交通信号や飛行機のような大型システムを制御することができます。
Q: 組込みシステムに関する「embedded」という用語の意味は何ですか?
A: "embedded "という用語は、コンピュータがより大きなシステムの中に組み込まれ、簡単に変更できないことを意味します。