
組み込みシステムとは、コンピュータプロセッサ、コンピュータメモリ、入出力周辺機器を組み合わせた特殊なコンピュータシステムであり、大規模な機械システムまたは電子システムの中で専用の機能を持ちます。[ 1 ] [ 2 ]電気・電子ハードウェアや機械部品を含む完全なデバイスの一部として組み込まれます。組み込みシステムは通常、組み込まれた機械の物理的な動作を制御するため、リアルタイムコンピューティングの制約を受けることがよくあります。組み込みシステムは、一般的に使用されている多くのデバイスを制御します。[ 3 ] 2009年には、製造されたマイクロプロセッサの98%が組み込みシステムに使用されたと推定されました。[ 4 ]
現代の組み込みシステムは、多くの場合マイクロコントローラ(メモリと周辺インターフェースを統合したマイクロプロセッサ)をベースにしていますが、特に複雑なシステムでは、メモリと周辺インターフェース回路に外付けチップを使用する通常のマイクロプロセッサも一般的です。いずれの場合も、使用されるプロセッサは、汎用的なものから特定の計算クラスに特化したものまで、あるいは特定のアプリケーションに合わせてカスタム設計されたものまで、多岐にわたります。専用プロセッサの一般的な標準クラスは、デジタル信号プロセッサ(DSP)です。
組み込みシステムは特定のタスクに特化しているため、設計エンジニアはそれを最適化することで、製品のサイズとコストを削減し、信頼性と性能を向上させることができます。一部の組み込みシステムは大量生産されており、規模の経済の恩恵を受けています。
組み込みシステムの規模は、デジタル時計やMP3プレーヤーなどの携帯型パーソナルデバイスから、家電製品、産業用組立ライン、ロボット、輸送車両、信号制御器、医療用画像システムなどの大型機械まで多岐にわたります。航空機の航空電子機器や宇宙船の宇宙電子機器など、他の機械のサブシステムを構成することも少なくありません。工場、パイプライン、電力網といった大規模な施設は、複数の組み込みシステムをネットワークで接続して利用しています。ソフトウェアのカスタマイズによって汎用化されたプログラマブルロジックコントローラなどの組み込みシステムは、多くの場合、個々の機能ユニットを構成します。
組み込みシステムは、単一のマイクロコントローラ チップを備えた複雑性の低いものから、複数のユニット、周辺機器、ネットワークを備えた非常に複雑性が高いものまで多岐にわたります。これらのシステムは、機器ラック内や、長距離通信回線で接続された広大な地理的領域にまたがって 存在する場合があります。
マイクロプロセッサとマイクロコントローラの起源は、 1960年代初頭に開発されたMOS集積回路に遡ります。1964年までに、MOSチップはバイポーラチップよりもトランジスタ密度が高く、製造コストも低下しました。MOSチップはムーアの法則で予測された速度でさらに複雑化し、1960年代後半には1つのMOSチップ上に数百個のトランジスタを搭載した大規模集積回路(LSI)へと発展しました。MOS LSIチップのコンピューティングへの応用は、技術者が完全なコンピュータプロセッサシステムを複数のMOS LSIチップに収容できることに気づき始めたことで、最初のマイクロプロセッサの基礎となりました。[ 5 ]
最初のマルチチップ・マイクロプロセッサは、 1969年のFour-Phase Systems AL1と1970年のGarrett AiResearch MP944で、複数のMOS LSIチップを用いて開発されました。最初のシングルチップ・マイクロプロセッサは、1971年にリリースされたIntel 4004です。これは、フェデリコ・ファギンが自身のシリコンゲートMOS技術を用いて、インテルのエンジニアであるマルシアン・ホフとスタン・メイザー、そしてビジコムのエンジニアである島正敏と共に開発されました。[ 6 ]
近代的な組み込みシステムとして最初に認識されたものの一つは、1965年頃にMIT計測研究所のチャールズ・スターク・ドレイパーによって開発されたアポロ誘導コンピュータ[ 7 ]である。プロジェクト開始当初、アポロ誘導コンピュータは、コンピュータのサイズと重量を削減するため に当時新しく開発されたモノリシック集積回路を採用していたため、アポロ計画の中で最もリスクの高い装置と考えられていた。
初期に大量生産された組み込みシステムは、 1961 年にリリースされたミニットマン ミサイル用のAutonetics D-17 誘導コンピュータでした。1966 年にミニットマン II の生産が開始されると、D-17 は、集積回路を初めて大量使用した新しいコンピュータに置き換えられました。
1960年代の初期のアプリケーション以来、組み込みシステムの価格は低下し、処理能力と機能は劇的に向上しました。初期のマイクロプロセッサであるIntel 4004(1971年発売)は、電卓などの小型システム向けに設計されましたが、依然として外部メモリとサポートチップが必要でした。1980年代初頭までに、メモリ、入出力システムコンポーネントがプロセッサと同じチップに統合され、マイクロコントローラが構成されるようになりました。マイクロコントローラは、汎用コンピュータではコストが高すぎる用途で活用されています。マイクロプロセッサとマイクロコントローラのコストが低下するにつれて、組み込みシステムの普及が進みました。
比較的低コストのマイクロコントローラは、多数の個別部品と同じ役割を果たすようにプログラムできます。マイクロコントローラの登場により、民生用製品においても、ポテンショメータや可変コンデンサといった高価なノブ型アナログ部品を、マイクロプロセッサによって読み出される上下ボタンやノブに置き換えることが可能になりました。この文脈において、組み込みシステムは通常、従来のソリューションよりも複雑になりますが、その複雑さの大部分はマイクロコントローラ自体に内包されています。追加部品はほとんど必要なく、設計作業の大部分はソフトウェアに集中します。組み込みプロセッサを使用しない新しい回路の設計・構築と比較して、ソフトウェアによるプロトタイプ作成とテストはより迅速に行うことができます。

組み込みシステムは、消費者、産業、自動車、家電、医療、通信、商業、航空宇宙、軍事のアプリケーションでよく見られます。
通信システムには、ネットワーク用の電話交換機からエンドユーザーの携帯電話まで、数多くの組み込みシステムが採用されています。コンピュータネットワークでは、専用のルーターとネットワークブリッジを使用してデータをルーティングします。
民生用電子機器には、 MP3プレーヤー、テレビ、携帯電話、ビデオゲーム機、デジタルカメラ、GPS受信機、プリンターなどがあります。電子レンジ、洗濯機、食器洗い機などの家電製品には、柔軟性、効率性、機能性を高めるための組み込みシステムが組み込まれています。高度な暖房、換気、空調(HVAC)システムは、ネットワーク化されたサーモスタットを使用して、時間帯や季節によって変化する温度をより正確かつ効率的に制御します。ホームオートメーションは、照明、空調、セキュリティ、オーディオ/ビジュアル、監視などを制御できる有線および無線ネットワークを使用します。これらはすべて、センシングと制御に組み込みデバイスを使用しています。
飛行機から自動車まで、輸送システムでは組み込みシステムの使用がますます増えています。新型飛行機には慣性誘導システムや GPS 受信機など高度な航空電子機器が搭載されており、これらにもかなりの安全要件が課されています。宇宙船は軌道修正のために宇宙電子機器システムを利用しています。ブラシレス DC モーター、誘導モーター、DC モーターなどさまざまな電気モーターで電子モーター コントローラーが使用されています。自動車、電気自動車、ハイブリッド車では、効率を最大化し汚染を減らすために組み込みシステムの使用が増えています。組み込みシステムを使用するその他の自動車安全システムには、アンチロック ブレーキ システム(ABS)、横滑り防止装置(ESC/ESP)、トラクション コントロール(TCS)、自動四輪駆動などがあります。
医療機器では、モニタリングや、非侵襲的な内部検査のための様々な医用画像診断(陽電子放出断層撮影(PET)、単一光子放出コンピュータ断層撮影(SPECT)、コンピュータ断層撮影(CT)、磁気共鳴画像診断(MRI))のための組み込みシステムが使用されています。医療機器内の組み込みシステムは、多くの場合、産業用コンピュータによって駆動されています。[ 9 ]
組み込みシステムは、航空宇宙・防衛産業におけるセーフティクリティカルなシステムに利用されています。これらのシステムは、オンチップの3Gセルラーやその他のIoT監視・制御手段を介して有線または無線ネットワークに接続されていない限り、ハッキングから隔離され、より安全な状態を維持できます。火災安全対策として、システムは高温にも耐え、動作を継続できるよう設計できます。セキュリティ対策として、組み込みシステムは自立的に動作し、電気系統や通信系統の障害にも対応できます。
モートと呼ばれる小型無線デバイスは、ネットワーク化された無線センサーです。無線センサーネットワークは、高度な集積回路(IC)設計によって可能になった小型化技術を活用し、完全な無線サブシステムを高度なセンサーに接続することで、人や企業が物理世界における無数の事象を測定し、その情報に基づいて監視・制御システムを通じて行動することを可能にします。これらのモートは完全に自己完結型であり、通常はバッテリー電源で数年間動作し、バッテリーの交換や充電が必要になります。
組み込みシステムは、複数のタスクを実行するように設計された汎用コンピュータとは対照的に、特定のタスクを実行するように設計されています。安全性や使いやすさなどの理由から、リアルタイムパフォーマンスの制約を満たす必要があるシステムもあれば、パフォーマンス要件が低い、あるいは全く要件がないシステムもあり、その場合はシステムハードウェアを簡素化してコストを削減できます。
組み込みシステムは必ずしもスタンドアロンのデバイスではありません。多くの組み込みシステムは、より汎用的な目的を果たす大型デバイス内の小さな部品です。例えば、ギブソン・ロボットギターには弦をチューニングするための組み込みシステムが搭載されていますが、ロボットギターの全体的な目的は音楽を演奏することです。[ 10 ]同様に、自動車の組み込みシステムは、自動車自体のサブシステムとして特定の機能を提供します。

組み込みシステム向けに記述されたプログラム命令はファームウェアと呼ばれ、読み取り専用メモリまたはフラッシュメモリチップに保存されます。ファームウェアは、限られたコンピュータハードウェアリソース(メモリが少ない、キーボードや画面が小さい、あるいは存在しない)で動作します。

組み込みシステムは、ユーザーインターフェースを全く持たない、単一のタスクに特化したシステムから、現代のコンピュータのデスクトップオペレーティングシステムに似た複雑なグラフィカルユーザーインターフェースまで、多岐にわたります。シンプルな組み込みデバイスは、ボタン、発光ダイオード(LED)、グラフィックまたは文字を表示する液晶ディスプレイ(LCD)、そしてシンプルなメニューシステムを使用します。タッチセンサーや画面端のソフトキーを備えたグラフィカルスクリーンを使用する、より高度なデバイスは、柔軟性を備えながら、最小限のスペースで操作できます。ボタンの意味は画面に合わせて変化し、選択は自然な動作で目的のものを指さすことで行えます。
一部のシステムでは、シリアル(RS-232など)またはネットワーク(Ethernetなど)接続を利用して、リモートでユーザーインターフェースを提供しています。このアプローチは、組み込みシステムの機能を拡張し、ディスプレイのコストを削減し、ボードサポートパッケージ(BSP)を簡素化し、設計者がPC上でリッチなユーザーインターフェースを構築できるようにします。その好例として、組み込みデバイス( IPカメラやネットワークルーターなど)上で動作する組み込みHTTPサーバーの組み合わせが挙げられます。ユーザーインターフェースは、デバイスに接続されたPCの Webブラウザに表示されます。
一般的な組み込みコンピュータは、汎用コンピュータと比較して、低消費電力、小型、動作範囲の広さ、そしてユニットあたりのコストの低さといった特性を備えています。しかし、これは限られた処理リソースを犠牲にして実現されています。
組み込みシステム向けには、数多くのマイクロコントローラが開発されてきました。汎用マイクロプロセッサも組み込みシステムで使用されますが、一般的にマイクロコントローラよりも多くのサポート回路を必要とします。
PC/104およびPC/104+は、小型・低生産量の組み込みシステムや高耐久性システム向けの既製コンピュータボードの規格例です。これらは主にx86ベースで、標準的なPCと比較すると物理的に小型であることが多いものの、多くのシンプルな(8/16ビット)組み込みシステムと比較すると依然として大型です。LinuxやNetBSDなどの標準オペレーティングシステム、またはMicroC/OS-II、QNX、VxWorksなどの組み込みリアルタイムオペレーティングシステム(RTOS)が使用される場合があります。
小型化や電力効率がそれほど重要でないアプリケーションでは、汎用のx86パーソナルコンピュータで使用されているコンポーネントと互換性のあるコンポーネントが使用されることがあります。VIA EPIAシリーズなどのボードは、PCと互換性がありながら高度に統合されていたり、物理的に小型であったり、組み込みエンジニアにとって魅力的な他の属性を備えているため、このギャップを埋めるのに役立ちます。このアプローチの利点は、低コストのコモディティコンポーネントを、一般的なソフトウェア開発に使用するのと同じソフトウェア開発ツールとともに使用できることです。この方法で構築されたシステムは、大型のデバイスに統合され、単一の役割を果たすため、依然として組み込み型と見なされます。このアプローチを採用するデバイスの例としては、アプリケーション固有のコードを含む自動現金自動預け払い機(ATM)やアーケードマシンなどがあります。
しかし、既製の組み込みシステムボードのほとんどはPC中心ではなく、ISAバスやPCIバスを使用していません。システムオンチッププロセッサが使用される場合、個々のコンポーネントを接続する標準化されたバスを使用するメリットはほとんどなく、ハードウェアツールとソフトウェアツールの両方の環境が大きく異なる可能性があります。
一般的な設計スタイルの一つは、名刺サイズ程度の小型システムモジュールに、ARMベースのシステムオンチッププロセッサや周辺機器などの高密度BGAチップ、ストレージ用の外付けフラッシュメモリ、ランタイムメモリ用のDRAMを搭載するものです。モジュールベンダーは通常、ブートソフトウェアを提供し、LinuxやリアルタイムOSなどを含む複数のオペレーティングシステム(OS)に対応しています。これらのモジュールは、専門的なテスト問題に精通した組織によって大量生産され、特定用途向けの外部周辺機器を備えたはるかに少量のカスタムマザーボードと組み合わせて使用されます。このアプローチの代表的な例としては、ArduinoやRaspberry Piなどが挙げられます。
システムオンチップ(SoC)は、複数のプロセッサ、乗算器、キャッシュ、さらには異なる種類のメモリ、そして一般的には有線または無線通信用のインターフェースといった様々な周辺機器で構成される完全なシステムを1つのチップに搭載しています。多くの場合、グラフィックス・プロセッシング・ユニット(GPU)やDSPも搭載されています。SoCは、特定用途向け集積回路(ASIC)として実装することも、通常は再構成可能なフィールド・プログラマブル・ゲートアレイ(FPGA)を使用して実装することもできます。
ASIC実装は、携帯電話やスマートフォンなどの超大量生産の組み込みシステムで一般的です。一方、航空電子機器のように、信号処理性能、インターフェース、信頼性に関して特別なニーズを持つ、それほど大量生産ではない組み込みシステムでは、ASICまたはFPGA実装が使用される場合があります。

組み込みシステムは、次のような周辺機器を介して外部と通信します。
他のソフトウェアと同様に、組み込みシステム設計者はコンパイラ、アセンブラ、デバッガを使用して組み込みシステムソフトウェアを開発します。ただし、より特殊なツールを使用する場合もあります。
ソフトウェア ツールは、さまざまなソースから提供されます。
組み込みソフトウェアには、 C++、Rust、Pythonなどのプログラミング言語や、グラフィカルインターフェース用のQtなどのフレームワークなど、様々な開発ツールが必要になることがよくあります。これらのツールにより、開発者は組み込みシステムの特定の要件に合わせて、効率的でスケーラブルかつ機能豊富なアプリケーションを作成できます。ツールの選択は、リアルタイム性能、ハードウェアとの統合、エネルギー効率などの要因によって決まります。
組み込みシステムの複雑さが増すにつれ、高水準ツールやオペレーティングシステムは、それが合理的である限り、機械内部へと移行しつつあります。例えば、携帯電話、携帯情報端末( PDA) 、その他の民生用コンピュータは、電子機器メーカー以外の者が購入または提供する重要なソフトウェアを必要とすることがよくあります。これらのシステムでは、サードパーティのソフトウェアプロバイダーが大規模な市場に販売できるように、Linux、NetBSD、FreeBSD、OSGi、Embedded Javaなどのオープンプログラミング環境が求められます。
組み込みデバッグは、利用可能な機能に応じて、さまざまなレベルで実行できます。考慮すべき事項としては、メインアプリケーションの速度低下の有無、デバッグ対象のシステムまたはアプリケーションが実際のシステムまたはアプリケーションにどの程度近いか、デバッグ用に設定できるトリガーの表現力(例:特定のプログラムカウンタ値に達したときにメモリを検査する)、デバッグプロセスで検査できる内容(例:メモリのみ、メモリとレジスタなど)などが挙げられます。
デバッグ手法とシステムは、最も単純なものから最も高度なものまで、おおよそ次の領域に分類されます。
外部デバッグに制限されない限り、プログラマーは通常、ツールを介してソフトウェアをロードして実行し、プロセッサ内で実行されているコードを確認し、その動作を開始または停止することができます。コードのビューは、高水準プログラミング言語、アセンブリコード、またはその両方の組み合わせとして表示されます。
リアルタイムオペレーティングシステムは、多くの場合、オペレーティングシステムイベントのトレースをサポートしています。システムの動作の記録に基づいて、ホストPCツールによってグラフィカルビューが表示されます。トレースの記録は、ソフトウェア、RTOS、または専用のトレースハードウェアによって実行できます。RTOSトレースを使用すると、開発者はソフトウェアシステムのタイミングとパフォーマンスの問題を理解し、高レベルのシステムの動作を適切に理解できます。組み込みシステムでのトレースの記録は、ハードウェアまたはソフトウェアソリューションを使用して実現できます。ソフトウェアベースのトレース記録では、専用のデバッグハードウェアが必要なく、展開されたデバイスのトレースを記録できますが、CPUとRAMの使用率に影響を与える可能性があります。[ 14 ] RTOS環境で使用されるソフトウェアベースのトレース方法の1つの例は、コードの戦略的な場所でオペレーティングシステムによって呼び出され、フックとして機能するように実装できる空のマクロの使用です。
組み込みシステムは、何年もエラーなく継続的に動作することが期待される機械に搭載されることが多く、エラーが発生した場合でも自動的に回復する場合もあります。そのため、ソフトウェアは通常、パーソナルコンピュータよりも慎重に開発・テストされ、ディスクドライブ、スイッチ、ボタンなどの信頼性の低い機械可動部品は避けられます。
具体的な信頼性の問題としては次のようなものが挙げられます。
エラー(メモリ リークなどのソフトウェア バグとハードウェアの ソフト エラーの両方)から回復するために、さまざまな手法が、場合によっては組み合わせて使用されます。
携帯電話などの大量生産システムでは、コストの最小化が設計上の最優先事項となる場合が多い。エンジニアは通常、必要な機能を実装するのに十分な性能を持つハードウェアを選択する。
少量生産またはプロトタイプの組み込みシステムの場合、プログラムを制限したり、オペレーティング システムを RTOS に置き換えたりすることで、汎用コンピュータを適応させることができます。
1978年に全米電気工業会はICS 3-1978というプログラム可能なマイクロコントローラの標準規格を発表しました。[ 19 ]これにはシングルボードコンピュータ、数値制御、イベントベースコントローラなど、ほぼすべてのコンピュータベースのコントローラが含まれています。
一般的に使用されているソフトウェア アーキテクチャにはいくつかの異なるタイプがあります。
この設計では、ソフトウェアは入力デバイスを監視するループのみを備えています。このループはサブルーチンを呼び出し、各サブルーチンはハードウェアまたはソフトウェアの一部を制御し、そのため「単純制御ループ」または「プログラム入出力」と呼ばれます。
一部の組み込みシステムは、主に割り込みによって制御されます。つまり、システムによって実行されるタスクは、さまざまな種類のイベントによってトリガーされます。例えば、タイマーが定義済みの間隔で実行したり、シリアルポートコントローラがデータを受信したりすることで、割り込みが生成されます。
このアーキテクチャは、イベントハンドラのレイテンシを低く抑える必要があり、かつイベントハンドラが短くシンプルな場合に使用されます。これらのシステムはメインループでも単純なタスクを実行しますが、このタスクは予期せぬ遅延の影響をそれほど受けません。割り込みハンドラは、より長いタスクをキュー構造に追加することがあります。割り込みハンドラの処理が終了した後、これらのタスクはメインループによって実行されます。この方式により、システムは個別のプロセスを持つマルチタスクカーネルに近づきます。
協調型マルチタスクは、ループがAPIに隠されている点を除けば、単純な制御ループ方式と非常によく似ています。[ 3 ] [ 1 ]プログラマーは一連のタスクを定義し、各タスクは実行するための独自の環境を取得します。タスクがアイドル状態のときは、アイドルルーチンを呼び出し、制御を別のタスクに渡します。
利点と欠点は制御ループの場合と似ていますが、新しいタスクを記述するかキューに追加するだけで、新しいソフトウェアを簡単に追加できる点が異なります。
このタイプのシステムでは、低レベルのコードが、割り込みを呼び出すタイマーに基づいてタスクまたはスレッドを切り替えます。これは、システムが一般的にオペレーティングシステムカーネルを備えていると考えられるレベルです。必要な機能の程度に応じて、概念的に並列実行される複数のタスクの管理に伴う複雑さが増減します。
コードは他のタスクのデータを損傷する可能性があるため (メモリ管理ユニットを使用するシステムを除く)、プログラムは慎重に設計およびテストする必要があり、共有データへのアクセスはメッセージ キュー、セマフォ、非ブロッキング同期スキームなどの同期戦略によって制御される必要があります。
このような複雑さのため、組織では既製のRTOSを使用するのが一般的です。これにより、アプリケーションプログラマーはオペレーティングシステムのサービスではなくデバイスの機能に集中できます。しかし、RTOSを組み込むという選択には、アプリケーション開発プロセスを開始する前に選択する必要があるという独自の問題が伴います。このタイミングにより、開発者は現在の要件に基づいてデバイス用の組み込みオペレーティングシステムを選択せざるを得なくなり、将来の選択肢が大幅に制限されます。[ 20 ]
組み込みシステムの複雑さは、シリアル、USB、TCP/IP、Bluetooth、無線LAN 、トランク無線、複数チャネル、データと音声、拡張グラフィックス、複数の状態、複数のスレッド、多数の待機状態など、周辺機器やタスクの管理をデバイスが要求されるにつれて、継続的に増大しています。こうした傾向は、RTOSに加えて 組み込みミドルウェアの採用につながっています。
マイクロカーネルはメモリを割り当て、CPUを異なる実行スレッドに切り替えます。ユーザーモードプロセスは、ファイルシステムやネットワークインターフェースなどの主要な機能を実装します。
エクソカーネルは通常のサブルーチン呼び出しによって効率的に通信します。システム内のハードウェアとすべてのソフトウェアは、アプリケーションプログラマーが利用可能であり、拡張可能です。
モノリシックカーネルは、組み込み環境向けに高度な機能を備えた比較的大規模なカーネルです。これにより、プログラマーはLinuxやMicrosoft Windowsなどのデスクトップオペレーティングシステムに類似した環境を利用できるため、開発の生産性が向上します。ただし、モノリシックカーネルは多くのハードウェアリソースを必要とし、多くの場合高価であり、カーネルの複雑さゆえに予測可能性と信頼性が低くなる場合があります。
組み込みモノリシック カーネルの一般的な例としては、組み込み Linux、VXWorks、Windows CEなどがあります。
ハードウェアのコストが増加しているにもかかわらず、このタイプの組み込みシステムは、特にワイヤレス ルーターやGPS ナビゲーション システムなどのより強力な組み込みデバイスで人気が高まっています。
多くの組み込みシステムには、コアオペレーティングシステムに加えて、上位層のソフトウェアコンポーネントが搭載されています。これらのコンポーネントには、CAN、TCP/IP、FTP、HTTP、HTTPSなどのネットワークプロトコルスタックや、FATやフラッシュメモリ管理システムなどのストレージ機能が含まれます。組み込みデバイスにオーディオおよびビデオ機能が搭載されている場合は、適切なドライバとコーデックがシステムにインストールされています。モノリシックカーネルの場合、これらのソフトウェア層の多くはカーネルに組み込まれている場合があります。RTOSカテゴリでは、追加のソフトウェアコンポーネントの提供状況は、商用製品によって異なります。
自動車分野では、AUTOSARは組み込みソフトウェアの標準アーキテクチャです。
組み込みシステムとは、
ある機能または一連の機能を制御するために構築された
マイクロプロセッサベースのシステムです。
{{citation}}: CS1 maint: ISBNによる作業パラメータ(リンク)