組み込みソフトウェアは、一般的には組み込みシステムと呼ばれる、コンピュータとは考えられていない機械やデバイスを制御するために書かれたコンピュータソフトウェアです。通常、実行される特定のハードウェアに特化しており、時間とメモリの制約があります。[1]この用語は、ファームウェアと同じ意味で使用されることがあります。[2]

正確で安定した特徴は、組み込みソフトウェアのすべての機能がヒューマンインターフェースを介して開始/制御されるのではなく、マシンインターフェースを介して開始/制御されることです。[3]
メーカーは、自動車、電話、モデム、ロボット、家電製品、玩具、セキュリティシステム、ペースメーカー、テレビ、セットトップボックス、デジタル時計などの電子機器に組み込みソフトウェアを組み込んでいます。[4]このソフトウェアは、数キロバイトのメモリを搭載した8ビット マイクロコントローラで実行される照明制御のように非常に単純なもので、適切なレベルの処理複雑さはおそらくほぼ正しい計算フレームワーク[5] (ランダム化アルゴリズムに基づく方法論)で決定されます。ただし、ルーター、光ネットワーク要素、飛行機、ミサイル、プロセス制御システムなどのアプリケーションでは、組み込みソフトウェアが非常に高度になることがあります。[6]
オペレーティングシステム
macOS、Windows、Linuxなどのオペレーティングシステムを一般的に使用する標準的なコンピュータとは異なり、組み込みソフトウェアはオペレーティングシステムを使用しない場合があります。オペレーティングシステムを使用する場合は、リアルタイムオペレーティングシステムを中心に、さまざまなオペレーティングシステムから選択できます。組み込みソフトウェアのコードは通常、CまたはC ++で記述されますが、マイクロコントローラや組み込みシステムを対象とするJava、Python、JavaScriptなどのさまざまな高水準プログラミング言語も現在では一般的に使用されています。 [7]アセンブリ言語も、特にブートと割り込み処理でよく使用されます。Adaは一部の軍事および航空プロジェクトで使用されています。
アプリケーションソフトウェアとの違い

ほとんどの消費者は、コンピューター上で機能を提供するアプリケーション ソフトウェアをよく知っています。ただし、組み込みソフトウェアは目立たないことが多いものの、それほど複雑ではありません。アプリケーション ソフトウェアとは異なり、組み込みソフトウェアには固定のハードウェア要件と機能があり、サードパーティのハードウェアまたはソフトウェアの追加は厳しく制御されています。
組み込みソフトウェアには、製造時に必要なすべてのデバイス ドライバが含まれている必要があり、デバイス ドライバはさまざまなハードウェア デバイス用に作成されます。BSP (ボード サポート パッケージ) と呼ばれるこれらのデバイス ドライバは、特定のオペレーティング システム (従来はリアルタイム オペレーティング システム、つまり RTOS) が特定のハードウェア環境 (コンピューターまたは CPU カード) で機能し、RTOS 自体と統合できるようにするハードウェア固有のドライバやその他のルーチンを含むソフトウェア レイヤーを形成します。ソフトウェアは、選択した CPU と特定のチップに大きく依存します。ほとんどの組み込みソフトウェア エンジニアは、少なくとも回路図の読み方や、レジスタや通信システムの使用方法を判断するためのコンポーネントのデータ シートの読み方について、ある程度の知識を持っています。10進数、16 進数、2 進数間の変換やビット操作の使用は便利です。[8]
ハードウェアの管理には Web アプリケーションがよく使用されますが、XML ファイルやその他の出力はコンピューターに渡されて表示されることもあります。フォルダーを含むファイル システムが一般的に使用されますが、SQL データベースが存在しないことがよくあります。
ソフトウェア開発には、コンピュータ上で実行され、対象デバイスの実行可能コードを生成するクロスコンパイラを使用する必要があります。デバッグには、インサーキットエミュレータと、 JTAGやSWDデバッガーなどのデバッグハードウェアを使用する必要があります。ソフトウェア開発者は、多くの場合、完全なカーネル (OS) ソースコードにアクセスできます。
ストレージメモリと RAM のサイズは大幅に異なります。一部のシステムは、8 MHz で動作する CPU で 16 KB のフラッシュと 4 KB の RAM で動作しますが、他のシステムは現代のコンピュータに匹敵します。[9]これらのスペース要件により、C++ ではなく、 C または組み込み C++で作業が行われるようになりました。 BASIC (たとえば、Parallax Propeller はコンパイルされた BASIC を使用できます) やJava (Java ME Embedded 8.3 [10]は、ARM Cortex-M4、Cortex-M7マイクロコントローラ、およびRaspberry PiとIntel Galileo Gen. 2で使用される古いARM11で使用できます ) などのインタープリター言語は一般的に使用されていません。ただし、インタープリターPython 3 言語 の実装であるMicroPythonは、 32 ビットARMベース (BBC micro:bitなど) や16 ビットPIC マイクロコントローラなどの マイクロコントローラでの使用専用に使用できます。
通信プロトコル
プロセッサ間の通信、およびプロセッサと他のコンポーネント間の通信は不可欠です。直接メモリ アドレス指定の他に、ハードウェア レベルの共通プロトコルには、 I²C、SPI、シリアル ポート、1-Wires、Ethernet、USBなどがあります。
組み込みシステムで使用するために設計された通信プロトコルは、 InterNiche Technologies やCMX Systemsなどの企業からクローズド ソースとして提供されています。オープン ソースプロトコルは、 uIP、lwipなどから派生しています。
参照
注記
- ^ MicroVGA の詳細については、この PDF を参照してください。
参考文献
- Edward A. Lee、「組み込みソフトウェア」、Advances in Computers(Marvin Victor Zelkowitz編)56、Academic Press、ロンドン、2002 年。
- ^ 「Stroustrup による組み込み向け C++ に関する講演 (下部 2 ページ)」(PDF) 。2012 年12 月 9 日閲覧。
- ^ Emilio, Maurizio Di Paolo (2014-09-01). 高速データ取得および制御のための組み込みシステム設計。Springer。ISBN 978-3-319-06865-7。
- ^ 「組み込みソフトウェア上のICS」。2013年3月22日時点のオリジナルよりアーカイブ。2013年7月22日閲覧。
- ^ 「Embedded Systems Methods and Technologies」。2013年10月29日時点のオリジナルよりアーカイブ。 2012年12月9日閲覧。
- ^ Alippi, Cesare (2014)、組み込みシステムのためのインテリジェンス、Springer、ISBN 978-3-319-05278-6。
- ^ http://ptolemy.eecs.berkeley.edu/publications/papers/02/embsoft/embsoftwre.pdf [裸の URL PDF ]
- ^ Mazzei, Daniele; Montelisciani, Gabriele; Baldi, Giacomo; Fantoni, Gualtiero (2015). IoT ドメインにおける組み込み向けプログラミングパラダイムの変更。Internet of Things (WF-IoT)、2015 IEEE 2nd World Forum on。ミラノ: IEEE。pp. 239–244。doi :10.1109/WF-IoT.2015.7389059 。
- ^ 「Stroustrup on embedded software」。2013年2月3日時点のオリジナルよりアーカイブ。 2012年12月9日閲覧。
- ^ 「組み込みCPUの例」。2012年12月9日閲覧。
- ^ 「Java ME Embedded」。Oracle Technology Network。
