組み込み技術とは

組み込みソフトウェア

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

ここではまず、組み込みソフトウェアとは何かということについて入門者向けに組み込みの基礎から解説していきます。

組み込みソフトウェアとは、組み込み機器に搭載されて動作するソフトウェアのことで、組み込み機器とは特定用途向けに特化、限定した機能を果たすことを目的とした機器のことを意味します。携帯電話やカメラなどの電子機器の中に入っている小さな電子回路が、組み込みソフトウェアにあたります。WindowsやMacOS、Linuxが動くパソコンは汎用用途向けに作られた機器であり、組み込みソフトウェアと相対する存在であると言えます。

私たちの身の回りには、家電製品をはじめとする非常に多様な種類の組み込み機器が存在していますが、それらの多くはある特定の用途に特化しているものと思われます。例えばデジタル時計であれば、現在の時刻を表示させることが主な役割となります。この際、時計の内部では水晶振動子の信号を処理したり、電波を受信したりすることで現在時刻を読み込み、その時刻を液晶版に表示させる、という動作が行われているのです。この現在時刻を読み込むハードウェアと時刻を表示させるハードウェアを組み合わせることで、デジタル時計という組み込み機器が出来上がるのですが、それらを統合・制御するものとして組み込みソフトウェアは存在します。この組み込みソフトウェアはパソコンとは異なり必要最低限の機能を持ったCPUのみを搭載することでコストを抑え、廉価で提供することができるのです。

組み込みに関して高度な知識や技術・スキルを持つエンジニアは、企業で貴重な人材と見なされます。組み込みに関する資格として、エンベデッドシステムスペシャリストやETECなどがあります。組込み技術者を対象とした資格の試験勉強をすることで、組み込みについて深い知識を習得できます。

組み込みソフトウェア開発の流れ

次に、組み込みソフトウェア開発・設計の流れについて解説していきます。

組み込みソフトウェアの開発と、パソコン上で動作する一般的なソフトウェアの開発との最も大きな違いは、開発環境と動作環境が異なるという点にあります。つまり、一般的なソフトウェアでは、Windows上であれLinux上であれパソコン上で作成中のソフトウェアが実行されるわけですから、基本的に一台のパソコン、一つのハードウェア上で作成と検証を行うことができます。通常、ソフトウェアのプログラムを開発・作成する際にはエラーの修正を同時にしなければならないため、常に動作確認の作業を平行して行わなければなりません。組み込み機器の場合、作成を行うハードウェアと実際の動作を行うハードウェアが別々であるため、ソフトウェアのプログラムを1行ずつ組み込み機器側で実行させ、その結果を開発ハードウェア側に表示させる、といった通信・制御の作業が必要となります。 また、ハードウェアが異なるわけですから、C++やC#、JavaやPHPなどの高レベル言語が使えない、という場合も多くあります。そのような場合には、よりハードウェアに近い部分での処理を行うアセンブラ言語を使用しなければなりません。もっとも最近ではアセンブラを用いなくても高レベル言語のみでプログラミングが出来るケースも増えてきました。けれども、開発言語の選択という点では、パソコンのソフトウェア開発以上に組み込みソフトウェアの場合は考慮すべき点が多く残されています。

以上に挙げた点を除いては、組み込みソフトウェアの開発プロセスは一般的なソフトウェアのシステム開発の場合とさほど変わりありません。例えば、Windowsのパソコン上でC言語を用いてプログラム開発を行うならば、
① Visual C++やVisual Studio. NETなどの開発環境を整備する。
② 新規プロジェクトを作成し、プログラムを記述する。
③ コンパイルを実行し、プログラム開発言語上の構文ミスや変数・インスタンスの不適切な設定等の文法エラーを修正する。
④ 開発環境上でコンパイルに成功したならば、実際の動作が行われるハードウェア上でプログラムが期待通りに実行されるかどうかを確かめるためのデバッグ作業を実施する。
⑤ きちんと動作確認が行われたならば、デバッグ作業における修正点を直した後にプログラムを「清書」する。
といった開発手順に沿って行うことになります。もちろんVisual C++やVisual Studio. NETのような統合開発環境を用いなくてもシステム開発を行うことはできるのですが、これらの環境を用いるメリットは作業をシームレスに行えるという点にあります。

また、デバッグ作業において組み込み機器と開発環境間の通信を行う際には、ICEやJTAGといった機器を使用したクロス環境で行うことになります。これは組み込みソフトウェア開発特有のものです。

組み込みソフトウェアと自動車の関係

組み込みソフトウェアは、そのハードウェアとなる組み込み機器を制御するものです。先ほどデジタル時計をはじめとする家電機器において用いられているという話をしましたが、もっと大きな機器、たとえば自動車のような機械にも搭載されています。時計の場合であればソフトウェアの役割は現在時刻を取得して表示させるというだけのものでしたが、自動車の場合はもっと多くの動作を同時に行わなければなりません。エンジンや自動変速機、各種スイッチを制御するものはもちろん、カーナビゲーションシステムやマルチメディア系の制御も行なっています。

これらの制御機構は小さなマイコンを集積したECUにソフトウェアとして組み込まれていますが、それぞれの制御は単独で行われるものではありません。例えば、セキュリティ関連では自動車本体が盗難されないように気を配るだけでなく、カーナビゲーション等の情報通信においてプライバシーの傍受がなされないようにするなど、他の制御機構と高度に連携しながら動作が行われなければなりません。

これら個々の機構を制御する組み込みソフトウェアは、自動車の性能の向上に比例して重要度を増しています。同時に、より高い品質・安全性の確保や開発効率の向上も求められています。このために自動車業界では、開発環境の標準化を進め、それぞれの機構間での連携を円滑にする事や、開発工程の合理化を推進しています。特に自動車の組み込みソフトウェアにおいては、個々の組み込みシステムが高度に専門化されていながらも、全体として非常に高い安全性・信頼性およびリアルタイム性を兼ね備えていなければならないため、このような組み込みシステム全体を統合して開発できる環境を整備することが求められているのです。

組み込みソフトウェアの今後

組み込みソフトウェアは、個々の機能に特化した処理をする機構であると先に述べましたが、組み込み機器の機能の向上にしたがって、組み込みソフトウェアに求められる役割も徐々に変わってきています。特に自動車の例でも述べたように、それぞれの機能を連携させるという機能が、現在の組み込みソフトウェアに求められる最も重要な役割であるといっても良いかもしれません。

いずれにせよ、今後の組み込みソフトウェアにおいては、個々の機能と全体としての挙動を統率する処理が重要度を増すものと思われます。また、組み込みソフトウェアの需要は今後高まり、組み込みシステム開発の市場規模は大きくなり、組み込みを専門とするエンジニアへの求人は増すことが予想されます。



富士ソフトでは、OSのポーティングから各種I/Fドライバ、アプリケーション層まで
全ソフトウェアレイヤーの開発力を保有し、皆さまのご要望にお応えしています。

富士ソフトのソフトウェア開発力について

  1. Linux は、Linus Torvalds 氏の日本およびその他の国における商標または登録商標です。
  2. Google、Androidは、Google Inc.の商標または登録商標です。
  3. Windows embedded,Windows embedded compact7 およびWindows は、米国 Microsoft Corporation の、米国、日本およびその他の国における商標または登録商標です。
  4. Eclipseは,Eclipse Foundation, Inc.の登録商標です。
  5. Java及びその他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
  6. その他、記載されている会社名および製品名は、各社の商標または登録商標です。