組込ソフトウエア開発概説：OSの選定

<h2>■OSの選定</h2>
次に組込機器で使うOSについて考えましょう。最近は選択肢として以下のようなものが候補になるでしょうか。</br>

・OSなし
・iTRON系OS
・Linux
・Windows
・クラウド系RTOS

<h3>・OSなし</h3>
一般的に機能が少なくファームウエアが比較的シンプルであればOS未使用とするでしょう。ただ、ちょっとでも「こっちをやりながら、こっちの処理も同時に進める」のようなことをやろうとすると、途端にステートやフラグで状態を管理しながらメインループからちょこちょこ各処理を呼び出すプログラム構成になり、実装難易度が上がります。例えばUSBやネットワークで外部の機器と通信しながら自身も処理を行う組込機器となると、OSを導入した方がプログラム全体の見通しが良くなると思います。ただ、「自社で動きを把握しきれないプログラムをできるだけファームウエアに入れたくない」という理由で、高性能CPUを採用しながらも敢えてOSを使わないお客様もいらっしゃいます。


<h3>・iTRON系OS</h3>
組込機器向けに開発されたOSです。必要最低限の機能しか入っていないので非常に軽量で、あとは各組込機器が独自に必要なプログラムだけを別途追加する、という方針に基づいています。日本ではこの考え方が受け入れられて普及が進んだのでしょう。逆に、使わない機能が含まれている他OSが敬遠されたのかもしれません。トロンフォーラムの記事によると、2018年末の展示会でのアンケートではTRON系OSが利用実績トップに！という報告もあります。

https://www.tron.org/ja/2019/04/press190402/

ただ、これは日本のお話で、ワールドワイドで見るとiTRON系OSは超マイナーなOSのようです。いわゆる「ガラパゴス」状態ではありますが、だからと言って選択の優先順位が下がる要因にはなりません。各社、使用するCPUや要求仕様にちょうど良いという理由でiTRON系OSを選択しているのだと思います。以下は代表的な無償版OSで、組込機器に適用する場合は組込機器のユーザマニュアルなどドキュメントに著作権表示を記載する必要があります。</br>

トロンフォーラム　μT-Kernel
https://www.tron.org/ja/

TOPPERSプロジェクト　TOPPERS
https://www.toppers.jp/index.html

以下はOSベンダーが販売している有償版OSの例で、無償版にあるような表記義務はありません。また、専用のサポート窓口がありますので、不具合が見つかった場合やOSの導入や運用で迷ったときに確実に相談に乗ってもらえます。特に経験が浅いうちは有償版を選択した方が手間が少なくなると思います。

Cente　CenteRTOS
https://www.cente.jp/product/rtos/cente-rtos/

MiSPO　NORTiProfessional
http://www.mispo.co.jp/products/NORTi/Pro/

eForce　μC3/Standard
https://www.eforce.co.jp/uc3-standard/

なお、OS選定にあたっては「どのマイコンに対応しているか？」が重要になります。前回書いた通り、組込機器向けのマイコンは多種多様で、それぞれにマッチした（ブートストラップ含めた）OSが必要だからです。がんばれば自分でなんとかすることも不可能ではありませんが、ここに手間をかける意味はありません。素直に自分が使用予定のマイコンがOSの対応マイコンリストに含まれているか確認して、そのマイコン評価基板向けにカスタマイズ済みのOSを入手しましょう。対応マイコンリストにない場合、OSベンダによっては新たに対応してくれるかもしれませんので、問い合わせてみると良いと思います。

基本的には一連の処理を繰り返し行う「タスク」や、複数のタスク間で排他制御を行う「セマフォ」、タスク間のメッセージ通信を行う「データキュー」というサービスが用意されており、それらのサービスを使ったプログラムを書くことになります。以下はμITRON4.0仕様として公開されている仕様書です。

https://www.tron.org/ja/wp-content/themes/dp-magjam/pdf/specifications/ja/WG024-S001-04.03.03.pdf

ただし、実際には各社各OSで対応サービスの有無やエラーコードが異なる場合があるので、不安な場合は事前にユーザーズマニュアルを取り寄せると良いです。

★Centeでは...
執筆時点ではCenteRTOSはSTM32F7に対応しております。他CPUへの対応可否については以下よりお問い合わせください。
その他OSについてのご質問などもお気軽にどうぞ!
https://www.cente.jp/otoiawase/tech-entry/


<h3>・Linux</h3>
組込機器において、こちらもよく選択されるOSだと思います。通常のパソコン向けのLinuxディストリビューションと異なり、起動を高速化させる工夫、使用ストレージ・メモリサイズの削減がなされた「組込Linux」です。メリットが大きい分デメリットも大きく、どのデメリットを許容できるか、が選択のポイントになるかと思います。</br>

<b>メリット：</b>
　直ちに使用可能なあらゆるプログラムが揃っている
　RaspberryPiなど、市販されている小型ハードウエアがすぐに使える

<b>デメリット：</b>
　最悪応答時間が保証されていない（リアルタイム処理ができない）
　GPLに従い、求められた場合にファームウエアの全ソースコードを公開する責務を負う可能性がある
　トラブル発生時にユーザフォーラムは利用できるが基本自力でなんとかする必要がある（有償で保守してくれるケースあり）
　CPUにMMUというメモリ管理機能が必要で、必要RAM/ROMもそれなりに大きくなる（選択CPUが限られる）
　起動に時間がかかる（必要に応じて起動時間を短縮する仕組みが別途必要になる）

私から見るとどうもデメリットが大きくて選定しにくいのですが、例えばRaspberryPiを使うと決めたらもうファームウエアが全部ある状態に近い（ソフトウエア開発期間がとんでもなく短い）のが魅力でしょうか。また、詳細は次回書きますが特定のデバイスのドライバソフトウエアがLinux向けにしか用意されておらず、自動的にOSがLinuxになったケースも経験があります。


<h3>・Windows</h3>
マイクロソフト社は組込機器向けのWindowsOS「Windows Embedded」シリーズを取り扱っています。
ただ、組込機器と言ってもCPUはx86やx64をターゲットとしており、Windowsアプリケーションが動作するコンパクトなWindowsパソコンのイメージが強いです。これについては私も使用経験がなく、あまり語れることがありません...


<h3>・クラウド系RTOS</h3>
最近、IoTサービスを展開しているクラウド業者がIoTデバイス向けのOSを無償提供し始めています。

Amazon aws FreeRTOS
https://aws.amazon.com/jp/freertos/

Microsoft Azure RTOS
https://azure.microsoft.com/ja-jp/products/rtos/

OS以外にもIoTデバイスに必要な各種プログラムも併せて提供されており、開発する組込機器が明確に「AWS、Azureのクラウドと通信するIoTデバイス」であれば、これが一番安価で近道かもしれません。また、やはり無償提供のためトラブル発生時の専用サポート窓口はなく、ユーザフォーラムで相談することになります。そのため、組込機器のOSとしては現時点ではまだ手を出しにくいな、と感じています。
ただ、対応CPUも増えていますし、今後市場で揉まれて品質的・機能的に洗練されていけばこの状況も変わっていくでしょう。


以上のように、OSによってはCPUの選択肢が狭まることもあるので、組込機器の使用目的や機能規模からCPUとOS(なし含めて)を選択することになるかと思います。できるだけ小型のCPUで機能も限定されている組込機器であればOSなしか、iTRON系OSで実現するケースが多いと思います。

-----
■今日の閑話
私が入社したン十年前もうちの会社はネットワーク機器を開発していましたが、OSは社員自作のものでした。有償のOSが入手できた後も、OS自体に手を入れて独自にカスタマイズして使うなど、OSは割と自分達に近いソフトウエアだったように思います。時が流れて、今では「責任の分担」という考え方が主流になっています。お金がかかっても責任を外部に持ってもらえるならそちらを選択して、本当に必要な部分だけ自社でソフトウエアを開発して責任を持つ方がトータルお安く済むよね、という判断かと思います。


次回は「デバイスドライバ」です。


Cente：
https://www.cente.jp/