組み込みソフトウェア入門

組み込み機器に搭載される組み込みソフトウェアについて、入門者向けに解説したいと思います。
「組み込みソフトウェア」の定義から、業界の体質や未来の展望まで、現役の組み込みシステムエンジニアが赤裸々に明かす!
現在の世の中に必要とされている、やりがいのある組み込みソフトウェア技術者の真実を、今語ります。

組み込みソフトウェア入門

組み込み機器とは

まず初めに、組み込みソフトウェアとは何かというと、正確な定義はなかなか難しいのですが、ここでは「組み込み機器に搭載されて動作するソフトウェア」とさせていただきます。それでは組み込み機器はなんですか?というとこれも定義が難しいのですが、本サイトでは「特定用途向けに特化、限定した機能を果たす事を目的とした機器」を、組み込み機器と呼ぶこととします。
身近なもの(家電など)でいえば、動画・写真の撮影に特化したデジタルカメラ、テレビ放送波の受信、描画に特化したテレビ、温度計測に特化した温度計、モノの加熱に特化した電子レンジなどを思い浮かべていただければ間違いありません。

組込機器と相対する存在として考えられるのが、皆さんが持っているWindowsやMacOS・Linuxが動くパソコン(パーソナルコンピュータ/personal computer)、PCが挙げられます。パソコンは「汎用用途向けに作られており、(時にはオプション機器を装着する必要もありますが)多種多様な目的を果たす事ができる機能を持つ機器」と言えます。

この相対する存在として挙げられる組み込み機器とパソコンでは目的こそ違いますが、実は基本を構成する要素は違いがありません。機器外面で見える部分としては、機器を操作するボタン、マウス、キーボードなどに代表される入力ツールや、機器から結果を得るディスプレイ、ランプなどに代表される出力機器、機器内部で言えば、プログラムを動作させるための演算装置、データを格納するメモリー・HDD・フラッシュROMなどの記憶装置などはパソコンであろうと組み込み機器であろうと存在するのです。
ただ、パソコンと組み込み機器では「特定用途向け」か「汎用用途向け」かの目的の違いにより搭載される機器に違いにあります。組み込み機器の一例として温度計の場合で考えてみましょう。

パソコンでは、例えば年賀状などの文章を作成するかもしれないことを想定すると、文字入力が行いやすいキーボード、絵を書くときにはマウス、タッチパネルのような入力機器が必要になります。どのような年賀状ができるのかを確認するためには、カラーで、出来上がりに近いイメージが確認できるようなディスプレイが必要になります。
それでは温度計ではどうでしょう。温度を測定する事に特化していますので、入力装置としては温度センサ、出力装置としては温度計測完了を知らせる簡単な発音装置と測定結果として数字4桁を表示するだけの簡単な表示装置があれば十分なわけです。今は理解しやすいように入力装置、出力装置を挙げましたが、演算装置、記憶装置も同様で、組み込み機器とは「目的を果たすための必要最小限の装置、機能で構成される機器」であるということです。

組み込みソフトウェアとは

上記でも触れたように、組み込みソフトウェアは組み込み機器上で動作するソフトウェアになります。組み込み機器とは「特定用途向けに特化した機能を持つ装置を搭載した機器」ですので、組み込みソフトウェアは、「特定用途に特化した装置(ハードウェア)を制御し、必要となる機能を実現するプログラム」ということになります。温度計の場合では、周期的に温度センサ(温度計測用ハードウェア)から数値データ読み込み、数字表示装置(数字表示用ハードウェア)に数値データを設定する機能を持つソフトウェアとなるわけです。

パソコンなどの汎用システム・機器の場合には、様々な用途に対応するために、搭載されている機能以上の性能を持つハードウェアを搭載する場合が多いのです。もちろん、パソコンの利用用途は何にでも及びますので当然のことと言えます。
しかし、必要以上の機能を搭載するからこそ製品1台1台の価格は非常に高価なものとなります。CPU1つをみてもパソコンに搭載するものは2万円~3万円のものが殆どです。これを温度計に搭載する事を考えると、温度計測を行うだけですが2万円の製品となってしまい、こんな温度計には製品価値がありません。実際に温度計に搭載されるCPU(マイコン)は100円以下のものとなっています。温度計は温度計測に特化しているからこそ1台1000円で提供ができるのです。つまり組み込み機器では、必要な機能を満たすために必要最低限のハードウェアと必要最低限のソフトウェアにて構成されるケースが殆どなのです。

以降では、組み込みソフトウェアとパソコン用のソフトウェアの比較を、開発環境、言語、プログラミングの観点から比較してみます。

組み込みソフトウェアの環境

パソコン上でのソフトウェア開発として、もっとも思い浮べる人が多いであろう開発環境は、Microsoft株式会社の提供するVisual C++やVisual Studio .NETではないでしょうか。これらの開発環境を使ったことがある方であれば想像がつくと思いますが、ソフトウェアの作成・プログラム開発・設計手順は、

  • (1)プロジェクトを作成してmain関数からプログラムを書きます。
  • (2)プログラムを記述し終えたら、コンパイルを実行し、プログラム開発言語の文法のエラーの修正をします。
  • (3)コンパイルに成功すると1行単位でデバッグ実行を実施し、プログラムが期待通りに実行されているかを確認します。
  • (4)期待通りに実行されていると確認できれば、デバッグ情報を抜いた形でプログラムを作成する。

という一連の流れとなります。このような一連のソフトウェア開発プロセスをVisual C++やVisual Studio .NETなどの開発環境では、シームレスに実施することができます。

それでは組み込み機器の場合はどうか?組み込みシステムの開発手順では違いがあるのかというと、ここ最近の組み込み機器開発においても、やはりVisual C++やVisual Studio .NETのような統合開発環境が存在していますので、Windowsと似たように一連の流れを1つの開発環境でシームレスに行う事ができる場合が多くなっています。ただ大きな違いとして、Windows上でのソフト開発・プログラム開発の場合には、Windows上で動作させたいプログラムを、Windows上で開発・デバッグしますので、ソフトウェアの動作環境使っての開発・デバッグが行えるというメリットがあり、非常にシンプルです。
しかし組み込み機器の場合には、組み込み機器で動作させるソフトウエアーをWindows上で開発する事になりますので、プログラムを組み込み機器に組み込んだ後、プログラムを1行ずつ実行するように組み込み機器の制御を行い、演算結果をWindowsパソコンで読み込み表示する、という事を行います。組み込み機器開発では、組み込み機器の制御と、組み込み機器とパソコンとの通信を行う為の機器として、ICEやJTAGを利用して行うクロス環境が特徴として挙げられます。

組み込みソフトウェアの言語

ソフトウェア開発に利用される言語といえば、有名どころはC言語を拡張したC++、C#、Java、PHPなどがあるかと思います。組み込み機器開発(エンベデッド開発)でも一昔前はアセンブラでしょ!なんて時代もありましたが、個人意見も入りますが、今はもっぱらC、C++、Javaを採用することが多くなってきていると思います。
ただし、アセンブラでしか記載できない部分というのも当然ながらありますので、すべてをC、C++、Javaで開発できるわけではありません。昨今の組み込みソフトウェア開発では、パソコンのソフトウェア開発と同様に用途に合わせてソフト開発言語も選ぶようになってきています。

組み込みソフトウェアのプログラミング

これまでのところで、組み込みSW開発とWindowsプログラミングの大きな違いとしては、

  • (1)ICE、JTAGを使って開発をする。
  • (2)アセンブラでプログラムしなくてはならない部分がある。

という点を理解いただけたかと思います。アセンブラは言語の問題だけですので基本的にはマニュアルなどを参照すればコードを書くことができます。組み込みソフトウェア開発技術者の腕の見せどころとなるのは、ICE、JTAGを使って開発をする部分になるかと思います。Windows上でのソフトウェア開発では本来ソフトウェアが動作する環境にほぼ近い形でデバッグを行う事ができますが、組み込みソフトウェア開発ではソフトウェアは組み込み機器上で動かし、プログラムの制御と結果の表示をWindowsパソコンで行うことになります。
このように、実行する環境とデバッグする環境が異なるため、その間に通信を行う必要が発生します。そして、この通信によってタイムラグが生じるため、例えば1行プログラムを実行させて計算結果を見ようとしても見ることができない、実はすでに違う値になっている、なんて事が頻繁に起こるというわけです。

それ以外にもデバッグ途中でプロセッサを止めすぎたため、一定間隔で処理をしないとリセットがかかるようなハードウェアが動作してしまう、なんて事も起こりえます。組み込みソフトウェア技術者(組込み技術者)はこれらの起こりうる要因を想定、予想しながらデバッグを行う必要があるのです。

組み込みソフトウェア技術者はかっこいい

そんなわけで、初心者ではなかなか簡単にはいかず、経験・技術がモノを言う世界ではありますが、日本の組込ソフトウエア産業は先が明るく、業界的にはまだまだ需要がある組み込みソフトウェア技術者、組み込みシステム開発者に貴方もなってみませんか。機器に組み込むソフトウエアなのでなかなか目で見ることはできませんが、LEDがちかちかするだけでも案外うれしいものですよ。