組み込みまするβ

組み込みソフトウェア初学者向けブログ

組み込みシステムとは?

組み込みシステムは多種多様で”特定用途専用システム”などの想像しにくい説明が多いと思いますが、 ソフトウェア技術者の目線から組み込みシステムをいくつかの視点で観察してみましょう。

システム規模

汎用OSを搭載した大規模システム、シングル/マルチプロセッサで構築されたリアルタイムシステム、 数十~数kBytesのRAMしかない1チップマイコンを採用した小規模なシステム等もあります。

開発言語

所謂OSレス環境であればアセンブリC言語C++がメインで、 webサーバ等も担うならHTMLやJavaScriptを使うこともあります。 汎用OSに近いものが載っているなら、JavaPython等も使えます。

品質

人工衛星発電所、通信インフラ設備等の高い信頼性が求められるものから、 不具合修正や機能追加等のアップデートを前提としたシステム、 先行者利益を得るために信頼性よりも早くリリースしたい場合や、 コスト最優先でアップデート機能を搭載しない極小規模なシステムもあります。

出荷数量

出荷する数量も様々で家電のような数万台規模、放送機器のような数千台規模、 高額な製造装置等の数十台~数台、研究開発目的の一品物システム等があります。

ドメイン知識

開発するものによって求められる知識は当然のことだが異なります。 例えばドローンの姿勢制御をする知識と、映像や音声コーデック、 ステッピングモーターやソレノイドの制御等、本当に様々です。 とはいえ、規模の大きなシステムの場合は必ずしも全員がドメイン知識に精通している必要はなく、 コア技術については専門のチームや個人が担当し、 汎用技術が必要な部分は共通技術に長けた人が担当する等の役割分担を行うのが一般的かと思います。

制約

メモリサイズ等の制約だけでなく、(ハード/ソフト)リアルタイム応答、 システムとしての起動時間等の様々な制約があります。 ソフトウェアの開発環境的にもC89/90、C++98/03で開発しなければならないといったコンパイラの制約等もあります (出荷後の製品メンテナンスの関係等)。

システムとしての消費電力、スペースにも制約があり、数量によっては電力コスト、スペースコストも考慮しなければなりません。

デバッグ方法

高機能なデバッガを使用できる場合もあれば、 シリアル出力が開通するまではLEDの点灯、消灯でデバッグしなければならない場合もあります。 リアルタイム動作を維持しながらのデバッグだと、ログの出力結果を解析してデバッグすることもあります。

バランス

上記にあげた項目は相互に関連を持つ場合が多く、開発対象のシステムによってバランスは様々。 例えば出荷数量が多く、アップデート機能を無くして原価を下げ、利益を上げたいといった場合は高品質でないと成り立たない等。 更に複数種類の製品を開発するならば共通化、 後継製品の開発も考慮する必要があるなら継続的にメンテナンスしていける品質にしなければなりません。

今現在、専門技術者でなくとも手軽に市販マイコンボードで安価に組み込みシステムを開発できるようになっていますね。 一般的には出荷数量が少なければ市販のマイコンボード等で対応することも考えられなくもないですが、 多くなるに従って専用基板を起こして開発する方が原価が安くなり利益が得られるようになります。 業務的になるに従い、スペースコストや電力等のランニングコスト、アップデート形態等、実際の運用まで考慮して開発するのが一般的です。 機能性だけならmbedやArduinoRaspberry Piで同じことが手軽に実現できるシステムもあるでしょうが、 出荷数量や運用イメージまで考えると実現方法も大きく変わってくるということですね。

具体的にはモバイル系デバイス等の開発であれば、 バッテリ駆動の運用イメージで低電力マイコンを採用し、C言語で開発すると1週間駆動できるけど、 Raspberry Piベースでは1時間も駆動できないといった事例ならわかりやすいでしょうか。 ユーザによっては市販マイコンボードで開発するのが最適解になることもありますが、 「今時は市販マイコンボードで開発するのが一般的」ということではなく、 開発対象次第で様々な要素から最適解を見つけ出すのも技術者の仕事です。

組み込みソフトウェア開発の必要な知識

開発対象次第で必要な知識はどうしても異なってきます。 しかしながらドメイン知識を除き、業界や規模、システム構成などに共通点があれば、 必要とされる知識をある程度定義できるのではないかと思っています。

続く...

embed.hatenablog.com