ObjectSquare [2000 年 9 月号]

[組み込み記事]


非組み込み技術者の組み込み開発体験記



はじめに

ここのところ、組み込みソフトウェア業界ではオブジェクト指向開発の導入が活発に行われています。そういう流れを受けて当社にも組み込み関係の案件が目に見えて増えてきています。
というわけで、これまで、PCやワークステーションの世界でコードを書いてきた私も組み込みソフトウェアのプロジェクトに参加することになりました。
フツーの「非組み込みソフトウェア技術者」からみた組み込みソフトウェア開発についての感想を書いてみようと思います。


「組み込み」ってなに?

まず、「組み込みソフトウェア」って言葉って日本語として少し変じゃないですか?英語では Embedded software なんですよね。これが英語としてどうなのかは私はわかりませんが。
「組み込みソフトウェア」って聞くと、何に組み込んでるの?と考えるんだけど、何かに組み込むって意味ですよね。
なんかもうちょっと良い言葉はないもんでしょうか。


まずやったこと

組み込みシステム開発をするにあたって、私も自宅で組み込みシステムを探してみました。
テレビ、ビデオ、エアコン、炊飯器、FAX、携帯電話など、なんと組み込みシステムの多いこと。ソフトウェアというのは人類にとって強力なツールなんですね。
あと、なるほど!と思ったのは、デジタル時計が組み込みシステムだって事です。
これも考えてみれば当たり前なんですけど、ソフトウェアなんですよね。今まで時計だと思ってました。
日時計、機械式時計、クオーツ式時計、デジタル時計とテクノロジーが時計を変えてきたんですね。(遠い目)


カルチャーショック

プロジェクトに先立って、組み込みシステム開発に詳しい同僚に開発環境を説明してもらいました。
「PCでビルドした実行可能ファイルを ICE(In Circuit Emurator)で実行してデバッグするんだ。」

うんうん。そいつは俺でもわかりますよ。クロス環境ってやつですね。
それで、リアルタイム OS(RTOS)はすでにICEで動いているんだよね?

「違うよ。このシステムでは RTOS は実行可能ファイルに入っているんだ。」

え?特権階級にあるはずの OS が単なる実行可能ファイルに入っているんですか?

今回のシステムにはファイルの概念が無いものだったのでこういう構成になっていたのですが、確かにそれなら OS は実行可能ファイルに含まれるタスクだけをスケジューリングさえすれば良い。そういうOSのありかたもあるのか、と妙に納得。
そういえば、RTOS をリアルタイムモニタと呼ぶのを聞いたことがある。OS のカーネルをなんでわざわざリアルタイムモニタと呼ぶのと思っていたのだが、こういうことだったのか。

組み込み大陸ではシステムの総元締めであるカーネル様も単なるタイムキーパーなのでした。


並行動作するものといえば...

組み込みシステムではリアルタイム性の確保などのためにシステムを複数のタスクから構成します。
話としては知っていても、今まで並行動作するものと言えば完全に独立したプロセスやワーカスレッドくらいしか触れていない私にとっては複数のタスクが協調動作するシステムの設計は興味深いものでした。

タスクを責務で分割するというアプローチを取ると、それぞれのタスクがあたかも大きなオブジェクトのように動作します。これってとってもオブジェクト指向っぽいですね。私のオブジェクト指向開発の楽しみがまたひとつ増えたというところでしょうか。


制約が多い方が燃える?

市場での競争のために、組み込みシステムでもシステムは高機能化傾向にあるでしょう。
さらに、コンシューマ製品など、大量生産されるプロダクトに「組み込ま」れる場合、コンピュータハードウェアをできるだけ安価に押さえたいということになります。
で、リソースや演算の速度に関する制約の話が出てきます。そりゃ出るよな。

でも考え様によってはターゲットとするコンピュータシステムが年々新しくなるPCやワークステーションが恵まれすぎた環境という気もします。
メモリのフラグメンテーションのことなんか気にせずにいられたあの日をちょっと追憶

同僚いわく「それを克服してこその組み込みエンジニアですよ。」はい。精進させていただきます。


メカを動かすとなれば...


今回のシステムでは幸運なことにメカを動かすものでした。(なぜ幸運なのかは後述。)
メカを動かすとなれば、メカに対する理解が必要です。考えてみりゃこれは組み込みソフトウェアに特有なものです。

この他に、高速化のために計算の一部をICなどでやらせることもあります。
近頃では、ソフトウェアかハードウェアで実現するかを問わず、仕様設計、詳細設計を行うSpec C言語なども提唱されています。

「いけてる」組み込みエンジニアはメカトロニクスやエレクトロニクスの知識も要求されるのか。。。組み込み大陸が広く感じる今日このごろです。


ちょっと寂しい開発環境

各開発環境メーカーさんもがんばっておられますが、PCやWSに比べると組み込みシステムの開発環境は強力とはいえません。(コンパイラにバグがあることもそう珍しいことではありません。)
開発環境のマーケットのでかさに違いがあるから、とか、多種多様の開発環境に対応する必要があるからとか理由はいろいろ考えられます。
組み込みシステムではPCやWSで動作するシステムに比べてターゲットとなる環境がさまざまです。組み込みシステムにおいては、システムが動作するCPUが色々です。さらにCPUがカスタム化されていて、開発環境もカスタム化されたもので開発を行う場合もあります。
STLなんかが使えない環境だった場合、必要な機能は自作することになります。
ここでもやはり同僚いわく「それを克服してこその組み込みエンジニアですよ。」はい。精進させていただきます。。。


学んだこと

これまで述べてきた組み込みシステム開発の試練を別にしても、元々PC系のソフトウェアをやってきた私には何かと学ぶこともありました。

ソフトウェアのバージョンアップ=ROM交換、ソフトウェアが固まる=機器の故障という厳しい環境にいることもあって、組み込み技術者の品質に対する意識は高いです。(医療機器や航空機のソフトウェアでなくとも、リセットボタンのついた組み込みシステムというのはあまりありません。)
また、そういう理由からか、組み込み技術者はPC、Unix系の技術者にくらべて状態遷移図に親しんでいる気がします。
私は、状態遷移図は使うべきところで使えば、組み込み系に限らず強力なツールであることを再認識しました。


動くとうれしい

例えばプログラミング言語を学習する際には、実際に実行できる例題を使います。技術者が興味を維持するにはフィードバックが大事というところでしょう。
パソコン草創期の草の根プログラマーたちもグラフィックスとサウンドに夢中になったと言います。

さて、一部の組み込みシステムでは、メカを動かすという「おいしい」フィードバックがあります。なんたって画面の中だけでなく、本当に動きますからね。
私の回りにもメカを動かすのが大好きな「クミコマー」たち(組み込み技術者だから組み込mer)がいます。

私も今回のプロジェクトで自分たちの作ったソフトウェアでメカを動かすことができました。
さらにチームのみんなが作ったサブシステムやタスクが協調動作してメカが動いているのですから、心地よさもひとしおです。
かのクミコマーたちやMindStormやロボットコンテストに熱中する人たちの気持ちが少し分ったような気がします。


さいごに

一口に組み込みシステムといってもインダストリアル系などとも呼ばれるFA( Factory Automation )の分野からコンシューマ製品まで、その形態はさまざまです。ハードなリアルタイム性が要求されるシステムであれば、システムの設計の方法すら大きく変わってきます。

実は(一見地味なイメージもありますが...)、組み込みシステム開発の世界はエキサイティングです。例えばリアルタイムOSもまだまだ激しい勢力争いが続いています。オブジェクト指向の導入も盛んな開拓期にあるといえます。

また、携帯電話やカーナビなどのように組み込みシステムへの高機能化の要求はとどまるところを知りません。
こういう部分では組み込みLinuxやWindowsCE、組み込みJavaなどのPC、Unix発の技術の重要性がますます高まっていくでしょう。

組み込みエンジニアとPC、Unix系のエンジニアの交流も盛んになり、お互いが持つ良い文化を交換していくことになるだろうと思っています。

by ひくみこまー




© 2000 OGIS-RI Co., Ltd.
HOME HOME TOP オブジェクトの広場 TOP