組み込みシステム() は、特定の機能とリアルタイム コンピューティングパフォーマンスを備えた機械または電気システムに組み込まれたコンピューターシステムです。組み込みシステムは、多くの一般的なデバイスを効率的に制御するためによく使用され、通常、組み込みシステムはデジタル ハードウェアと機械コンポーネント (自動車のアンチロック ブレーキ システムなど) を含む完全なデバイスです。それに対して、パーソナル コンピュータなどの汎用コンピュータは、設計が柔軟であり、さまざまなコンピューティング状況をインテリジェントに処理して、多数のエンド ユーザーのさまざまなニーズを満たすことができます。
Soekris net4801、Web アプリケーションに最適
最新の組み込みシステムは通常、マイクロコントローラー(統合メモリや周辺インターフェイスを備えた中央処理装置など)に基づいていますが、より複雑なシステムでは通常のマイクロプロセッサ (外部メモリ チップや周辺インターフェイス回路を使用) も非常に一般的です。汎用プロセッサ、特定の種類の計算に特化したプロセッサ、ハンドヘルド アプリケーション用のカスタム設計プロセッサなどはすべて組み込みシステムに適用できます。一般的な専用プロセッサはデジタル シグナル プロセッサです。
組み込みシステムの主な特徴は、特定のタスクを処理することであるため、エンジニアはそれを最適化して製品のサイズとコストを削減し、信頼性とパフォーマンスを向上させることができます。
組み込みシステムの物理的形態には、歩数計、電子時計、MP3プレーヤーなどのポータブル デバイス、信号機、工場のコントローラーなどの大型固定設備、ハイブリッド車、磁気共鳴画像装置、アビオニクスなどの大規模で複雑なシステムが含まれます。その複雑さは、単一のチップから、複数のコンポーネント、周辺機器、およびネットワークを備えた大型のシャーシまたはハウジングまで多岐にわたります。
組み込みシステムの例
組み込みシステムは、民生用、料理用、産業用、オートメーション、医療用、商業用、軍事用のアプリケーションで一般的に使用されています。
- 電気通信システム
ネットワーク レベルの電話交換機からモバイル端末まで、多数の組み込みシステムが導入されています。
- 家電
これらには、 PDA、MP3プレーヤー、携帯電話、ゲーム機、デジタル カメラ、DVDプレーヤー、GPS受信機、プリンターが含まれます。
- ホームアプリケーション
組み込みシステムは、電子レンジ、洗濯機、食器洗い機で柔軟性、効率性、機能性を実現するために使用されています。高度なHVACシステムは、ネットワーク化されたサーモスタットを使用して、日または季節ごとに温度をより正確かつ効率的に制御します。スマート ホームでは、組み込みのデバイスが感知して制御します。有線および無線ネットワークを通じて、照明、温度と湿度、セキュリティ、音声とビデオ、モニタリングなどを制御します。
- 交通システム
慣性ナビゲーション システム、全地球衛星測位受信機などの高度なアビオニクスは、安全性がかなり要求される航空機で使用され、電気/電子モーター コントローラーは、DC ブラシレス モーター、非同期モーター、DC モーターなどのさまざまなモーター、自動車、電気自動車、ハイブリッド車で使用されています。エネルギーを節約し、排出ガスを削減するために、組み込みシステムの使用が増えています。アンチロック ブレーキ システム、横滑り防止システム、トラクション コントロール システム、自動四輪駆動システムなど、その他の自動車安全システムも含まれます。
- 医療機器
バイタルサイン監視のための組み込みデバイス、音響増幅のための電子聴診器、および非侵襲的な内部検査のためのさまざまな医療画像システム (陽電子放出断層撮影、単光子放出コンピュータ断層撮影、コンピュータ断層撮影、磁気共鳴画像法)の使用;医療機器への組み込みシステム通常は産業用コンピューターを使用します。
組み込みシステムは、輸送、防火、セキュリティ、医療、生命に関わるシステムで使用されており、ハッカーなどから隔離できるため信頼性が高くなります。火災安全において、システムは高温環境でも継続的に動作するように設計されています。組み込みシステムは自己完結型であり、安全上の理由から電気および通信システムが遮断された状況にも対処できます。
WSN分野の発展により、新しいタイプの小型無線デバイスであるスマート モートの急速な普及が促進されました。人々は、情報監視および制御システムを通じて、物理世界の無数のものを認識し、行動することができます。Mote は微細製造技術を使用し、高度なIC設計技術を通じて無線サブシステムと最先端のセンサーを組み合わせ、情報監視および制御システムを通じて人々が物理世界の無数のものを認識し、行動できるようにします。これらのモートは完全に自給自足しており、通常、バッテリの交換や再充電が必要になるまで何年も機能し続けます。
内蔵Wi-Fiモジュールを使用すると、もともとシリアル ポート経由で通信していたデバイスでも簡単にワイヤレス通信を有効にすることができます。
歴史
MIT 計測研究所の Charles Stark Draper によって開発された Apollo Guide Computer は、現代の組み込みシステムのプロトタイプの 1 つでした。サイズと重量を削減するためにモノリシック集積回路の最新開発が使用されていたため、プロジェクトの初期段階では、この部分が最もリスクの高い部分であると考えられていました。
最初の量産組み込みシステムは、1961 年にリリースされたミニットマンIミサイル内のD-17自動誘導コンピューターでした。1966 年にミニットマンIIミサイルの生産が開始されたとき、 D-17 は初めて集積回路を広範囲に使用した新しいタイプのコンピューターにアップグレードされました。このプロジェクトだけで、アンチゲートモジュールの単価が1,000ドルから3ドルに下がり、商用製品で使用できるほど十分に低くなりました。
1960 年代のこれらの初期アプリケーションの結果、組み込みシステムの価格が下がっただけでなく、処理能力と機能も劇的に向上しました。最初のシングルチップ マイクロコンピュータであるIntel 4004 を例に挙げると、電卓やその他の小型システム用に設計されましたが、依然として外部メモリと周辺チップが必要でした。1978年、全米エンジニアリング製造業者協会は、シングルボード コンピューター、数値制御デバイス、イベント ベースのコントローラーなど、ほぼすべてのコンピューター ベースのコントローラーをカバーする、プログラマブル マイクロコントローラーに関する「規格」を発行しました。
マイクロコントローラーやマイクロプロセッサーの価格が下がるにつれて、消費者向け製品も、ポテンショメーターや可変コンデンサーなどのボタンベースのアナログ
1980 年代初頭までに、メモリ、入出力コンポーネントがプロセッサに統合され、シングルチップ マイクロコンピュータが誕生しました。汎用コンピュータのコストが高すぎるアプリケーションでは、代わりにマイクロコントローラが使用されます。
低コストのマイクロコントローラーは、多くの個々のコンポーネントを置き換えるようにプログラムすることができ、そのような組み込みシステムは従来のソリューションよりも複雑になることがよくありますが、この複雑さの多くはマイクロコントローラー自体にあります。組み込みシステムは周辺コンポーネントをほとんど必要とせず、設計作業のほとんどはソフトウェアに集中しており、ソフトウェア プロトタイプの確立とテストは、組み込みプロセッサを使用しない新しい回路の確立よりも高速です。
特性
複数のタスクを実行できる汎用コンピューターとは異なり、組み込みシステムは特定のタスク用に設計されています。安全性と可用性を確保するためにリアルタイム要件を満たす必要があるシステムもあれば、ハードウェアを簡素化しコストを削減するためにパフォーマンス要件がほとんどまたはまったくないシステムもあります。
組み込みシステムは必ずしもスタンドアロン デバイスであるとは限りません。多くの組み込みシステムは、より一般的な機能を提供するために、より大きなデバイスに組み込まれた小さなコンピューティング コンポーネントで構成されています。たとえば、ギター ロボットは組み込みシステムを使用して弦をチューニングしますが、一般にその設計目的は弦をチューニングすることではなく、音楽を演奏することであり、車載コンピュータは車のサブシステムとして存在し、ナビゲーション、制御、車両状態のフィードバックやその他の機能。
ファームウェアとして知られる組み込みシステム用に書かれたプログラムは、読み取り専用メモリまたはフラッシュ メモリ チップに保存され、少量のメモリ、キーパッド、さらには画面なしなど、限られたハードウェア リソースで実行されます。
ユーザーインターフェース
組み込みシステムのユーザー インターフェイスは、単一のタスクに焦点を当てたユーザー インターフェイスがないものから、最新のデスクトップ オペレーティング システムに似た複雑なグラフィカル ユーザー インターフェイスまで多岐にわたります。
シンプルな組み込みデバイスは、ボタン、LED、グラフィックまたはデジタルLCD、およびシンプルなメニュー システムを使用します。
ハイエンドの組み込みシステムでは、グラフィック ディスプレイとタッチ センシティブ ボタンまたは画面上のエッジ ボタンを組み合わせて、設置面積を最小限に抑え、柔軟性を提供します。ボタンの意味は画面に表示される内容に応じて変化し、必要なオプションを示します。アクション 選択は実現します。ハンドヘルド システムは通常、ディスプレイとジョイスティック ボタンをタッチ デバイスとして使用します。
一部のシステムは、シリアル ポート ( RS-232、USB、I2Cなど) またはネットワーク接続を介してリモートでユーザー インターフェイスを提供します。この方法の利点は、システムのパフォーマンスを拡張し、表示画面のコストを削減し、BSP を簡素化し、PC上にリッチなユーザー インターフェイスを構築できることです。たとえば、組み込みデバイス プラットフォーム ( IPカメラやルーターなど) で実行される組み込み Web サーバーは、カスタム ソフトウェアをインストールする必要がなく、デバイスに接続されているPC上のWeb ブラウザにユーザー インターフェイスを表示します。
組み込みシステム用プロセッサ
組み込みプロセッサは大きく 2 つのカテゴリに分類できます。1 つのタイプは通常のマイクロプロセッサで、独立した集積回路メモリと周辺機器を使用します。もう 1 つのカテゴリは、消費電力、サイズ、コストを削減するオンチップ周辺機器を備えたマイクロコントローラーです。組み込みシステムのソフトウェアは、パーソナル コンピュータのようなエンド ユーザーがインストールする商品ではなく、アプリケーション用にカスタムメイドされているため、さまざまな基本 CPU アーキテクチャ (ヴァン ノイマン タイプ アーキテクチャとさまざまな程度の CPU アーキテクチャの両方) を使用できます。ハーバードアーキテクチャ: RISC プロセッサと非縮小命令セット プロセッサの両方があり、ワード長の範囲は4ビットから64ビット、またはそれ以上で、もちろん最も一般的なものは8/16ビットです。ほとんどのスキーマは、多数の異なるバリアントとタイプを使用して、複数の異なる会社によって作成されています。
組み込みシステムでも汎用マイクロプロセッサが使用されますが、マイクロコントローラよりも多くの周辺回路が必要になります。
組み込みマザーボード
PC/104およびPC/104+ は、小規模で容量の少ない組み込み堅牢システムの標準の 1 つであり、主にx86アーキテクチャに基づいており、通常は標準PCよりも小さいですが、最も単純な8/16ビット組み込みシステムよりは大きくなります。 MSDOS、Linux、NetBSD 、またはMicroC/OS-II 、QNX、VxWorksなどのリアルタイム組み込みオペレーティング システムを使用します。これらのマザーボードは非x86プロセッサも使用している場合があります。
一部のアプリケーションでは、小型サイズと高効率が主な関心事ではないため、x86タイプのPCマザーボードと互換性のある部品を使用できます。VIA EPIAシリーズ ボードは、このギャップを埋めることができ、PCと互換性がありながら高度に統合され、サイズが小さくなったり、組み込みエンジニアにとって非常に魅力的な機能を提供します。このアプローチの利点は、一般的なソフトウェア開発ツールを低コストの商品にも使用できることです。この方法で構築されたシステムは、単一の目的でより大きなデバイスに組み込まれるため、依然として組み込みシステムです。例としては、ATMやビデオ ゲーム機があり、どちらにもそれぞれのアプリケーション用のコードが含まれています。
ほとんどの組み込みマザーボードはPCを中心に設計されておらず、 ISA バスやPCIバスも使用しません。SoCプロセッサを使用する場合、ディスクリート コンポーネントを標準バスに接続することは最善の策ではなく、また、ソフトウェアとハードウェアの開発環境が大きく異なる場合があります。
一般的な設計パターンは、ARMプロセッサや周辺機器、ストレージ用の外部フラッシュ、メモリ用のDRAMなどの高密度BGAチップを収容するために、小型のシステムオンモジュール(おそらく名刺サイズ) を使用することです。モジュール ベンダーは通常、ブート ソフトウェアとオペレーティング システムのオプションを提供しており、通常はLinuxや一部のリアルタイム オペレーティング システムが含まれます。これらのモジュールは、特殊なテスト方法に精通した組織によって大量に生産され、アプリケーション固有の周辺機器を備えたカスタム ボード上で少量ずつ使用されます。
ASICおよびFPGAソリューション
SoC は、非常に大容量の組み込みシステム向けに設計された一般的な構成可能なアレイです。単一チップ内に複数のプロセッサ、乗算器、キャッシュ、インターフェイスが含まれており、ASICまたはフィールド プログラマブル ゲート アレイを通じて実装される完全なシステムを形成します。
周辺機器
組み込みシステムは、周辺機器を通じて外部と通信します。
- シリアルポート: RS-232、RS-422、RS-485など。
- 同期シリアル ポート: I2C、SPI、ESSI など。
- USB
- マルチメディアカード:SDカード、CFカードなど
- ネットワーク:イーサネット、LonWorks など
- フィールドバス:CANバス、LINバス、PROFIBUSなど
- タイマー: PLL、キャプチャ比較モジュールおよび時間処理ユニット
- ディスクリートIO : GPIO
- アナログ-デジタル/デジタル-アナログ変換 ( ADC / DAC )
- デバッグインターフェース: JTAG、ISP、ICSP、BDMポート、BITP、DP9ポートなど。
道具
一般的なコンピューター プログラマーと同様に、組み込みシステム設計者は、コンパイラー、リンカー、およびデバッガーを使用して組み込みシステム ソフトウェアを開発します。ただし、ほとんどのプログラマーにとって馴染みのないツールもいくつか使用します。
ソフトウェア ツールのソースには次のものがあります。
- 組み込みシステム市場に注力するソフトウェア会社
- GNUソフトウェア開発ツールから移植(クロスプラットフォーム コンパイルを参照)
- 場合によっては、組み込みプロセッサが一般的な PC プロセッサによく似ている場合は、PC 開発ツールを使用することも可能です。
組み込みシステムの設計者は、平均的なコンピューター プログラマーには馴染みのないいくつかのソフトウェア ツールも使用します。
- 一般的なツールは「インサーキット エミュレータ」 (ICE、またはインサーキット エミュレータ)、またはより最近の設計では組み込みデバッガです。このデバッグ ツールは、組み込みプログラムを開発するための基本的なテクニックです。マイクロプロセッサを置き換えたり、マイクロプロセッサ内に埋め込んだりして、システム内のテスト コードを迅速に呼び出してデバッグするための便利なツールを提供します。パッドは通常、システムに接続される特別な回路であり、通常はそれらのパッドに接続された PC をデバッグ インターフェイスとして使用します。
- 通常、コネクタにはさまざまなタイプがあります。ほとんどの商用プログラミングでは、リンカはほとんど後付けであり、デフォルト設定が変更されることはありません。対照的に、埋め込みリンカーには完全で洗練されたコマンドライン言語が含まれるのが一般的です。多くの場合、メモリにはさまざまな種類があり、それぞれが特別なコードとデータを保持します。個々のデータ構造を特別なアドレスに配置できるため、ソフトウェアはメモリ マップされた制御レジスタに簡単にアクセスできます。多くの場合、組み込みリンカーには、コード サイズと実行時間を削減するための外部最適化ツールが含まれています。たとえば、サブルーチンの位置を移動して、より小さな呼び出し命令やジャンプ命令を使用する場合があります。これらには、データ スタッキングやバンド スイッチング技術を管理する機能が付属していることが多く、これらは安価な CPU を拡張する方法として組み込みソフトウェアでよく使用されます。
- もう 1 つのよく使用されるツールは、プログラムにコードやCRCを追加するツール プログラム (多くの場合自分で作成したもの) で、このツールを使用すると、組み込みシステムはプログラムを実行する前にプログラム データをチェックできます。
- デジタル信号処理用のソフトウェアを開発する組み込みプログラマーは、数学的シミュレーションにMathCadやMathematicaなどの数学ツールを使用することがよくあります。
- あまり使用されていないツールには、データ ファイルをコードに変換するツールがあります。これを使用すると、プログラムに任意の種類のデータを含めることができます。
- いくつかのプロジェクトでは、特別な信頼性またはデジタル信号処理要件のために同期プログラミング言語を使用しています。
一部のプログラミング言語は、組み込みシステム プログラミングに特別なサポートを提供します。
- C言語については、ISO/IEC TR 18037:2005 で次のように定義されています。
- 指定されたアドレス空間
- 指定されたストレージクラス
- 基本的な入出力のハードウェア アドレッシング
デバッグ
デバッグは通常、インサーキット エミュレータまたはマイクロコントローラのマイクロコード(マイクロコード)内で割り込みを生成できるその他のデバッガを使用して行われます。マイクロコード割り込みにより、デバッガはCPUのみが動作するハードウェア内で動作できるようになり、 CPUベースのデバッガはCPUの観点からコンピュータの回路をテストおよびデバッグできます。PDP-11 はこの機能の先駆者です。
開発者は、多くのデバッグ ツールで利用できるブレークポイント、シングル ステップ、および高級言語のデバッグを引き続き使用できます。さらに、開発者は、リアルタイム イベント シーケンスをデバッグするときに、簡単な記録ツールを記録して使用する必要があります。
この問題に最初に直面した PC およびメインフレームのプログラマーは、設計の優先順位と考えられるアプローチに関して混乱することがよくあります。メンタリング、コードレビュー、無我夢中のプログラミングが推奨されます。
組み込みシステムがより複雑になるにつれて、より高レベルのツールやオペレーティング システムが実行可能なデバイスに徐々に移植されています。たとえば、携帯電話、携帯情報端末、その他の消費者向けコンピュータには、これらの電子機器の製造元以外の個人や企業から購入または提供される重要なソフトウェアが必要です。これらのシステムでは、サードパーティ ソフトウェア プロバイダーが大規模市場でソフトウェアを販売できるように、 Linux、OSGi、Javaなどのオープン プログラミング環境が必要です。
これらの開発環境のほとんどにはPC上で動作するリファレンス デザインがあり、このソフトウェアの大部分は従来の PC で開発できます。ただし、オープン環境から専用の電子デバイスへの移植や電子デバイスのドライバー開発は、通常、依然として従来の組み込みシステム ソフトウェア エンジニアの仕事です。場合によっては、その技術者が集積回路メーカーに勤めている場合もありますが、そういう人は今でもどこかにいます。
オペレーティング·システム
Windows XPを使用したインターネット公衆電話
組み込みシステムには、オペレーティング システム、専用の組み込みオペレーティング システム(多くの場合、リアルタイム オペレーティング システム)、またはこれらの新しいシステムに移植するための指定されたプログラマが存在しないことがよくあります。
起動する
組み込みシステムには、通常、割り込みを無効にし、電子パラメータを設定し、コンピュータ ( RAM 、CPU 、およびソフトウェア) をテストし、アプリケーションの実行を開始するスタートアップ コードが付属しています。多くの組み込みシステムは短時間の停電から回復し、最新のセルフテストを実行せずに再起動することがよくあります。10 分の 1 秒以内に再起動するのが一般的です。
多くの設計者は、LED がエラー状態を示すのに非常に役立ち、トラブルシューティングに役立つことを認識しています。一般的に使用されるメカニズムは、リセット時に電子デバイスのすべてのLED を点灯して、電源供給とLEDの通常動作を示すことです。その後、 LEDの状態はPOST中にソフトウェアによって変更され、その後、ソフトウェアはこれらの LED を使用します。動作プロセスの正常または障害状態を示すLED 。これにより、技術者、エンジニア、ユーザーにシステムのステータスに関する情報が常に提供されます。興味深い例外は、注意を引いたり故障状態を示したりするために点滅するライトを備えた電力メーターやその他の一部の街路製品です。
内部セルフテスト
多くの組み込みシステムには、ある程度または複数の内部電源投入時セルフテストが備わっています。セルフテストにはいくつかの種類があります。
- コンピュータチェック: CPU、RAM、プログラムメモリをチェックします。これらのチェックは通常、電源投入時に開始され、一部の安全性が重要なシステムでは、通常、安全な間隔で定期的に、または一定期間にわたって実行されます。
- 周辺機器のチェック: 入力をシミュレートしてデータを読み込むか、出力データを測定します。このような非常に安価なチェック機能を備えた通信、シミュレーション、制御システムはたくさんあります。
- 電源チェック: 通常は各電源回路をテストし、場合によってはバッテリまたは主電源入力もチェックします。通常、電源部分の負荷は非常に大きく、余裕がほとんどないため、このチェックは非常に意味があります。
- 通信チェック:インターネット上のICMPメッセージ「ping」などを使用して、接続されたユニットから受信した単純なメッセージを確認します。
- ケーブル検査:検査対象のケーブルにワイヤーを接続し、検査針を示します。電話などの同期通信システムでは、多くの場合「同期」テストが使用されます。ケーブル検査は安価ですが、ユニットセクションにプラグがある場合は特に重要です。
- 機器チェック: 多くの場合、システムは設置中に調整する必要があり、このチェックにより設置者にステータスが示されます。
- 消費量チェック: システムが消費している量をチェックし、クォータが低すぎる場合は警告します。最も一般的な例は車の燃料計であり、おそらく最も複雑な例は、化学反応物の詳細な状態を維持する自動医療分析システムです。
- 稼働チェック:ユーザーが気になるシステムの稼働状況をチェックします。当然のことながら、このチェックはシステムの稼働中に実行する必要があり、このチェックには飛行機の航法計器、車の速度計、ディスクの表示灯が含まれます。
- 安全性チェック: システムの信頼性が維持されていることを確認するために、「安全期間」内にチェックが行われます。安全な制限時間は通常、損傷が発生する可能性がある最小時間よりも短いです。
信頼性システム
ユーザーのニーズに応じて、信頼性の定義は異なります。興味深いことに、信頼性のタイプは比較的少ないです。同様の信頼性タイプを持つシステムは、同様のタイプの内部チェックおよび回復方法を使用します。
- システムは非常に危険であるか、修復不可能です。これには、宇宙システム、水中ケーブル、ナビゲーション ビーコン、掘削システム、そして非常に奇妙なことに自動車や大量生産製品が含まれます。一般に、組み込みシステムは個々のサブシステムを監視し、オンラインで冗長部品に切り替えるか、「リンプ モード」で動作して部分的な機能を提供します。自動車、パソコン、プリンターなどの大量生産された消費者製品も、購入価格に比べて修理費用が高く、修理業者に長距離を要するため、このカテゴリーに分類されます。
- システムを安全に停止できません。これには、前述したように、航空機のナビゲーション、反応制御システム、重要な化学プラントの安全制御、鉄道信号、単発航空機のエンジンが含まれますが、「リンプ モード」は許容範囲が低く、多くの場合、オペレーターはバックアップ システムを選択する必要があります。
- システムがダウンすると多額のお金が失われます。これらには、電話交換機、工場制御、橋梁とエレベーターの制御、送金、市場開発、自動化された販売とサービスなどが含まれます。これらのシステムには、実行/非実行テストが行われることが多く、オンライン冗長性があるか、代替システムが使用されることがよくあります。および手動プロセス リンプモード。
- システムが危険な状態では操作しないでください。上記と同様に、システムの運用により多額の金銭的損失が発生します。医療機器、エンジンなどのホットバックアップを備えた航空機、化学プラント制御、自動株取引、ゲームシステムなど。テストにはさまざまな種類がありますが、何か問題が発生した場合にできることは、システム全体を停止することです。
組み込みソフトウェア アーキテクチャの種類
一般的に使用される組み込みソフトウェア アーキテクチャには、いくつかの異なる基本タイプがあります。
制御ループ
この設計では、ソフトウェアにはサブルーチンを呼び出す単純なループがあり、各サブルーチンはハードウェアまたはソフトウェアの一部を管理します。割り込みは、ソフトウェアの他の部分が読み取ることができるフラグを設定したり、スクラッチパッドを更新したりするためによく使用されます。
システムは、単純なAPIを使用して割り込み設定を有効または無効にします。適切に処理されれば、ネストされたサブルーチン内のネストされた呼び出しを処理でき、最も外側の割り込みにより、ネストは以前の割り込み状態を復元できます。この方法は、 Exokernelを実装する最も簡単な方法の 1 つです。
通常、ループには、定期的な即時割り込みを使用してソフトウェア タイマーのセットを制御するためのサブルーチンがいくつかあります。タイマーが期限切れになると、対応するサブルーチンが実行されるか、対応するフラグが設定されます。
発生する可能性のあるハードウェア イベントは、ソフトウェア タイマーによって裏付けられる必要があります。ハードウェア イベントは、エラー数兆に 1 回程度発生します。これは、最新のハードウェアおよび大量生産された数百万台のハードウェアでは、年に 1 回程度です。ソフト タイマーを省略すると、商業的に悲惨な結果になる可能性があります。ほとんどのデバイス。
場合によっては、テスト ソフトウェアが、ハードウェアのウォッチドッグ タイマーを定期的にリセットする一連のソフトウェア ベースの安全タイマーを実行することがあります。ソフトウェアがイベントを見逃した場合、セーフティ タイマー ソフトウェアがイベントを捕捉します。安全タイマーが失敗すると、ウォッチドッグ ハードウェアがシステムをリセットします。
ステート マシンは、各ステート マシン関数へのポインターを使用して実装でき、関数はC++、C、またはアセンブリ言語で実装できます。状態の変化によりさまざまな関数がインジケーターに組み込まれ、関数インジケーターはループが実行されるたびに実行されます。
多くの設計者は、ロジックが一貫したパラメーターで実行されるように、ループごとに I/O デバイスを読み取り、結果を保存することを推奨しています。
多くの設計者は、各ステートが 1 つまたは 2 つのこと (通常はハードウェア イベントとソフトウェア タイマー) だけをチェックするようにステート マシンを設計することを好みます。
設計者は、上位レベルが正しい情報で動作できるように、マルチレベル ステート マシンでは上位レベルのステート マシンよりも先に下位レベルのステート マシンを実行する必要があると提案しています。
内燃制御などの複雑な機能は通常、多次元テーブルに従って処理されます。コードは通常、複雑な計算を行わずにテーブル検索処理を実行します。ソフトウェアはエントリ間のデルタ計算を実行して、テーブルのサイズとコストを削減できます。
最小のマイクロコントローラ、特に128バイトのスタックしか持たない8051では、制御ループにより、優れたリンカが静的に割り当てられたデータでローカル変数を上書きできます。このメカニズムでは、イオン プロシージャ コール ツリーの終わりに近い変数ほど、より高いメモリ アドレスを取得します。新しいブランチを開始するとき、その変数は前のブランチによって残されたスペースに再分配できます。
単純な制御ループの主な欠点は、特定のハードウェア イベントに応答する時間が保証されていないことです。
注意深く設計すると、割り込みが長期間無効にならないように簡単に保証できるため、割り込みコードを非常に正確な時間に実行できます。
制御ループのもう 1 つの大きな欠点は、新しい機能を追加する際の複雑さです。長時間かかるアルゴリズムは、一度にほんの一部だけがメイン ループで実行されるように慎重に分割する必要があります。
このシステムの利点はそのシンプルさであり、非常に小さなソフトウェアではループは非常に高速に実行され、それが予測不可能であることをほとんど誰も気にしません。
もう 1 つの利点は、この種のシステムは実行中のソフトウェアの品質を保証し、悪い実行結果を他のオペレーティング システムのせいにすることができないことです。
非プリエンプティブタスク
非プリエンプティブ タスクシステムは、このループがAPIに隠されている点を除いて、上記のシステムと非常に似ています。一連のタスクを定義し、それぞれが独自のサブルーチン スタックを取得し、タスクがアイドル状態になると、アイドル状態のサブルーチンを呼び出します (通常は、「 pause 」、「wait 」、「yield 」などを呼び出します)。
同様のプロパティを持つアーキテクチャには、キュー リストのフィールドに基づいてサブルーチンをいつ削除して呼び出すかを決定するループを備えたイベント キューがあります。
このアーキテクチャの長所と短所は制御ループと非常に似ていますが、この方法では新しいソフトウェアを追加するのが簡単で、単に新しいタスクを作成するか、キュー インタープリタに追加するだけです。
プリエンプティブタイマー
上記のシステムのいずれかを使用しますが、タイマー割り込みでサブルーチンを実行するタイマー システムを追加すると、まったく新しい機能がシステムに追加され、初めてタイマー サブルーチンが保証された時間内で実行できるようになります。
また、初めて、コードが予期しないタイミングで独自のデータ構造にアクセスできるようになります。タイマー サブルーチンは、割り込みサブルーチンと同様に処理する必要があります。
プリエンプティブタスク
上記の非プリエンプティブ タスク システムを使用して、プリエンプティブ タイマーまたはその他の割り込みから実行します。
その後、システムは突然大きく異なります。1 つのタスクのコードは他のタスクのデータに損傷を与える可能性があるため、タスクをシャーディングする必要があります。共有データへのアクセスは、メッセージ キュー、セマフォ、ノンブロッキング同期メカニズムなどの同期戦略を使用して制御する必要があります。
多くの場合、開発組織はこのステップでリアルタイム オペレーティング システムを購入します。組織にオペレーティング システムを作成できる人材が不足している場合、またはオペレーティング システムを複数の製品の上に置く予定の場合、これは賢明な選択となる可能性があります。これにより通常、開発スケジュールに 6 ~ 8 週間が追加され、プログラマーが遅れのせいにできるまでずっと時間がかかります。
マイクロカーネルとエクスカーネル
このアプローチは、同様の機能を提供しながら、モノカーネルよりも構成しやすいようにシステムを編成しようとします。
マイクロカーネルは、リアルタイム オペレーティング システムを論理的に発展させたもので、通常、オペレーティング システム カーネルがメモリを割り当て、異なるスレッド間でCPUを切り替えるように構成されています。ユーザー モード プロセスは、ファイル システムやユーザー インターフェイスなどの主要な機能を実装します。
マイクロカーネルは 1950 年代に初めて試みられましたが、コンピュータのタスク間の切り替えやタスク間でのデータ交換が非常に遅かったため、マイクロカーネルは放棄され、MULTICS および UNIX スタイルの大きなカーネルが採用されました。一般に、マイクロカーネルは、タスクの切り替えやタスク間の通信が速い場合には比較的成功し、遅い場合には失敗します。
アウターコアでの通常のサブルーチンコールを使用することで得られる通信効率は非常に高く、システム内のハードウェアとソフトウェアはプログラマによって使用および拡張できます。リソース カーネル (ライブラリの一部である可能性があります) は、CPU時間、メモリ、およびその他のリソースを割り当てます。マルチタスク、ネットワーキング、ファイルシステムなどの大規模なカーネル機能は、コード ベースを通じて提供されます。ライブラリは動的にリンク、拡張、または共有できます。異なるアプリケーションは異なるライブラリを使用することもありますが、すべてのリソースはリソース カーネルから取得されます。
仮想マシン
一部のアビオニクス システムでは、複数の市販コンピューターを使用します。これはさらに一歩進んで、各コンピューターがそれ自体の複数のコピーをシミュレートし、重要なプログラムが複数のコンピューター上で同時に実行および投票します ()。
シミュレーション環境の利点は、コンピューターに障害が発生した場合でも、ソフトウェアの別のルーチンを正常に動作するソフトウェア パーティションに移行でき、投票数には影響しないことです。
仮想ソフトウェアは通常、コンピュータのユーザー モードで実行され、ユーザー モードでは実行されないハードウェア アクセスと命令をキャプチャしてシミュレートします。
チェックポイントの計算
もう 1 つの一般的に使用されるメカニズムは、2 台のコンピューターが少し計算し、その時点までの計算結果を報告することです。コンピューターの計算がおかしい場合は、コンピューターの電源がオフになります。
Office (マクロカーネル) オペレーティング システム
この種のシステムは通常、システム資金のない組み込みプロジェクトで人気がありますが、この記事の複数の著者によると、これは一般に真実ではなく、彼らの論理は次のとおりです。
- オペレーティング システムは、特別にパッケージ化された再利用可能なコードのライブラリです。これらのコードが役立つ場合、設計者は時間とお金を節約できますが、そうでない場合は役に立ちません。
- ビジネス システムのオペレーティング システムには、組み込みハードウェアへのインターフェイスがありません。たとえば、Linux を使用してモーター コントローラーや電話交換機を作成したい場合、実際の制御操作のほとんどは IOCTL 呼び出しであり、同時に、通常の読み取り、書き込み、クエリ インターフェイスは役に立ちません。したがって、オペレーティング システムは実際の開発にとって大きな障害となります。
- ほとんどの組み込みシステムはオフィスでの作業を行わないため、オフィスのオペレーティング システム コードのほとんどが無駄になります。たとえば、ほとんどの組み込みシステムはファイル システムや画面を使用しないため、ファイル システムや GUI 部分は無駄になり、これらの未使用のコードはシステムの信頼性に影響を与えるだけです。
- Office オペレーティング システムはユーザー プログラムからハードウェアを保護するため、組み込み開発の取り組みが著しく妨げられます。
- オペレーティング システムを組み込みシステムに移植する必要があります。つまり、いずれにしてもハードウェア ドライバーを書き換える必要がありますが、これがオペレーティング システムの最も難しい部分でもあるため、そのようなオペレーティング システムを使用する効果はほとんどありません。
- オペレーティング システムの本当に便利で移植可能な機能は、小さなコードです。たとえば、基本的なTCP/IPインターフェイスは約 3000 行のコードであり、別の例はほぼ同じサイズの単純なファイル システムです。これらのコードが必要な設計であれば、著作権料を支払うことなく、組込みシステムの開発コストの10%未満で済み、簡単に書き換えるだけで済みます。システム コードが十分に一般的であれば、通常、組み込みシステム雑誌の表紙の裏で著作権料なしで C 言語実装コードを販売している会社があります。
多くのエンジニアはこれに同意しませんが、組み込みLinux は、特にワイヤレスルーターや全地球測位システムなどの強力な組み込みシステムでますます人気が高まっています。これにはいくつかの理由があります。
- 一般的な組み込みチップに移植された既製の実装コードがあります。
- これらにより、公的に入手可能なデバイス ドライバー、Web サーバー、ファイアウォール、またはその他のコードの再利用が可能になります。
- 開発システムは多くの機能を組み合わせた状態で開始でき、リリース時には不要な機能を削除してメモリの消費を節約できます。
- 多くのエンジニアは、アプリケーションをユーザー モードで実行する方が信頼性が高く、デバッグが容易であるため、開発プロセスが容易になり、コードの移植性が向上すると考えています。
- 多くの組み込みシステムには、制御システムのようなリアルタイム パフォーマンスに対する厳しい要件はなく、組み込み Linux などのシステムの応答速度は、多くのアプリケーションにとって十分です。
- 信頼性ではなく、より高速な応答性を必要とする機能は、通常、ハードウェアに配置されます。
- 多くのリアルタイム オペレーティング システムではアイテムごとに料金が請求されますが、製品が消費者向け製品の場合、この料金は高額になる可能性があります。
エキゾチックなカスタムオペレーティング システム
一部のシステムは、安全性、タイムリーさ、信頼性、または効率性が必要ですが、上記のアーキテクチャではそれらを実現できません。そのようなシステムを構築するためのよく知られた手法がいくつかあります。
- 本物のシステム プログラマーを雇いましょう。費用はほとんどかかりませんが、何年にもわたる試運転とそれに伴う収益の損失を節約できます。
- RMA (レート単調分析) を使用すると、一連のタスクが特定のハードウェア システムで実行できるかどうかを評価できます。最も単純な形式では、設計者は、最も速く完了したタスクが最も高い優先順位を持つようにします。平均すると、CPU は少なくとも自由時間は30%。
- 調和のとれたタスクにより、CPU を効率的に最適化できます。基本的に、設計者はすべてのジョブがハートビート タイマーから開始されることを保証します。リアルタイム オペレーティング システムでは通常、I/O デバイスを待機している間にタスクを切り替えるため、これを行うのは困難です。
- 正確に 2 つの優先順位 (通常は実行中と割り込みの無効化) を持つシステムでは、優先順位の高いタスクが優先順位の低いタスクがセマフォやその他のリソースを解放するのを待つという優先順位逆転の問題が発生することはありません。
- Monitor() を備えたシステムはデッドロックできません。モニターは、割り込みやその他のプリエンプティブ タスクを無効にするコードをロックします。このモニターが高速で実行される小さなコードにのみ使用されている場合、システムはおそらく正常に動作しています。割り込みのみが無効になるなど、モニター API があらゆる場合に完全に機能することが証明できれば、システムのハングは発生しません。
これは、2 つの優先順位とモニターを使用するシステムにはデッドロックや優先順位の逆転がないため、安全で信頼できることを意味します。モニターが最後まで実行できれば、ハングすることはありません。Harmony タスクを使用する場合も非常に効率的です。ただし、RMA ではこれらのシステムを説明することはできず、オペレーティング システムやハードウェアを含め、優先順位がどこにでもあるわけではないことが望ましいです。
外部リンク
- インスタント オペレーティング システムの仕組み(英語)
- 組み込みシステム ポータル (ページ アーカイブ バックアップ、保存場所) (英語)
- Windows Embedded Developer Center (ページ アーカイブ バックアップ、保存場所) (英語)
- 組み込みシステムと VLIW プロセッサ (ページ アーカイブ バックアップ、保存場所) (英語)
- 埋め込み C++ ホーム ページ (ページ アーカイブ バックアップ、保存場所) (英語)
- QNX ホームページ (ページ アーカイブ バックアップ、保存場所) (英語)
- LynuxWorks Embedded System Homepage (ページ アーカイブ バックアップ、保存場所) (英語)
- 組み込みシステムのディスカッション グループ、書籍、求人情報、その他
- 組み込みソフトウェア設計 (ページ アーカイブ バックアップ、保存場所) (英語)
- 組込みシステム研究開発団体のある大学一覧(英語)
- 組み込みシステム プログラミング (ページ アーカイブ バックアップ、保存場所) (英語)
- EE の概要 - 電気工学および組み込みシステム プログラミング (ページ アーカイブ バックアップ、保存場所) (英語)
- DeviceTools (ページ アーカイブ バックアップ、保存場所) - 組み込みデバイス開発者向けのツールとシリコン (英語)
- Embedian(英)
- 組み込みコンピューティング業界の記録ジャーナル (ページ アーカイブ バックアップ、保存場所) (英語)
- ホワイトペーパー、ダウンロード、企業、ニュース、記事を埋め込む(英語)
- 組み込みシステムのトラブルシューティング - 妊娠、製造、物流に至るまでの問題の概要。(英国)
- 複数の組み込みプラットフォーム間での作業 (ページ アーカイブ バックアップ、保存先) クロスプラットフォーム組み込みシステム。(英国)
一般的な組み込みオペレーティング システム
「組み込みオペレーティング システム」を参照
- アンドロイド
- Firefox OS
- iPhoneのOS
- uC/OS II
- FreeRTOS
- uCLinux
- VxWorks
- psOS
- 核
- PalmOS
- Windows CE
- Windows XP Embedded
- Windows Vista Embedded
- 組み込み Linux
- エコーズ
- QNX
- オオヤマネコ
- シンビアン
- RTスレッド
業界で一般的なオープンソースの組み込みソフトウェアおよびハードウェア システム
オペレーティングシステムがありません |
オペレーティング システム + 弱い GUI がある |
オペレーティング システム + GUI インターフェイスを搭載 |
|
8/16ビットプロセッサ |
|
|
/ |
32ビットプロセッサ |
/ |
|
|
参考文献
この記事は Wikipediaから引用しています。このテキストは、 クリエイティブ コモンズ - 表示 - 継承に基づいてライセンスされています。メディア ファイルには追加の規約が適用される場合があります。