組み込み系の仕組みと3つの難点/ベテラン組込エンジニアが徹底解説

こんにちは、現役組み込みエンジニア歴20年以上のtomozoです。

 

今回は、組み込み系について詳しく解説します。

 

  • 組み込み系を目指す学生
  • 組み込み系に興味のある未経験の方

向けの記事となります。

 

これから組み込みエンジニアを目指すにあたって

組み込み機器の仕組みや

開発においてどういった難点があるのか分かっていれば、

勉強したり意識していきやすくなります。

また働き出したときもスムーズに対応していけます。

 

tomozo

私は就職当時ほとんど組み込み機器のことを知らなかったので苦労しました

 

この記事を読めば、

組み込み系の仕組み

組み込み系の難しいところ

分かるようになります。

 

途中で少しだけ技術的な内容にも触れますが、

なるべく分かりやすく書いていますので最後まで読んでいただけると嬉しいです。

 

組み込み系のソフトウェアとハードウェアの関係

組み込み系は、機器に組み込まれた専用のハードウェアで決まった動作を行います。

専用のハードウェアって何?

組み込み志望者

ハードウェアってなんとなく分かっているけど上手く説明できない言葉ですよね。

ハードウェアとは

辞書によれば、

 機械設備。機器。情報・理論などに対し、有形のものをいう。HW。⇔ソフトウエア。

 コンピューターの機器本体。入出力装置・記憶装置などの総称。HW。⇔ソフトウエア。

と説明されています。

 

特に組み込み系の業界では、

  • プログラムをソフト(ソフトウェア)
  • 電気周り・回路関係をハード(ハードウェア)
  • 機械・機構をメカ(メカニズム)

と分けて呼ぶことが多いです。

 

ハードウェアといったら、その時々で

①ソフトウェア以外を指す場合

②電気・回路だけを指す場合

があります。

①ハードウェア(メカ+電気)
②ハードウェア(電気のみ)
メカ 電気 ソフト

 

 

ハードウェアとは、ソフトウェア(プログラム)に相対する言葉で、

組み込み系ではソフトウェアを動かすのに必要な形あるモノ

って理解すれば大丈夫です。

組み込み機器は専用ハードウェアと専用ソフトウェアによって構成

A社の炊飯器 A社の炊飯器のハードウェア A社の炊飯器のソフトウェア
B社の炊飯器 B社の炊飯器のハードウェア B社の炊飯器のソフトウェア
C社の洗濯機 C社の洗濯機のハードウェア C社の洗濯機のソフトウェア

この上の表のようにそれぞれの組み込み機器は専用ハードとソフトの組み合わせでのみ正常に動作します。

 

A社の炊飯器のソフトウェアをC社の洗濯機のハードウェアに組み入れても、

C社の洗濯機のソフトウェアをB社の炊飯器のハードウェアにいれても

洗濯も炊飯もしてくれません。

動かないだけならまだいいですが、壊れたり暴走して発火したりするケースもあります。

 

一方、WEB系やアプリ系ソフトウェアは、

windows、mac、アンドロイド、iosの対応OSは依存しますが

どこのメーカーのパソコンでもスマホでも

ハードウェアに関係なく動くのが普通ですね。

組み込み機器にはどんなものがある?

家電、デジタル機器 炊飯器、洗濯機、エアコン、デジタルカメラ、プリンター、テレビ、ゲーム機、スマホなど
輸送機器 自動車、カーナビ、航空機、エレベータ、電車など
一般産業機器 コピー機、産業用ロボット、工作機械、測定器、OA機器など

これらはほんの一例にすぎず、世の中には多種多様なモノがあり、

身の回りで電気で動く

電子機器は大体組み込みソフトが入っています

 

もし身の回りで壊れたり買い替えるので捨てる組み込みのモノがあれば、

分解して中身を見てみると、

ソフトウェアは見えませんがハードウェアの構造がわかったりして

勉強になり知識と理解が深まりますよ。

特にメカは考えやすいです。

 

ちなみに、組み込みソフトウェアが普及する前は、ハードウェアだけで

機器が動いていました。

融通が利かず、使い勝手は良くなかったでしょうが

ハードウェアだけでモノを作る先人の技術も感心したことがあります。

 

専用ハードウェア上で具体的にどうなっているのか

もう少し、専門的な内容に掘り下げてみましょう。

tomozo

難しいと感じる場合はここはサラッと読み流してもらって問題ありません

ハードウェアにはCPUというデバイスがある

組み込み機器に取り付けられている電子基板の中に

マイコン(マイクロコンピュータ)と呼ばれるCPUが搭載されています。

tomozo

CPUとは人で例えると頭脳にあたります

そのCPUの中にあるROM(Read Only Memory)というメモリ領域に

プログラムを書き込み動作させます。

CPUのメモリの中はきちん割り振られたアドレス順に

「0か1」のデータが並んで保存されています。

この0,1(2進数のバイナリデータといいます)で表現される機械語をCPUは理解することができ、

例えば「0001」なら「メモリAのデータをメモリBに移す処理をする」なんてことを行っています。

機械語はCPU毎にあらかじめ決まっており、アセンブリ言語で表現することができます。

 

組み込み系プログラマーはこのCPUに書き込むプログラム

を作成するのが仕事の一つとなります。

 

うーん、むずかしいわね

組み込み志望者

tomozo

組み込み系でCPUを一から作るわけではないので、初めはなんとなく分かっていれば大丈夫ですよ!

具体的な例として炊飯器で考えてみよう

炊飯器には人が押す「炊飯開始」スイッチがついています。

CPUはヒーターとスイッチとつながっています。

専門用語で説明すると、

CPUの入力ポートにスイッチ、

出力ポートにヒーターが接続されているって表現します。

 

スイッチが押されると、CPUに押されたよって信号が入力されます。

するとCPUは「炊飯開始」の命令を受けて、

ヒーターに「加熱開始」の信号を出します。

 

タイミングチャートというものを書くと

以下のようになります。

横軸が経過時間、縦軸がスイッチとヒーターの状態となります。

 

参考までに

スイッチの入力をport_in1

ヒーターへの出力をport_out1

という名前にするとプログラムは以下のようになります。

・C言語というプログラムで書いた場合

if (port_in1 == 1) {  //スイッチが押された?
  port _out1 = 1;   //ヒーターON
}

・アセンブリ言語で書いた場合

BTST port_in1     ;スイッチが押された?
JNC JSR01         ;「いいえ」ならJSR01にジャンプ
BSET port_out1    ;ヒーターON
JSR01:

このようにプログラマーが書いたプログラムを炊飯器のCPUの中に

書き込んでおくことで炊飯開始スイッチを押すとヒーターがONされる

という仕組みになっています。

 

組み込み系プログラム特有の難しさ3点

組み込み系プログラムは以下の3点の難しさがあります。

  • 高品質で安全なプログラム
  • 処理の早さと容量の少ないプログラム
  • メンテナンスに時間と費用が膨大にかかる

一つずつ解説します。

高品質で安全なプログラム

例えば、上の項目で炊飯器の例を挙げましたが、

スイッチが押されたらヒーターをONするだけだから

すごく簡単!って思いますよね。

 

しかし、以下のようなケースを考えておく必要があります。

  • スイッチの押しっぱなしや連打されたときの処理
  • ヒーターが壊れていないかチェックする
  • ヒーターの加熱・保温制御と温度監視

このように単純に入出力がたった一つでもイレギュラーなケースまで想定して、

高品質で安全なプログラムにすることが求められます。

 

実際の組み込み機器では考えるパターンがすごく多くなります。

 

デバッグし始めると正常時は問題なくても、センサや基板の素子

が壊れたときに想定していなかった現象が起きることがあります。

注意深くよく考えることが必要になります。

処理の早さと容量の少ないプログラム

組み込み系プログラムは処理の早さと容量の少なさも要求されます。

 

理由は、組み込み系で使われるハードウェアは製品コストを抑えるため

できるだけ安価な構成にします。

安価なハードウェアにするほど処理速度も遅く、メモリ容量も少なくなります。

その状況下で動くプログラムが必要になるからです。

 

例えば、必要な機能以外に

  • 数μs(マイクロ秒)処理が早くなる
  • メモリが少なくて済む

なんてことも考えながらプログラムします。

 

パソコンで動作するプログラムを作る場合、

豊富なハードウェアがあるので、速さとかメモリ

なんてあまり気にしないので組み込みとの違いの一つです。

 

優秀なエンジニアほど効率のいいプログラムを書けるものです。

 

新人のころはきちんと動くプログラムを書くことが何より重要ですが、

慣れてきたらいろんなプログラムを見るようにしたりして

テクニックを学んでいきましょう。

メンテナンスに時間と費用が膨大にかかる

組み込み系プログラムに不具合があると以下の問題に直面します。

  • バージョンアップが簡単にできない
  • リコールや返品・出荷停止など大きな影響が出る

なにより致命的なのは不具合によりユーザーの信用を失ってしまうことです。

 

例えば、車などでニュースになるような大きな不具合(リコール)があると

一気にブランドイメージが悪くなります。

たまたま自分の購入した車に不具合あったりしたら

次回購入するときは、そのメーカーの車は選びたくないとかありますよね。

 

また不具合対応として、組み込み系プログラムは

  • 修理のサービスマンが客先に行って修正プログラムを書き込む
  • メーカーや販売店に送り返してもらって修正プログラムを書き込む

といった手間と不要な費用が発生します。

 

パソコンやスマホのアプリケーションソフトの場合、

インターネット経由で修正版にアップデートすれば改善できます。

比較的簡単に対応できるので、対応の容易さが異なります。

 

その他、不具合が見つかると早く原因を見つけ不具合を解消するのはもちろんですが、

解消するまでの間、機器が使えなくなったりすると損害が出たりすることもあります。

 

私自身も多くの台数を作る機械で致命的なプログラムのバグを出してしまい

全数バージョンアップしなくてはいけない状況になったことがあります。

 

tomozo

私も十分テストしたつもりでも新しい機器をリリースするときは何年経験しても緊張します。

 

組み込み系・制御系の違い

求人案件などで「組み込み系」「制御系」って言葉で募集されることがあります。

両者に明確な違いはなく、組み込み系をやっていく上で制御系も必ず必要になります。

ネットで調べてみてもサイトごとに微妙に解釈が異なっています。

 

あえて分けるとしたら、以下のようになります。

組み込み系 機器の根本となる部分(ソフトウェア)を作り機器に組み込む
制御系 その機器全体のシステムを制御する部分(ソフトウェア)を担当する

 

組み込み系だから制御系はできない(もしくはその逆)とか聞いたことがありません。

ですから難しく意識しなくて問題ありません。

知識の一つとしてこういう言葉があるんだ位に思っておけば大丈夫です。

 

まとめ

専用ハードウェアであらかじめ決まった動作行うのが組み込みソフトウェア

専用ハードウェアのCPUの中にあるROM(Read Only Memory)というメモリ領域に組み込みプログラムが書き込まれている

組み込み系プログラム特有の難しさは以下の3点

  • 高品質で安全なプログラム
  • 処理の早さと容量の少ないプログラム
  • メンテナンスに時間と費用が膨大にかかる

組み込み系・制御系は言葉の違いだけで大差無し

 

組み込み系について体系的に知りたい方は、こちらのまとめ記事も見ていただけると嬉しいです。

組み込み系とは?現役組み込みエンジニアが解説【学生・若手社会人向け】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA