黒猫のひとりごと

日々思ったこと、感じたことを吐き出します。わっしょい。

組み込みソフトウェア開発という仕事

はてなでブログを開設して、たくさんのブログを拝見させていただいていますが、お仕事が比較的Web系のエンジニアが多いと思います。
(自分のブログ閲覧に偏りがあるからかもしれませんが。。。)

そこで、自分の仕事を見つめ直すことを含めて組み込みエンジニアの仕事がどんなことをしているかを、エンジニアではない方向けに書きたいと思います。
(最近はネタに走り過ぎているため・・・)
少しでも身の回りにあふれている組み込みを知ってもらえたら幸いです。

そもそも、組み込みシステムって何?

組み込みシステムとは、特定の機能を実現するために、家電製品や、自動車などの組み込まれるコンピュータシステムです。身近なものでいえば「テレビ」「洗濯機」「エアコン」「炊飯器」「携帯電話」などです。
組み込みソフトウェアは、その中に書き込まれているソフトウェアです。

f:id:blackcatdelta:20130928210815j:plain
空気清浄機にも入っています。


例えば、空気清浄機は、空気中のホコリや匂いをセンサで感知して、空気が汚れていると判断したら清浄機能を強くします。
このように、絵を描いたり、ネットをしたり、とパソコンのようにいろいろなことができるわけではなく、空気をキレイにするという機能のみを実現しています。
f:id:blackcatdelta:20131014115715p:plain


組み込みシステムは、マイコンという1チップのコンピュータを搭載しています。
パソコンがCPU,メモリ、ハードディスクという複数の機器で構成されているのに対し、マイコンでは1チップでそれらすべての機能を有しています。
f:id:blackcatdelta:20131014114539j:plain
そのため、パソコンのCPUに比べて、マイコンは非常に安価で買うことができます。


近年では、組み込みシステムも高機能化・大規模化してきています。
スマートホンやカーナビのようにパソコンと変わらないものも増えていたり、ワンチップマイコンにもOSが乗ったりするため、組み込みシステムの定義は変わってきているかもしれません。


リアルタイム性

組み込みにはリアルタイム性をいうものが求められます。
このリアルタイム性というのは、即時応答という意味合いにも取られそうですが、そうではなく要求された処理を一定時間内に完了できることを指します。
例えば、ユーザが操作スイッチを押して、操作音「ピッ」が3秒後に鳴ったら違和感を感じてしまいます。
このようにユーザが不自然に感じない時間内に応答を返す必要があり、その時間は保証されていないといけません。

どんなに時間がかかる処理をしていても、リアルタイム性を必要とする動作は、規定時間内に応答するように作る必要があります。
この辺が、他のソフト開発と大きく違う点だと思います。


ソフトウェアの品質

組み込みシステムの特徴として、ソフトウェア品質(バグがないこと)を特に重視します。
機器にソフトウェアが書き込むため、バグをソフトウェアに入れ込んでしまうと、出荷したすべての機器を回収して、ソフトウェアを書き直す必要があります。いわゆるリコールです。
f:id:blackcatdelta:20131014123258p:plain

機器を回収する費用、ソフトを書きなおす費用等、とてもお金がかかるので、バグには神経質になります。
(ネットワークにつながっているものは、自分で自分のソフトウェアを書き直すものもありますが、数は少ないです。)

また、組み込みシステムは、医療機器、自動車などに多く使われるため、特に品質が求められるものが多いです。バグひとつが人命を奪いかねません。
上記の理由から、一般的に組み込みシステムの開発では、テスト(評価)の時間を多くとります。



自分の仕事は、組み込みソフトウェアになります。
上記の例では、家電を主に取り扱いましたが、自分の開発経験は「自動車」のみであるため、次回では車載組み込み開発について触れたいと思います。