社員ブログ

印刷

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

「ソフトウェア」という言葉の範囲は広く、いくつかのグループに分類されます。

組み込みソフトウェア」は、聞き慣れない言葉だと思います。

身近なソフトウェアと言えば 「エクセル」 や「ワード」など思い浮かべる方も多いと思います。これらソフトウェアは「アプリケーション」と呼ばれているグループです。
アプリケーションは 「Windows」などのOS上で動作するソフトウェアで、対象となるハードウェアは一般に「パソコン」と呼ばれる装置です。

では、「組み込みソフトウェア」とは、どういうものなのでしょうか。

それは「電子機器に組み込まれるソフトウェア」のことを指します。

電子機器と言われてもピンと来ない方は、スマートフォン、洗濯機、電子炊飯器、タブレット等を思い浮かべてください。身近に存在する様々な機械が、「電子機器」に該当します。

最近では電子機器に組み込まれるソフトウェアを「ファームウェア」と呼ぶ傾向にあります。

ファームウェアとは本来、ハードウェアとソフトウェアの中間に位置する物で、橋渡しの役目を行うソフトウェアの総称です。組み込みソフトウェアがハードウェアを制御するソフトウェアだけで成り立っている訳ではありませんので、厳密な意味でイコールとするのは正しくありません。

組み込みソフトウェアが、ハードウェア寄りのソフトウェアであることから、そう呼ばれる傾向にあるのかも知れません。(以下の説明では組み込みソフトウェアをファームウェアと呼びます)

ここからは、ファームウェアを製作する側からの視点を元に説明します。

ファームウェアの動作対象となるハードウェアは独自性の強いユニークなものが多い傾向にあります。ユニークである理由は、機器毎に独自の設計を行うためです。携帯電話を例にとってもメーカー毎に独自のスペック=異なるハードウェアを使用しているのがわかると思います。ジャンルが同じでもハードウェアは同一ではないのです。

また、ハードウェアの規模やコストも多種多様であり、OSを利用しない小規模で安価なものや、近年はパソコンに類似した仕様のハードウェアも小型化が進みOSを搭載できる規模のものも多く見受けられるようになりました。

OSを利用できるハードウェア規模でのファームウェア設計はアプリケーション感覚(※1)で行えることが多く作りやすい反面、ハードウェア規模が大きくならざるを得ない傾向にあります。
(ハードウェアの規模が大きいということは製造コストも高くなる事を意味します)
※1 OSの提供する機能を利用できるため、ハードウェア制御に関する知識が必要最小限で良い。

搭載するOSは規模によって選択します。

OSの規模OSの種類ハードウェアの規模
大規模 Windows、Linux パソコンに準じた仕様やメモリ、CPU資源規模が必要
中規模 TRON、組み込みLinux、Android 規模の小さいOSが動作可能な中規模構成
小規模 OSなし
独自のマルチタスクモニタ等
最小限のシンプルなハードウェア

OSを利用できないハードウェア規模(OSを必要としないジャンル)では、APIやライブラリなどの機能が基本的に提供されません。
ハードウェアの制御は全て自ら製作する必要がありますので、基礎レベルの回路図を読む知識や、LSIを直接制御する方法等、ハードウェアに関する知識が不可欠となります。

ファームウェアの開発に利用する言語は、小規模なハードウェアが全盛であった時代のアセンブリ言語に加え、近年ではCやC++等の高級言語を利用できるようになりました。
アセンブラに対して比較的取り扱いが容易になったとはいえ、パソコン上でのアプリケーション開発では必要の無い知識が新たに必要となります。
それは、自分の設計したソフトウェアが、メモリ上へどのように格納されるのかを把握しなくてはいけないということです。

パソコンで動作するアプリケーションは全て読み書き可能なRAMという1種類のメモリにロードされて動作しています。
メモリへどのように格納される等を、アプリケーション設計者も基本的に意識しません。

これに対してファームウェアは、実行コードや固定データをROM(電源をOFFしても情報が消えないメモリ)に格納し、プログラム動作中に変更する変数などはRAMに割り当てるなど、ファームウェア設計者が意識して管理する必要があります。
このようなメモリ配置の検討もソフトウェア設計の一部です。
高級言語コンパイラがソース記述によってどのようなオブジェクを生成するのかといったような、このように普段意識する必要のない、より踏み込んだ知識が必要となります。

OS上で動作するアプリケーションは誰かが(OSやドライバ、ライブラリ等)整えてくれているお膳立てを前提に動作しています。
ファームウェアはそのような保護が得られない分、ハードウェア寄りの知識やツールに関する踏み込んだ知識が必要となります。

ソフトウェア部品を含め「1. 一から全てを作らなければならない」と捉えるか、
それとも「2. 全てを自分で創造できる」と捉えるか。

捉え方は人それぞれです。Let's positive thinking!

2.に賛同できるとお考えの方は、ファームウェア技術者向きかも知れません。

ソフトウェアは無形なもの。触れることは叶いません。
ファームウェアも実際に触れることはできませんが、機器に組み込まれる事でより身近な存在となります。

思い浮かべてください。
ウィンドウ上に表示されているボタンをマウスで押した時の印象と、機器のボタンを指で押したときの印象の違いを...。
今日も身近なところでファームウェア(組み込みソフトウェア)は頑張っています。

PAGE TOP