OSやミドルウェアを使わない組み込みシステムでは、当然その代わりになるソフトウェアを自分で開発する必要がある
前回まではハードウェア寄りの話をメインに書いてきましたが、今回からはソフトウェアについて書いてみたいと思います。
第2回の「組み込みシステムって何?」で書いたように、組み込みシステムは非常に広範囲なものです。それらのシステムの中に組み込まれるソフトウェアも広範囲なもので、一言で組み込みソフトウェアとはこれだといい切れるものではありません。
以前にも書いたように、組み込みシステムのエンジニアは7〜9万人不足していて、そのうちの約60%がソフトウェア技術者の不足だといわれています。組み込みソフトウェアのエンジニアは多岐にわたるスキルを要求されている一方で、C言語やJavaのプログラミングができるだけで組み込みソフトウェアのプログラマだと思い込まれている方もいるようです。
これは非常に危険なことだと思いますし、こう感じているのは筆者だけではないようで、以下のようなさまざまな組織や団体がスキルアップや人材育成の活動をしています。
このような組織・団体ではいろいろなセミナーを行っていますし、人材派遣関係の企業でも組み込みソフトウェア技術者の教育に力を入れるようになってきているのは、うれしいことだと感じています。
なぜ組み込みソフトウェアにこれだけに力を入れる必要があるのかは、人材不足も確かにあるでしょうが、全体のシステムを理解してハードウェアもソフトウェアも理解しているエンジニアが技術を伝承しないまま退職していったり、管理部門へ異動したりしているからではないでしょうか。
冒頭から脱線しました。ソフトウェアの話に戻しましょう。
よく組み込みソフトウェアは図1のような構造だといわれています。
すべての組み込みシステムで、ソフトウェアがこのような構造になっているわけではなく、メモリ容量、処理スピード、開発コストや保守性の関係で(使いこなす技術力の関係もあります)リアルタイムOSやミドルウェアを使わず、アプリケーションだけで動作する組み込みシステムも世の中には多数存在しています(図2)。
携帯電話や通信機器だけのソフトウェアを作っている人には多分信じられないことだと思いますが、これも組み込みシステムの現実です。ミドルウェア(デバイスドライバ類も含む)もOSもなくてソフトを作るとなったときに必要になってくるのが、前回まで書いてきたハードウェアの基礎知識になるわけです。
OSもミドルウェアもないわけですから、当然その代わりになるソフトウェアを自分で作ってやる必要が出てきます(これらのソフトウェアをファームウェア=Firmwareと呼ぶこともあります)。
それでは実際にOSなしでソフトウェアを作るとしたらどうなるかですが、まずその組み込みシステムが何をするものなのかを理解しなければなりません(要件分析)。
次に、その要件を実現するにはどんな機能を持たせるべきかを考えます(機能分析)。
ここまではOSがあってもなくても同じで、組み込みシステムに限らずIT系のソフトウェアの開発でも必要な作業です。
機能分析を行うときに、組み込みシステムならではの検討が必要なのは、ハードウェアをどう使ったらその機能が満足できるかです。もし、現状のハードウェアだけでは実現できないと判断したら、ハードウェアを変更・追加するかソフトウェアだけで実現可能かを考える必要があります(ハードウェアとソフトウェアのトレードオフ)。
システムを考える(設計する)ときに、当然必要な機能を満足するようにハードウェアは設計されているだろうと思われがちですが、ハードウェア設計者とソフトウェア設計者のコミュニケーションがうまくいっていないと、ソフトウェア技術者が望むハードウェアになっていないこともありますので、注意してください。
要件を満たす機能が実現できると判断できたら、次にOSの代わりになるものが必要なのか、それとも処理を単純に繰り返せば済むのかを検討します。何をもってOSの代わりになるものが必要だと判断するかは難しいですが、タスクやプロセスが複数となり並列に処理をする場合や、ある時間タイミングで必ず処理するものがあるような場合は、OSの代わりになるものはあった方がよいでしょう。
ハードウェア割り込みとタイマ割り込みがあれば十分だという場合も、本当に割り込み処理だけでよいのかは慎重に検討してください。「割り込みが入っても現在の処理をある時点まで継続させたい」などという要件がある場合は、単純な割り込み処理だけでは対応できないことがよくあります。
また、MPUが持っているタイマの本数は限られていますので、それより多くのタイマが必要な場合も同様です。以上をまとめると次のようになります。
このあたりを目安に、OSの代わりが必要かどうかを判断すればよいと思います(実際には異常発生時にも対応できるよう、OSの代わりはあった方がよいでしょう)。
ここまできたら、あとは実際に組み込むソフトウェアを設計すればよいのですが、この設計のステップを飛ばしていきなりソフトウェアを作り始める人もいて、これが後々ソフトウェアのバグの原因になることも多いようです。
ソフトウェア設計とは何かについては詳しくは説明しません。各企業や部門でも設計手順や設計ルールがあるでしょうし、ISO 9000やCMMIなどを実践しているところでは厳密なやり方があるはずです。
Windows上やLinux上で動作するソフトウェアと違って、自分でハードウェア(MPUも含む)をどう動かすかを考えなければならないのが、組み込みシステムのソフトウェアエンジニアです。
今回はOSレスで組み込みソフトを作る場合の第1ステップを書きましたが、次回は組み込みシステムならでのソフトウェア(組み込みソフトウェアに要求されるもの)を書いてみたいと思います。
先日、ある友人と飲む機会があってその席で出てきた話です。
「C++が組めれば組み込みソフト屋になれると教えているところがあるそうだよ」
「C++を組めるってことは、オブジェクト指向の考え方が分かっていて、クラス設計もできて、インスタンス設計もできるってこと? それはすごいね」
「そうじゃなくて、クラス設計もインスタンス設計も誰かがやってくれるからいいんだって」
これが事実だとすると、恐ろしいことだと筆者は思いますが、皆さんはいかがでしょうか。
ご意見、ご要望などがありましたらできる限り取り込んでいきたいと思いますので、下記までメールをお送りください。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.