現代社会の営みに不可欠な通信、放送、交通機関、産業機器、家庭用電化製品などには、すべて組込システムが内蔵されています。そうした組込システムにおいて、組込ソフトウェアは必要な機能を実現するため内蔵されています。
ここでは、組込ソフトウェアを基礎から学ぶとともに、最新の動向や各種半導体への実装、応用について解説します。
目次
組込ソフトウェアとは
特定機能を実現するため、機器や装置等へ組込まれたコンピュータシステム(組込システム)において動作しているのが組込ソフトウェアです。
組込システムには用途によりさまざまな種類がありますので、そこで用いられる組込ソフトウェアの構造や機能も多様です。
組込ソフトウェアの役割は以下の3種類に分類されます。
(1) ハードウェアの拡張、代替
(2) ノウハウのカプセル化
(3) センター/クラウド連携
(1)はもともとハードウェア(機械、電気/電子回路やその組合せ)が用いられていた装置において、一部機能をマイコン=組込ソフトウェアによって代替すること、およびハードウェアの限界を超えた機能を実現するのが目的です。元来、組込ソフトウェアはマイコンの普及を背景に(1)を目的として生まれました。
のちに半導体技術の進歩や利用形態の拡大とともに(2)ノウハウのソフトウェア化と秘匿や(3)ネットワーク利用によるセンターやクラウド連携へ役割を拡大してきました。
組込ソフトウェアが使用されている例
組込ソフトウェアは、今や通信、放送、交通機関、産業機器、家庭用電化製品などエレクトロニクスが利用されるほぼすべての機器や装置で用いられています。
組込ソフトウェアはハードウェアだけでは実現できない機能や性能、柔軟性、小型化、低コスト、低消費電力を実現するだけでなく、センターやクラウドと連携することにより最先端のデジタル技術をエッジ(ネットワークの端に位置する機器)において提供しています。
例えば身近な電子レンジも、解凍や温めを自動で行うのは組込ソフトウェアの仕事です。TVでも初期設定が自動で行われ、選局や画質調整を利用者が行うことはほとんどありません。さらに電子的な番組表を表示し録画対応にも対応します。これらはすべて組込ソフトウェアが実現しています。
スマートスピーカはクラウドと連携することで、高性能な音声認識・合成やそれを利用したさまざまなサービスを提供します。
自動車では非常に多くの組込システムと組込ソフトウェアが利用されています。エンジンやブレーキ、ステアリング、ミッションといった走りの根幹機能から、自動ブレーキや周辺・車内カメラなどの安心・安全機能、オートエアコン、ナビゲーションシステム、オーディオなどの快適装備、ネットワークに接続されて各種情報を共有するコネクテッド機能まですべてを組込ソフトウェアが実現しています。
汎用ソフトウェアとの違い
組込ソフトウェアの最大の特徴はハードウェアと密接な関係にあることです。
なぜなら特定の機器や装置というハードウェアに組込まれ、外見はそのハードウェアとして一体となり動作するためです。
ゆえに特定ハードウェアの機能を、そのハードウェアに許される条件(環境、動作条件、サイズ、消費電力、コストなど)の範囲内で確実に実現することが最優先事項となります。
一方、PCやサーバー、スマートフォン等で動作する汎用ソフトウェアは、ハードウェアの制約を持たないこと(ハードウェア独立)が理想です。
汎用ソフトウェアは可能な限りどのようなハードウェア上であっても、同様の機能を実現できることが望ましいのです。
例えば、ある電子レンジで動作する組込ソフトウェアが別のメーカーの電子レンジでも動作することは期待されていませんが、あるスマートフォンで動作する汎用ソフトウェアは別のメーカーのスマートフォンでも動作することが求められます。事実、複数の動作環境でもそのまま動作できる汎用ソフトウェアが存在します。
組込ソフトウェアが満たさなければならない条件は、もともとその組込まれたハードウェアが満たすべき条件でもあります。そのため、コンピュータシステムとしては非常に厳しい内容となることもしばしばです。
汎用ソフトウェアでは異常動作時の停止・再起動やシステムリブート、バグ修正のバージョンアップはありふれた事象です。
しかし、組込ソフトウェアは停止することが認められず、そもそも人間が接近することもできない条件も存在します。組込ソウトウェアの異常動作が、人命や社会インフラの停止に直結する場合もあります。
汎用ソフトウェアは動作するハードウェアで用意すべき計算資源(CPU, メモリ, ストレージなど)を自ら規定し要求できますが、組込ソフトウェアは内蔵されたハードウェアに許される計算資源の範囲内で機能を実現しなければなりません。そのため、しばしば限界まで計算資源を切り詰めて利用します。さらには高い信頼性を実現するため、誤動作を防ぐ仕組みや誤動作しても一定の機能が保証される仕組み(機能安全)が必要になることもあります。
組込ソフトウェアを学ぶメリット
ここまで解説したとおり、エレクトロニクス機器や装置にはほぼすべて組込ソフトウェアが用いられています。
これはすなわち、それら機器や装置の開発や保守に組込ソフトウェアの知識が不可欠であることを示しています。
さらに近年の高度化した機能やサービス(例えばIoTやAIによる会話など)では、組込ソフトウェアにますます新しい技術が求められるようになっています。
従来、ハードウェアの制約に縛られてきた組込ソフトウェアにおいても、進化が著しい汎用ソウトウェアの技術を積極的に活用することが求められるようになりました。
しかしながら、現状では多くのエンジニアに組込ソフトウェアの基礎知識・経験が乏しく、専門書やインターネットのさまざまな資料、情報を駆使して開発や保守を行っている現場が少なくありません。
エンジニアの高齢化や若手エンジニアの不足により、現場で基礎的な教育を行える時間的・工数的余裕もそれができる人材も不足しているのです。こうした場合、経験の浅いエンジニアはしばしば前例を踏襲しながら先輩エンジニアのアドバイスを頼りに仕事を進めてしています。残念ながらこうしたやり方では、最新技術を使いこなすのはもちろんのこと、画期的な製品や機能を実現するのは絶望的と言えるでしょう。
組込ソフトウェアを基礎から学び、さらなるエンジニアとしての成長を目指すことで、この閉塞的な状況を打破することができます。
組込ソフトウェアでよく使う言葉の概要解説
ここからは、組込ソフトウェア関連でよく使用される言葉の概要を簡単に解説します。
マイコン
1つの半導体チップにコンピュータとして必要な機能を内蔵した製品。組込システムで用いられる
割込み
逐次的に実行しているプログラムを優先度の高い処理要求で中断し、処理を切り替える仕組み
周辺回路
マイコンを動作させるために必要な回路と、組込システムの制御・情報送受に必要な回路
評価ボード、SBC(Single Board Computer)、SDK(System Design Kit)
マイコンや周辺回路を搭載したボード。ドライバ等も提供され評価や初期開発に利用される
リアルタイム処理
制限時間内に処理を終了させないと誤動作となる処理
組込OS(Operating System)
組込システムで用いられるOS。小型化した汎用OSやリアルタイム処理用OSがある
デバイスドライバ
組込OSで制御されるハードウェアとのインタフェースプログラム
開発環境、ICE(In-Circuit Emulator)
組込ソフトウェアの開発、デバッグ、評価の仕組み。組込システムとは独立して動作する
ミドルウェア、ライブラリ
一般的な処理や規格で決まった処理を行う定型プログラム。組込ソフトウェアに内蔵する
制御アルゴリズム
組込システムが制御を行うアルゴリズム。制御対象をモデル化することが多い
シミュレータ
ハードウェアを用いずに組込ソフトウェアを開発するため、ハードウェアを模した動作を行う
モデルベース開発
制御対象をシミュレータでモデル化し、複雑な制御を実現するための手法
組込ソフトウェアに関してより詳しく学ぶ方法
では現状の組込ソフトウェアに関すて勉強するためにははどのような方法があるでしょうか。
概ね以下の3つに分類できます。
- 専門書、雑誌、インターネットによる独学
- 学校、教育機関による講習
- 開発環境・ソフトベンダー、商社等の講習
これらを想定する教育内容で基礎的知識、応用分野の知識、最新知識にて整理すると、以下のような得失が考えられます。
学習方法 | 基礎的知識 | 応用分野の知識 | 最新知識 |
---|---|---|---|
1.専門書・雑誌、インターネットによる独学 | △ | × | × |
2.開発環境・ソフトベンダー、商社等の講習 | × | △ | 〇 |
3.学校・教育機関による講習 | 〇 | △ | × |
1. 専門書・雑誌、インターネットによる独学
専門書、雑誌による独学や学校・教育機関による講習は、基礎的知識の習得に適しています。
しかしながら、しばしば専門書(教科書)、雑誌の内容が長年更新されていないことや、背景や本質に言及せず知識を詰め込む傾向があります。
また、独学では質問もできず理由を推測するしかない状況が多々あり、自らのモチベーションを維持するのが困難になりがちです。さらに、これらの方法ではさらに踏み込んだ応用分野や最新知識については情報が得られないことも少なくありません。
逆にインターネットによる検索では、非常に偏った情報のみが詳細に記述されていることも多く、その根拠や真偽が不明な記事もあります。
2. 開発環境・ソフトベンダー、商社等の講習
開発環境・ソフトベンダーや商社が開催する講習は、本来の目的が自社製品の周知・販売にあります。
応用や最新知識として自社製品関連には多くの時間や情報が提供されるものの、基礎的知識にはあまり時間をかけない、または習得済として触れられない場合がほとんどです。
3. 学校・教育機関による講習
組込ソフトウェアに関する学習は、学校や教育機関が実施している講習でも学ぶことが可能です。
ただし、教育機関によっては情報が古い場合もあります。特に公的な学校な場合は情報の更新が遅い傾向が強いです。AIなどを用いた新しい技術は進化のスピードがとても速いため、最新の情報をもとに勉強を進めていく必要があります。
SATの技術者スターター講座「組込ソフトウェアの実践的開発入門」について
SATの技術者スターター講座100「組込ソフトウェアの実践的開発入門」は、24時間/365日いつでも受講できるWeb講座です。モチベーションを維持しながら受講者の理解度にあわせて進めることができます。
講座内容は以下のようになっています。
1. はじめに
2. 組込システムとは何か
3. 組込ソフトウェアのプラットフォーム
4. 組込ソフトウェアの基礎
5. 制御系と情報系システム
6. 開発
7. まとめ
総講義時間:5時間10分
この講座では、組込ソフトウェアの基礎的知識を丁寧に説明しながら、応用分野や最新知識にも言及したオリジナルのテキストを用いています。もちろん、特定のベンダーや製品に偏った内容ではありません。
この講座を受講して組込ソフトウェア開発の全工程を幅広く習得して、ぜひエンジニアとしてのスキルアップを目指してみてください。