
組み込みシステムは、コンピュータプロセッサ、コンピュータメモリ、および入出力周辺機器の組み合わせで構成された特殊なコンピュータシステムであり、大規模な機械システムまたは電子システム内で専用の機能を持ちます。[1] [2]多くの場合、電気または電子ハードウェアと機械部品を含む完全なデバイスの一部として組み込まれます。組み込みシステムは通常、組み込まれているマシンの物理的な操作を制御するため、リアルタイムコンピューティングの制約を受けることがよくあります。組み込みシステムは、一般的に使用されている多くのデバイスを制御します。[3] 2009年には、製造されたすべてのマイクロプロセッサの98%が組み込みシステムで使用されていると推定されました。[4] [更新が必要][アップデート]
現代の組み込みシステムは、多くの場合、マイクロコントローラ(つまり、メモリと周辺インターフェイスが統合されたマイクロプロセッサ) をベースにしていますが、特に複雑なシステムでは、通常のマイクロプロセッサ (メモリと周辺インターフェイス回路に外部チップを使用) も一般的です。いずれの場合も、使用されるプロセッサは、汎用のものから特定のクラスの計算に特化したものまで、または手元のアプリケーション用にカスタム設計されたものまで、さまざまなタイプがあります。専用プロセッサの一般的な標準クラスは、デジタル信号プロセッサ(DSP) です。
組み込みシステムは特定のタスク専用であるため、設計エンジニアはそれを最適化して製品のサイズとコストを削減し、信頼性とパフォーマンスを向上させることができます。一部の組み込みシステムは大量生産されており、規模の経済の恩恵を受けています。
組み込みシステムの規模は、デジタル時計やMP3 プレーヤーなどの携帯用パーソナル デバイスから、家電製品、産業用組立ライン、ロボット、輸送車両、信号コントローラ、医療用画像システムなどの大型マシンまで多岐にわたります。多くの場合、組み込みシステムは、航空機の航空電子工学や宇宙船の宇宙電子工学など、他のマシンのサブシステムを構成します。工場、パイプライン、電力網などの大規模な施設は、ネットワークで接続された複数の組み込みシステムに依存しています。ソフトウェアのカスタマイズによって一般化されたプログラマブル ロジック コントローラなどの組み込みシステムは、多くの場合、機能ユニットを構成します。
組み込みシステムは、単一のマイクロコントローラ チップを備えた複雑性の低いものから、複数のユニット、周辺機器、ネットワークを備えた非常に複雑で、機器ラック内または長距離通信回線で接続された広大な地理的領域に存在するものまで多岐にわたります。
歴史
背景
マイクロプロセッサとマイクロコントローラの起源は、1960年代初頭に開発されたMOSFET(金属酸化膜半導体電界効果トランジスタ)から製造された集積回路チップであるMOS集積回路にまで遡ります。1964年までに、MOSチップはバイポーラチップよりもトランジスタ密度が高く、製造コストが低くなりました。MOSチップはムーアの法則で予測された速度でさらに複雑化し、 1960年代後半には単一のMOSチップ上に数百個のトランジスタを搭載した大規模集積回路(LSI)に至りました。MOS LSIチップのコンピューティングへの応用は、エンジニアが完全なコンピュータプロセッサシステムを複数のMOS LSIチップに収容できることに気づき始めたため、最初のマイクロプロセッサの基礎となりました。[5]
最初のマルチチップマイクロプロセッサは、1969年のFour-Phase Systems AL1と1970年のGarrett AiResearch MP944で、複数のMOS LSIチップを使用して開発されました。最初のシングルチップマイクロプロセッサは、1971年にリリースされたIntel 4004でした。これは、シリコンゲートMOSテクノロジを使用して、フェデリコ・ファギンが、インテルのエンジニアであるマルシアン・ホフとスタン・メイザー、ビジコムのエンジニアである嶋正敏とともに開発しました。[6]
発達
最初の近代的な組み込みシステムとして認識されるものの 1 つは、1965 年頃にMIT 計測研究所のCharles Stark Draperによって開発されたアポロ誘導コンピュータ[要出典]です。プロジェクト開始当初、アポロ誘導コンピュータは、コンピュータのサイズと重量を減らすために当時新しく開発されたモノリシック集積回路を採用していたため、アポロ計画の中で最もリスクの高いアイテムであると考えられていました。
初期に大量生産された組み込みシステムは、 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))に組み込みシステムを使用しています。医療機器内の組み込みシステムは、多くの場合、産業用コンピュータによって駆動されています。[8]
組み込みシステムは、航空宇宙産業や防衛産業の安全性が極めて重要なシステムに使用されています。IoT の監視や制御のために、オンチップ 3G セルラーやその他の方法を介して有線または無線ネットワークに接続されていない限り、これらのシステムはハッキングから隔離され、より安全になります。 [要出典]火災安全のために、システムはより高い温度に耐え、動作を継続できるように設計できます。セキュリティに対処するために、組み込みシステムは自立型で、電気システムや通信システムの切断に対処できます。
モートと呼ばれる小型ワイヤレス デバイスは、ネットワーク化されたワイヤレス センサーです。ワイヤレス センサー ネットワークは、高度な集積回路(IC) 設計によって可能になった小型化を利用して、完全なワイヤレス サブシステムを高度なセンサーに接続し、人々や企業が物理世界のさまざまなものを測定し、監視および制御システムを通じてその情報に基づいて行動できるようにします。これらのモートは完全に自己完結型で、通常はバッテリーを交換または充電するまで何年もバッテリー ソースで動作します。
特徴
組み込みシステムは、複数のタスクを実行するように設計された汎用コンピュータとは対照的に、特定のタスクを実行するように設計されています。安全性や使いやすさなどの理由から、リアルタイムのパフォーマンス制約を満たす必要があるシステムもあれば、パフォーマンス要件が低いかまったくないシステムもあり、その場合はシステム ハードウェアを簡素化してコストを削減できます。
組み込みシステムは必ずしも独立したデバイスではありません。多くの組み込みシステムは、より一般的な目的を果たす大きなデバイス内の小さな部品です。たとえば、ギブソン ロボット ギターには弦をチューニングするための組み込みシステムが搭載されていますが、ロボット ギターの全体的な目的は音楽を演奏することです。[9]同様に、自動車の組み込みシステムは、自動車自体のサブシステムとして特定の機能を提供します。

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

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

組み込みシステムは、次のような周辺機器を介して外部と通信します。
- シリアル通信インターフェース(SCI):RS-232、RS-422、RS-485など
- 同期シリアルインターフェース: I2C、SPI、SSC、ESSI (拡張同期シリアルインターフェース)
- ユニバーサル シリアル バス(USB)
- メディアカード(SDカード、コンパクトフラッシュなど)
- ネットワークインターフェースコントローラー: Ethernet、WiFiなど
- フィールドバス: CAN バス、LIN バス、PROFIBUSなど
- タイマー:位相ロックループ、プログラム可能なインターバルタイマー
- 汎用入出力(GPIO)
- アナログ-デジタルおよびデジタル-アナログコンバータ
- デバッグ: JTAG、インシステム プログラミング、バックグラウンド デバッグ モード インターフェイスポート、BITP、および DB9 ポート。
ツール
他のソフトウェアと同様に、組み込みシステムの設計者は、コンパイラ、アセンブラ、デバッガを使用して組み込みシステムのソフトウェアを開発します。ただし、より特殊なツールを使用する場合もあります。
- インサーキットデバッガーまたはエミュレーター (次のセクションを参照)。
- プログラムにチェックサムまたはCRC を追加して、組み込みシステムがプログラムが有効かどうかを確認できるようにするユーティリティ。
- デジタル信号処理を使用するシステムの場合、開発者は計算ノートブックを使用して数学をシミュレートする場合があります。
- システムレベルのモデリングおよびシミュレーション ツールは、プロセッサ、メモリ、DMA、インターフェイス、バス、ソフトウェア動作フローなどのハードウェア コンポーネントを含むシステムのシミュレーション モデルを、構成可能なライブラリ ブロックを使用して状態図またはフロー図として構築するのに役立ちます。シミュレーションは、電力とパフォーマンスのトレードオフ、信頼性分析、ボトルネック分析を実行して、適切なコンポーネントを選択するために実行されます。設計者がアーキテクチャを決定するのに役立つ一般的なレポートには、アプリケーションのレイテンシ、デバイスのスループット、デバイスの使用率、システム全体の電力消費量、デバイス レベルの電力消費量などがあります。
- モデルベースの開発ツールは、デジタル フィルター、モーター コントローラー、通信プロトコルのデコード、マルチレート タスクなどのコンポーネントのグラフィカルなデータ フローと UML 状態チャート図を作成およびシミュレートします。
- 特殊なハードウェアを最適化するために、カスタム コンパイラとリンカーが使用される場合があります。
- 組み込みシステムには、独自の特別な言語や設計ツールがあったり、ForthやBasicなどの既存の言語に機能強化が追加されたりすることがあります。
- もう一つの選択肢は、RTOSまたは組み込みオペレーティングシステムを追加することです。
- 多くの場合、状態マシンに基づくモデリングおよびコード生成ツール
ソフトウェア ツールは、さまざまなソースから提供されます。
- 組み込み市場に特化したソフトウェア企業
- GNUソフトウェア開発ツールから移植
- 組み込みプロセッサが一般的なPCプロセッサに近い場合は、パーソナルコンピュータ用の開発ツールを使用できる場合があります。
組み込みシステムの複雑さが増すにつれ、より高レベルのツールやオペレーティング システムが、それが意味のある機械へと移行しつつあります。たとえば、携帯電話、パーソナル デジタル アシスタント、その他の消費者向けコンピューターでは、電子機器の製造元以外の人物が購入または提供する重要なソフトウェアが必要になることがよくあります。これらのシステムでは、サードパーティ ソフトウェア プロバイダーが大規模な市場に販売できるように、 Linux、NetBSD、FreeBSD、OSGi、Embedded Javaなどのオープン プログラミング環境が必要です。
デバッグ
組み込みデバッグは、利用可能な機能に応じて、さまざまなレベルで実行できます。考慮すべき事項には、メイン アプリケーションの速度が低下するかどうか、デバッグ対象のシステムまたはアプリケーションが実際のシステムまたはアプリケーションにどの程度近いか、デバッグ用に設定できるトリガーの表現力 (特定のプログラム カウンター値に達したときにメモリを検査するなど)、デバッグ プロセスで検査できる内容 (メモリのみ、メモリとレジスタなど) などがあります。
最も単純なものから最も洗練されたものまで、デバッグ手法とシステムは、おおよそ次の領域に分類されます。
- 組み込みオペレーティングシステムが提供するシンプルなシェル(Forth や Basic など)を使用した対話型常駐デバッグ
- ソフトウェアのみのデバッガーには、ハードウェアの変更が不要であるという利点がありますが、時間とストレージスペースを節約するために、記録する内容を慎重に制御する必要があります。[10]
- フラッシュ内のモニターを使用するか、異種マルチコアシステムでも機能するRemedy Debuggerなどのデバッグ サーバーを使用して、ログ記録またはシリアル ポート出力を使用して操作をトレースする外部デバッグ。
- インサーキットデバッガ(ICD)は、JTAGまたはNexusインターフェースを介してマイクロプロセッサに接続するハードウェアデバイスです。[11]これにより、マイクロプロセッサの動作を外部から制御できますが、通常はプロセッサの特定のデバッグ機能に制限されます。
- インサーキット エミュレーター(ICE) は、マイクロプロセッサをシミュレートされた同等のものに置き換え、マイクロプロセッサのあらゆる側面を完全に制御できるようにします。
- 完全なエミュレーターは、ハードウェアのあらゆる側面をシミュレートし、ハードウェア全体を制御および変更し、通常の PC でデバッグできるようにします。欠点は、費用がかかり、動作が遅いことです。場合によっては、最終システムよりも最大 100 倍遅くなることもあります。
- SoC設計の場合、FPGAプロトタイプボード上で設計を検証およびデバッグするのが一般的なアプローチです。Certus [12]などのツールは、FPGA実装にプローブを挿入して信号を観察できるようにするために使用されます。これは、ロジックアナライザと同様の機能を備えた実装で、複数のFPGAにわたるハードウェア、ファームウェア、およびソフトウェアの相互作用をデバッグするために使用されます。
外部デバッグに制限されない限り、プログラマーは通常、ツールを使用してソフトウェアをロードして実行し、プロセッサで実行されているコードを表示し、その操作を開始または停止できます。コードのビューは、高水準プログラミング言語、アセンブリ コード、またはその両方の組み合わせとして表示できます。
トレース
リアルタイムオペレーティングシステムは、オペレーティングシステムイベントのトレースをサポートすることがよくあります。システムの動作の記録に基づいて、ホスト PC ツールによってグラフィカル ビューが表示されます。トレースの記録は、ソフトウェア、RTOS、または特別なトレース ハードウェアによって実行できます。RTOS トレースを使用すると、開発者はソフトウェア システムのタイミングとパフォーマンスの問題を把握でき、高レベルのシステム動作を十分に理解できます。組み込みシステムでのトレースの記録は、ハードウェアまたはソフトウェア ソリューションを使用して実現できます。ソフトウェア ベースのトレースの記録には、特殊なデバッグ ハードウェアは必要なく、展開されたデバイスのトレースの記録に使用できますが、CPU と RAM の使用率に影響を与える可能性があります。[13] RTOS 環境で使用されるソフトウェア ベースのトレース方法の 1 つの例は、コード内の戦略的な場所でオペレーティングシステムによって呼び出され、フックとして機能するように実装できる空のマクロの使用です。
信頼性
組み込みシステムは、何年もエラーなく継続的に動作することが期待されるマシンに搭載されることが多く、エラーが発生した場合には自動的に回復する場合もあります。そのため、ソフトウェアは通常、パーソナル コンピュータよりも慎重に開発およびテストされ、ディスク ドライブ、スイッチ、ボタンなどの信頼性の低い機械的な可動部品は使用されません。
具体的な信頼性の問題としては、次のようなものが挙げられます。
- システムを安全にシャットダウンして修理することができない、または修理するにはアクセスが困難すぎる。例としては、宇宙システム、海底ケーブル、航行標識、掘削孔システム、自動車などが挙げられます。
- 安全上の理由から、システムは稼働し続けなければなりません。障害が発生した場合に機能が低下することは許容できない場合があります。多くの場合、バックアップはオペレータによって選択されます。例としては、航空機のナビゲーション、原子炉制御システム、安全上重要な化学工場の制御、列車の信号などがあります。
- 電話交換機、工場制御、橋とエレベーターの制御、資金移動とマーケット メイク、自動販売とサービスなどのシステムが停止すると、多額の損失が発生します。
メモリ リークなどのソフトウェア バグとハードウェアの ソフトエラーの両方のエラーから回復するために、さまざまな手法が、場合によっては組み合わせて使用されます。
- ソフトウェアがウォッチドッグサブシステムに定期的に通知しない限り、システムをリセットして再起動するウォッチドッグタイマー
- トラステッドコンピューティングベース(TCB)アーキテクチャで設計することで、非常に安全で信頼性の高いシステム環境が保証されます[14]
- 組み込みシステム用に設計されたハイパーバイザーは、サブシステムコンポーネントに対して安全なカプセル化を提供できるため、侵害されたソフトウェアコンポーネントが他のサブシステムや特権レベルのシステムソフトウェアに干渉することはできません。[15]このカプセル化により、障害がサブシステム間で伝播するのを防ぎ、信頼性が向上します。また、障害検出時にサブシステムを自動的にシャットダウンして再起動することも可能になります。
- 免疫を考慮したプログラミングは、エンジニアがより信頼性の高い組み込みシステムコードを作成するのに役立ちます。[16] [17] MISRA C/C++などのガイドラインとコーディングルールは、さまざまな方法で開発者が信頼性の高い移植可能なファームウェアを作成できるようにすることを目指しています。通常、実行時エラー(メモリリーク、無効なポインタの使用)につながる可能性のあるコーディング手法を推奨または禁止すること、実行時チェックと例外処理(範囲/サニティチェック、ゼロ除算とバッファインデックスの妥当性チェック、ロジックチェックのデフォルトケース)の使用、ループの境界設定、人間が読める、適切にコメントされ、適切に構造化されたコードの生成、コンパイラによる不整合や副作用(式の評価順序、再帰、特定の種類のマクロ)につながる可能性のある言語の曖昧さの回避などです。これらのルールは、多くの場合、機能検証の目的でコード静的チェッカーまたは境界モデルチェックと組み合わせて使用でき、コードタイミングプロパティの決定にも役立ちます。[16]
ボリュームの多さと低さ
携帯電話などの大量生産システムの場合、コストを最小限に抑えることが通常、設計上の主な考慮事項となります。エンジニアは通常、必要な機能を実装するのに十分なハードウェアを選択します。
少量生産またはプロトタイプの組み込みシステムの場合、プログラムを制限したり、オペレーティング システムを RTOS に置き換えたりすることで、汎用コンピュータを適応させることができます。
組み込みソフトウェアアーキテクチャ
1978年に全米電気工業会は、シングルボードコンピュータ、数値制御、イベントベースコントローラ など、ほぼすべてのコンピュータベースのコントローラを含む、プログラマブルマイクロコントローラの標準であるICS 3-1978をリリースしました[18] 。
一般的に使用されているソフトウェア アーキテクチャにはいくつかの異なるタイプがあります。
シンプルな制御ループ
この設計では、ソフトウェアには入力デバイスを監視するループが 1 つだけあります。ループはサブルーチンを呼び出し、各サブルーチンはハードウェアまたはソフトウェアの一部を管理します。そのため、これは単純な制御ループまたはプログラムされた入出力と呼ばれます。
割り込み制御システム
一部の組み込みシステムは、主に割り込みによって制御されます。つまり、システムによって実行されるタスクは、さまざまな種類のイベントによってトリガーされます。たとえば、割り込みは、事前に定義された間隔でタイマーによって生成されたり、シリアル ポート コントローラーによってデータを受信するなどして生成されます。
このアーキテクチャは、イベント ハンドラのレイテンシを低く抑える必要があり、イベント ハンドラが短くて単純な場合に使用されます。これらのシステムは、メイン ループでも単純なタスクを実行しますが、このタスクは予期しない遅延にあまり影響されません。割り込み ハンドラは、キュー構造に長いタスクを追加することがあります。その後、割り込み ハンドラが終了した後、これらのタスクはメイン ループによって実行されます。この方法により、システムは個別のプロセスを持つマルチタスク カーネルに近づきます。
協調的なマルチタスク
協調型マルチタスクは、ループがAPIに隠されていることを除いて、単純な制御ループ方式と非常によく似ています。[3] [1]プログラマーは一連のタスクを定義し、各タスクは実行するための独自の環境を取得します。タスクがアイドル状態のときは、アイドルルーチンを呼び出し、別のタスクに制御を渡します。
利点と欠点は制御ループの場合と似ていますが、新しいタスクを記述するかキューに追加するだけで、新しいソフトウェアを簡単に追加できる点が異なります。
プリエンプティブマルチタスクまたはマルチスレッド
このタイプのシステムでは、低レベルのコードが、割り込みを呼び出すタイマーに基づいてタスクまたはスレッドを切り替えます。これは、システムがオペレーティング システム カーネルを備えていると一般的にみなされるレベルです。必要な機能の量に応じて、概念的に並列に実行される複数のタスクを管理する複雑さが多少生じます。
コードは他のタスクのデータを損傷する可能性があるため (メモリ管理ユニットを使用するシステムを除く)、プログラムは慎重に設計およびテストする必要があり、共有データへのアクセスはメッセージ キュー、セマフォ、非ブロッキング同期スキームなどの同期戦略によって制御する必要があります。
このような複雑さのため、組織では既製のRTOSを使用するのが一般的であり、アプリケーションプログラマーはオペレーティングシステムのサービスではなくデバイスの機能に集中することができます。しかし、RTOSを組み込むという選択には、アプリケーション開発プロセスを開始する前に選択する必要があるため、独自の問題が伴います。このタイミングにより、開発者は現在の要件に基づいてデバイスの組み込みオペレーティングシステムを選択する必要があり、将来の選択肢が大幅に制限されます。[19]
シリアル、USB、TCP/IP、Bluetooth、無線LAN 、トランク無線、複数のチャネル、データと音声、拡張グラフィックス、複数の状態、複数のスレッド、多数の待機状態などの周辺機器やタスクを管理するデバイスが必要になるため、組み込みシステムの複雑さのレベルは継続的に高まっています。これらの傾向により、RTOSに加えて 組み込みミドルウェアの採用が進んでいます。
マイクロカーネルとエクソカーネル
マイクロカーネルはメモリを割り当て、CPU をさまざまな実行スレッドに切り替えます。ユーザー モード プロセスは、ファイル システム、ネットワーク インターフェイスなどの主要な機能を実装します。
エクソカーネルは通常のサブルーチン呼び出しによって効率的に通信します。システム内のハードウェアとすべてのソフトウェアは、アプリケーション プログラマーが利用でき、拡張可能です。
モノリシックカーネル
モノリシック カーネルは、組み込み環境に適した高度な機能を備えた比較的大きなカーネルです。これにより、プログラマーはLinuxやMicrosoft Windowsなどのデスクトップ オペレーティング システムと同様の環境を利用できるようになるため、開発の生産性が非常に高くなります。欠点としては、必要なハードウェア リソースがかなり多く、コストが高くなることが多く、カーネルが複雑なため、予測可能性と信頼性が低くなることがあります。
組み込みモノリシック カーネルの一般的な例としては、組み込み Linux、VXWorks、Windows CEなどがあります。
ハードウェアのコストが増加しているにもかかわらず、このタイプの組み込みシステムは、特にワイヤレス ルーターやGPS ナビゲーション システムなどのより強力な組み込みデバイスで人気が高まっています。
追加のソフトウェアコンポーネント
多くの組み込みシステムには、コア オペレーティング システムに加えて、追加の上位層ソフトウェア コンポーネントがあります。これらのコンポーネントには、CAN、TCP/IP、FTP、HTTP、HTTPSなどのネットワーク プロトコル スタックや、 FATやフラッシュ メモリ管理システムなどのストレージ機能が含まれます。組み込みデバイスにオーディオおよびビデオ機能がある場合は、適切なドライバーとコーデックがシステムに存在します。モノリシック カーネルの場合、これらのソフトウェア レイヤーの多くはカーネルに含まれている可能性があります。RTOS カテゴリでは、追加のソフトウェア コンポーネントが利用できるかどうかは、商用提供によって異なります。
ドメイン固有のアーキテクチャ
自動車分野では、AUTOSAR は組み込みソフトウェアの標準アーキテクチャです。
参照
注記
- ^ MicroVGA の詳細については、この PDF を参照してください。
参考文献
- ^ ab Michael Barr . 「組み込みシステム用語集」。Neutrinoテクニカル ライブラリ。2007年 4 月 21 日閲覧。
- ^ Heath, Steve (2003).組み込みシステム設計. 設計エンジニアのためのEDNシリーズ(第2版). Newnes. p. 2. ISBN 978-0-7506-5546-0
組み込みシステムとは
、1 つの機能または一連の機能を制御するために構築された
マイクロプロセッサベースのシステムです。
- ^ ab Michael Barr、Anthony J. Massa (2006)。「入門」。組み込みシステムのプログラミング: C および GNU 開発ツールを使用。O'Reilly。pp. 1–2。ISBN 978-0-596-00983-0。
- ^ Barr, Michael (2009 年 8 月 1 日). 「Real men program in C」. Embedded Systems Design . TechInsights (United Business Media). p. 2. 2009 年 12 月 23 日閲覧。
- ^ Shirriff, Ken (2016年8月30日). 「最初のマイクロプロセッサの驚くべき物語」. IEEE Spectrum . 53 (9). Institute of Electrical and Electronics Engineers : 48–54. doi :10.1109/MSPEC.2016.7551353. S2CID 32003640. 2019年10月13日閲覧。
- ^ 「1971年: マイクロプロセッサがCPU機能を1つのチップに統合」。シリコンエンジン。コンピュータ歴史博物館。 2019年7月22日閲覧。
- ^ 「電子フロンティア財団」。電子フロンティア財団。
- ^ 組み込みシステム Dell OEM ソリューション | Dell Archived 2013-01-27 at the Wayback Machine . Content.dell.com (2011-01-04). 2013-02-06 に取得。
- ^ David Carey (2008-04-22). 「Under the Hood: Robot Guitar には自動チューニングが組み込まれている」。Embedded Systems Design。2008-07-08のオリジナルからアーカイブ。
- ^ Tancreti, Matthew; Sundaram, Vinaitheerthan; Bagchi, Saurabh; Eugster, Patrick (2015). 「TARDIS」。第14 回センサーネットワーク情報処理国際会議の議事録。IPSN '15。ニューヨーク、ニューヨーク、米国: ACM。pp. 286–297。doi : 10.1145 /2737095.2737096。ISBN 9781450334754.S2CID 10120929 。
- ^ Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). 「Aveksha」。第9 回 ACM 組み込みネットワーク センサー システム カンファレンスの議事録。SenSys '11。ニューヨーク、NY、米国: ACM。pp. 288–301。doi : 10.1145 /2070942.2070972。ISBN 9781450307185. S2CID 14769602。
- ^ 「Tektronix がプロトタイピングを刷新、組み込み計測器がボードをエミュレーターの地位に押し上げる」 Electronic Engineering Journal、2012 年 10 月 30 日。2012年 10 月 30 日閲覧。
- ^ クラフト、ヨハン;ウォール、アンダース。キーンル、ホルガー (2010)、バリンジャー、ハワード。ファルコーネ、イーリーズ。フィンクバイナー、ベルント。 Havelund、Klaus (編)、「組み込みシステムのトレース記録: 5 つの産業プロジェクトから学んだ教訓」、Runtime Verification、vol. 6418、ベルリン、ハイデルベルク: Springer Berlin Heidelberg、pp. 315–329、doi :10.1007/978-3-642-16612-9_24、ISBN 978-3-642-16611-2、 2022-08-16取得
- ^ Heiser, Gernot (2007年12月). 「あなたのシステムは安全ですか? 証明してください!」(PDF) . ;login: . 2 (6): 35–8. 2014年11月29日時点のオリジナルよりアーカイブ(PDF) 。
- ^ Moratelli, C; Johann, S; Neves, M; Hessel, F (2016). 「セキュアな IoT アプリケーションの設計のための組み込み仮想化」。第27 回国際ラピッド システム プロトタイピング シンポジウムの議事録: 仕様からプロトタイプまでのパスの短縮。pp. 2–6。doi : 10.1145 /2990299.2990301。ISBN 9781450345354. S2CID 17466572 . 2018年2月2日閲覧。
- ^ ab Short, Michael (2008 年 3 月)。「信頼性の高いリアルタイム組み込みシステムの開発ガイドライン」。2008 IEEE/ACS 国際コンピュータ システムおよびアプリケーション カンファレンス。pp. 1032–1039。doi : 10.1109 / AICCSA.2008.4493674。ISBN 978-1-4244-1967-8.S2CID 14163138 。
- ^ Motor Industry Software Reliability Association. 「MISRA C:2012 第3版、第1改訂版」。2022年2月3日閲覧。
- ^ 「FAQ: プログラマブル コントローラ」(PDF) 。2020年 1 月 10 日閲覧。
- ^ 「複数の組み込みプラットフォームでの作業」(PDF) . clarinox. 2011-02-19 にオリジナルからアーカイブ(PDF)されました。2010-08-17に取得。
さらに読む
- John Catsoulis (2005 年 5 月)。組み込みハードウェアの設計、第 2 版。O'Reilly。ISBN 0-596-00755-8。
- James M. Conrad、Alexander G. Dean (2011 年 9 月)。組み込みシステム、Renesas RX62N マイクロコントローラを使用した入門。Micrium。ISBN 978-1935-7729-96。
- Klaus Elk (2016 年 8 月)。モノのインターネット向け組み込みソフトウェア開発の基礎、テクノロジ、ベスト プラクティス。CreateSpace 独立出版プラットフォーム。ISBN 978-1534602533。
外部リンク
- mbed YouTube を使用した組み込みシステム コース、2015 年から継続中
- サイバーセキュリティと組み込みシステムの動向 Dan Geer、2013 年 11 月
- 最新の組み込みシステムプログラミングビデオコース YouTube、2013 年から継続中
- 組み込みシステムウィーク(ESWEEK)は、組み込みシステムとソフトウェアのあらゆる側面を網羅するカンファレンス、ワークショップ、チュートリアルが開催される毎年恒例のイベントです。
- Wayback Machineの組み込みおよびサイバーフィジカルシステム教育に関するワークショップ(2018-02-11 アーカイブ)、組み込みシステムの教育的側面を扱ったワークショップ
- 組み込みシステムの開発 - ツールの紹介
