大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

続・組込みベースのC++って何?

著者:高木信尚
公開日:2018/02/02
最終更新日:2018/02/02
カテゴリー:技術情報 雑記

高木です。おはようございます。

昨日に引き続き、「組込みベースのC++」というフレーズについてです。
前回はざっくりと全体を眺めただけでしたので、今回はもう少し具体的な話をできればと思います。

そもそもこの「組込みベースのC++」というフレーズですが、馬詰から聞いたときは、SESの営業から技術者のスキルについて聞かれたようなのです。
そうした経緯もあるため、今回の「具体的な話」はSESでマッチングする上でのスキルという観点から攻めてみたいと思います。

マッチングする上でのスキルという観点でも、昨日書いたような大まかな分類は重要になります。
WindowsやLinuxを使うものなのか、他の組込み向けOSを使うものなのか、あるいはベアメタル(OSなし)なのかです。
組込み向けOSといっても、VxWorksなのかμITRONなのか、それともAUTOSAR OSなのか、もっと別のものなのかもあるでしょう。

何かひとつでもリアルタイムOSの経験があれば、他のリアルタイムOSにも応用は利くと思います。
逆に、そうした応用が利くことも必要な能力のひとつではないかと思います。

開発環境の経験も重要になるでしょう。
具体的には、Eclipseなどの一般的な統合開発環境ベースのものもあれば、ルネサスのCS+などの半導体メーカー純正ツールもあります。
Qtのようなフレームワークを使う場合は、それに応じた統合開発環境(Qtの場合ならQt Creator)を使うこともあります。
テキストエディタとコマンドラインツールで開発することも少なくありません。

テキストエディタとコマンドラインツールで開発する場合でも、デバッガだけはGUIが使えると便利です。
組込み向けのデバッガも多種多様なものがあり、独自のGUIを持っていることも多々あります。
一方で、GDBなどをコマンドラインで使うこともないわけではありませんし、シリアルポートだけでprintfデバッグするしかない場合すらあります。

リッチなGUIを備えたデバッガであっても、Visual Studioのような使い勝手を期待していると失望させられることも少なくありません。
最近のデバッガはかなりよくなりましたが、フルICEが当たり前だった昔にくらべてJTAGなどでは取得できる情報に限界があります。
そうした環境に慣れているかどうかもスキルのうちでしょう。

別の切り口として、システム全体のどの階層に対応可能かということもあります。
一番上のアプリケーション層であれば、組込みでもPCでもそんなに変わらないということはあります。
それでもメモリの制限などはありますので、まったく変わらないというわけではないのですが、まあ何とかなるでしょう。

一番下の階層であるデバイスドライバ層の開発では、C++を使う機会はそう多くないと思います。
使ったとしてもCと変わらないような書き方をすることになるかと思います。
では、C++だけではなくCの経験もあれば大丈夫かというとそういうわけではなく、ハードウェアの知識が不可欠になりますし、それなりにノウハウが必要になります。

前回も書いたように、組込みでC++を使用する場合、実行時型識別(RTTI)や例外処理が使えないことがあります。
RTTIはなくてもどうにかなりますが、例外処理が使えないと、これまで蓄積されたC++の多くのイディオムが使えなくなります。
RAIIなどの重要なイディオムも、使えないとはいいませんが、まったく異なる実現方法を使わないといけないでしょうし、その方法はとても確立されているとはいえません。

その他、開発手法についても、特有の流儀というか文化があるようにも思います。
これについては、そんなに大したことではなく、また現場によってもある程度変わりますので、最低限の適応能力があれば何とかなるのではないでしょうか。

私は「~って何?」というタイトルの記事を書くことが多いですが、これは「~とは」と解説を行うことことが目的ではありません。
多くは、私自身が疑問に思うことについて、「どういうことだろうか?」といろいろ考えた内容を書き留めています。

今回と前回の記事は解説的になりましたが、私自身が整理を行うためにいろいろ書き留めただけです。
「組込みベースのC++」というのが一体何を意味するのか、ここまで考えても満足な結論は導けていません。
このようなフレーズを営業からいわれたとき、一体どう解釈すればいいんでしょうかねえ。

コメントは受け付けていません。

上に戻る