組み込みシステム

**組み込みシステム**（くみこみシステム、）は、家電製品や産業機器などに搭載された、特定の機能を実現するためのコンピュータシステムの総称である。

## 概説

組み込みシステムとは、機械や装置等の特定の機能を実現するために「組み込まれる」コンピュータシステムのたぐいを指すための総称である。産業用機器、医療用機器、家庭用機器等、制御を必要とする多くの製品に用いられている。特定の機能を実現する目的で組み込まれるという点で、パーソナルコンピュータ (PC) 等の汎用的なシステムと対比される。

小型・軽量、省電力、安定動作・誤動作防止などの要求から専用に設計されるものが多いが、組み込み用途以外の既存の製品のダウンサイジング、もしくは既存の回路ないしコンポーネントを流用・組み立てを行い製品化しているものも近年増えてきている、これはコンピュータや各種電子回路の小型化と信頼性の向上により特定の組み込み用途の要求を満たしたためである。
（たとえば動作可能状態の小型PCの基盤、PCとほぼ同じ働きをするPCI拡張ボード型コンピュータ、シングルボードコンピュータ、又はワンボードの汎用マイコン回路などに専用に設計されたソフトウエアを導入して制御を必要とする機械に組み込み、制御回路として使う場合など）

組み込みシステムが登場する以前の装置の制御は、制御理論に基づく伝達関数を用いたPID制御などにより主に電気・電子回路がもたらす現象的な電気量や、機械的な機構の組み合わせ等によって直接的に実現していた。これらの制御的機能を、主に専用に設計されたコンピュータシステムとソフトウェアによって行うことで、装置の正確な状態監視、判断、複雑な命令の組み合わせ等が実現できるとともに、機能の追加や変更も容易に行うことができる。組み込みシステムの中でも、例えば、携帯電話やデジタル家電、自動車など多機能なシステムでは、複数のハードウェア、複数のソフトウェアを組み合わせたものとなり、多くの開発人員と開発期間を要し、**大規模組み込みシステム**などと呼ばれることがある。

近年におけるマイクロプロセッサの価格の低下、能力の向上などにより組込みシステム導入は広がっている。機能の追加や変更がソフトウェアを書き換えることで可能となるため、電気・電子回路の変更が最小限に押さえられ、コストもおさえられることなどから、広範囲の製品に搭載されるようになっている。

### 定義
コンピュータ用語辞典などでは、組み込みシステムは「特定の機能を実現するために機械や機器に組み込まれるコンピュータシステム」などといった説明がされている。

「特定の機能を実現するための必要十分条件を満たす、選択や交換の不可能な**ハードウェア**とプログラム（**ソフトウェア**）で構成されるコンピュータシステム」と定義されることもある。

### 組み込みシステムの形態
ハードウェアの構成は汎用のもの、独自のもの、両方を組み合わせたものがある。

ソフトウェアも同様に、汎用のもの、独自のもの、両方を組み合わせたものがある。開発言語としてはC言語が用いられることが多いが、メモリ容量や実行速度等の制約が厳しい用途ではアセンブリ言語が用いられる。メモリ容量等の資源が十分に確保できるシステムではオペレーティングシステム (OS) も搭載されているものも多い。

ハードウェアとソフトウェアは別々に設計することもあるが、ハードウェアとソフトウェアの機能をお互いに考慮しながら設計する**協調設計**（コデザイン、）と言う設計手法もある。

## 沿革
組み込みシステムが発達する以前の装置の制御は、アナログ回路、プログラム制御によらないデジタル回路、からくり的な機械的機構といったハードウェアにより構成していたが、新たな機能を追加したり変更したりする場合に、電子回路や機構そのものを変更する必要があり、コストと時間がかかるという問題があった。

1980年代以降のマイクロプロセッサの発達により、コンピュータを用いた制御方式を導入することで、電子機器の回路は変更せず、ソフトウェアの部分のみを変更することで機能の追加が可能になり、機能追加に必要なコストが削減された。

このため、ほとんどの電化製品に組み込みシステムを搭載するようになり、それにより、製品の付加価値となる新機能が比較的容易に追加できるようになり、高機能化・多機能化が進んだ。

## 具体例
家庭用、産業用問わず電子制御を必要とする製品において広く用いられている。以下に例を挙げる。

* 家庭用電気機械器具（一般家電製品、デジタル家電）
** 白物家電等（炊飯器、洗濯機、エア・コンディショナー、ロボット掃除機など）
** 通信用機器（携帯電話、機能電話、モデム、ルーターなど）
** デジタル機器（デジタルカメラ、ビデオカメラ、PC用の周辺機器（プリンター、スキャナなど））
** AV機器（テレビ、ハードディスク・レコーダー、DVDレコーダーなど）
** ホームセキュリティ機器
** 家庭用ゲーム機
** 高機能な玩具（愛玩用の動物型ロボットなど）
** 高機能な教育用機器

* 一般産業用機器や機械設備類
** 事務機器（複写機、プリンターなど）
** 通信機器（法人用携帯電話、機能電話機、ファクス、モデム、TA、ルーター、LAN用機器など）
** 業務用空調設備、業務用エアコン
** 生産用機器・設備（産業用ロボット、工作機械、計測機器など）
** 販売用機器（自動販売機、自動券売機、POSレジ）
** 現金自動預け払い機（ATM）
** 広告・展示用装置（展示用装置）
** 警備・監視用装置（機械警備、中央監視装置など）
** 遊戯産業用機器（パチンコ機、パチスロ機、スロットマシンなど）
** 信号機
** エレベーターの部分制御（なお基本的な運転制御については制御盤内のPLC等により、より安全性の高い構成としている）

* 乗り物やそこに搭載する機器
** 自動車、オートバイのエンジンコントロールユニット（燃料噴射装置を含むエンジンマネジメント）、自動変速機、エアコンなどの制御
** カーナビゲーションシステム
** 鉄道車両（電気機関車、電車、ディーゼル機関車、気動車など）のブロック制御
** 船舶、航空機、宇宙船、人工衛星
* 医療機器
** バイタルサイン用（自動血圧計、 心電計、 電子体温計など）
** 除細動器（AEDなど）
** 臨床検査用機器・分析装置

* 災害対策用機器
** レスキューロボット
** 原子力発電所の事故処理用、廃炉用ロボット

他
* 競技用ロボット（たとえばロボコン）

他多数

## 汎用システムとの比較
* 組み込みシステムは、最終製品が多岐に亘るため、汎用的なコンピュータに比べて非常に数と種類が多い。
* ソフトウェアだけでなくハードウェアも専用のものを開発することが多い。また、そのハードウェアに対応したデバイスドライバを作る必要もある。
* 機械の制御を行う場合には特に、汎用システムとは異なり、リアルタイム制御が重要になる。
* 大量生産される製品の場合にはコストが非常に重要となるので、必要最低限のメモリと、安価なCPUで動作可能にする必要がある。小規模なシステムでは1チップマイコンを利用することが多い。
* 専用のハードウェアに専用のソフトウェアが搭載されて製品となるものが多いので、そのテスト工程は、ハードウェア、ソフトウェアの両方にまたがる検証が重要になる。

## ハードウェア
組み込みシステムを搭載した機器のハードウェアの構成パターンとしては以下のようなものがある。

* 独自のハードウェアのみで機器を構成する。
* 汎用のマイコンボードと独自のハードウェアを組み合わせて機器を構成する。
* 汎用のハードウェアのみで構成する。
製品の目的や、製品が販売されるマーケットの性質に応じて、上記からパターンが選択される。

より具体的には以下のような要素を考慮してハードウェアの構成が検討される。
* 形状、サイズ
* 量産品か否か

形状が特殊であったり、サイズが特別に小さい製品などでは、汎用のハードウェアを内蔵することができないことがあり、その場合は専用のハードを新たに開発しなければならなくなる。
「量産品か、少量生産品か」というのは、独自ハードウェアは、開発コスト（回路設計費、基板設計費等）がかかる、という事実があり、量産品の場合は全体の大きなコストの中にそれを含めてしまえば良いのだが、少量生産品の場合はそうできないというハードルがある、ということである。

厳密で適切な選択となると、原価計算も踏まえて行う必要がでてくる。

### 組み込み向けCPU
以下に主なものを挙げる。
* 8049
* 8051
* 8085
* Z80
* 68000
* V30 , V850
* PIC
* Atmel AVR
* H8/300
* SuperH
* PowerPC
* M16C
* R8C/Tiny
* MIPSアーキテクチャ
* ARMアーキテクチャ

## ソフトウェア
「独自に開発したソフトウェアだけで構成する」方法と、「汎用ソフトウェアと独自ソフトウェアを組み合わせて構成する」方法が存在する。

* ソフトウェアはC言語で記述されることが多い。32ビット以上のマイコンなど、比較的ハードウェア資源が豊富な環境ではC++やJavaが使用されることもある一方で、4ビットマイコンなどの資源が貧弱な環境や、逆に他言語では間に合わないような極めて高速な処理を求められる場面では、現在でもアセンブリ言語の使用が必須である。
* (ソフトウェア開発全般の話で)最近では開発にUMLといったオブジェクト指向の手法が取り入れられるようになっている。ただし組み込みシステム開発においては、機能で分類したクラスでプログラムを組み立てるのではなく、信頼性が保証されたモジュールで組み立てるのが普通である。
* デバッグは、インサーキット・エミュレータ (ICE) と呼ばれる機器を用いてPCをCPUに接続してリモートで行う。近年では、ICEを使わずJTAGエミュレータやROMエミュレータなどのエミュレータや、PC上でCPUの機能をシミュレートするシミュレータも使用される。
* かつては、ソフトウェアはEPROM(特にUV-EPROMが使われることが多かった)に書き込まれた状態で出荷されたため、出荷後に製品不具合が発見されると、修正や修理のためにメーカーによる製品回収・交換作業などが必要になり、多大な費用がかかった。
* 近年はソフトウェア容量が大きくなり、機能ごとに複数のソフトウェアを搭載する組み込み機器も少なくない。特に、携帯電話、デジタルオーディオプレーヤー、HDDレコーダなどのデジタル家電のファームウェア、PC周辺機器のファームウェアにも組み込み用途向けOSを搭載する機種が多い。機能は多様化したが、不具合対処のリスクも高まった。このため製品にフラッシュメモリを採用し、出荷後にユーザサイドで書き換え可能とすることで、以前と比べメーカー側の負担は軽微になった。しかしシステム解析の複雑さから不具合の発覚から修正までにかなりの時間を要することがあるようにもなり、市場に大きな影響を及ぼすことには変わりはない。ソフトウェアの書き換えには様々な手段が用いられており、修正ソフトウェアの入ったリムーバブルメディアをユーザ側で取り込ませる方法、放送電波を経由させて配信する方法などがあるが、インターネットに直接アクセスして自動で修正ソフトウェアにアップデートする機能をもった機器が増えてきている。
* PC本体のBIOSは、マザーボードの機種ごとに組み込まれた組み込みシステムソフトウェアであり、主にマザーボード上のチップセットに対してのファームウェアである。BIOS設定画面でユーザが設定した項目は、大容量コンデンサやボタン電池などでバックアップ（これらはCMOSバックアップ電池と呼ばれる）されたROMに保存されている。

### OS

* 組み込みに用いられるOSとしては、日本においてはμITRON仕様OSが採用されることが多い。VxWorks、OS-9、QNXなども広く利用され、また最近では強力なネットワーク機能により本来汎用OSであるNetBSD、OpenBSD、FreeBSDなどのUnix-likeOSにも注目が集まっている。詳しくは、組み込みオペレーティングシステムを参照のこと。
* ただし、現在においても、特に低資源の環境ではOSを採用しないことも多い。

* ほとんどの組み込みシステムでは、ユーザがプログラムを入れ替えたり更新したりすることは想定されない。そのため汎用コンピュータよりも自由にOSやシステム構成を選択できる。
* 近年ではPCベースのハードウェアの低価格化に伴い、PCベースのハードウェアを使用し、OSも組み込み向けにカスタマイズしたWindows CEやLinuxなども採用されている。PC用のアプリケーションやデバイスドライバなどを流用出来るだけでなく、Windows PC感覚での開発・使用・メンテナンスも行えるほか、サービス水準合意を締結することで製造物責任法対策も行えるため、Windows Embeddedは航空券のチェックインシステムからコンビニのPOSレジ、更には銀行のATMまで、幅広く採用されている。(実用上十分なセキュリティ性能を持ち、特別な知識を持っていなくても比較的簡単に操作出来ることから、組み込み版ではなかったWindows NT 4.0の頃から組み込みシステムに採用されていた)

### 関連項目
* ファームウェア

## 組み込みシステムの技術者
組み込みシステムの開発職は確立された職種として認知されている。日本における組み込みソフトウェア技術者数は、2004年に14.9万人、2005年17.5万人、2006年19.3万人、2007年23.5万人と推計された（経済産業省による推計）。

## 組み込みシステムに関する資格

; 国家資格
* 情報処理技術者試験 - 経済産業省所管の独立行政法人である情報処理推進機構（IPA）が実施する国家資格。
** エンベデッドシステムスペシャリスト試験 - 日本国内で実施される組み込みシステムに関する資格試験としては最難関にあたる。
** システムアーキテクト試験 - 午後1および午後2で組み込みシステムに関する問題が自由選択制で出題される。午後2は論述試験である。
** ITストラテジスト試験 - 午後1および午後2で組み込みシステムに関する問題が自由選択制で出題される。午後2は論述試験である。
** 基本情報技術者試験
** 応用情報技術者試験 - 午後の問7（自由選択制）は例年組み込みシステムに関する内容になっている。

; 公的資格
 *組込みソフトウェア技術者試験（ETEC） - 一般社団法人組込みシステム技術協会（JASA）認定

; 民間資格
* ISTQB認定資格

## 脚注

## 関連項目
* シーケンス制御
* OSGi
* 組込みスキル標準
* LonWorks
* ハードウェア記述言語
* エンベデッドシステムスペシャリスト試験
* 組み込みLinux
* ソフトウェア危機
* プロセス制御

## 外部リンク
* 組込みシステム技術コース - 研究人材のためのe-learning（科学技術振興機構）