eForce社の公式HPでも開発者が書いた技術記事を公開しておりますので、ぜひご覧ください。
1.FreeRTOSとμITRON を比較
1.なぜ、FreeRTOSとμITRONを比較するのか
FreeRTOSとはオープンソースのRTOS(リアルタイムOS)で、2017年にAWSに買収されました。昨今はIoTやクラウド技術の関心が高く、AWSとの連携が容易にできるFreeRTOSが注目されています。一方、μITRONは日本国内でトップシェアを占めるRTOSの仕様です。
二つの対応ミドルウェアの違いを表1に示していますが、機能の有無で比較をすることは難しいです。そのため、本記事では、国内で多く使用されているμITRONとFreeRTOSの細部の違いも含め説明していきます。
※μITRONはミドルウェアのサポートに関しての仕様が存在しないため、eForce社製μC3で比較
2. μITRONとは
μITRONはオープンアーキテクチャをを採用し、公式サイトで使用が公開されています。各OSベンダやアカデミックな機関はこの仕様に準拠してRTOSを作成しています。
RTOSの機能としてはマルチタスク処理や、排他制御、メモリ管理、タスク間通信などを採用しています。必要なAPIや変数定義も仕様として定められているため、異なるベンダやアカデミックな機関が作成したμITRON準拠のRTOSでも大きな違いはありません。
μITRONは、メモリやCPU性能の制限を考慮し、システムコールのAPIを標準化しています。必要最低限の機能のみ実装できるような仕様であり、図1のように、RTOSに必要な機能をプロセッサやアプリケーションに適応する形で機能を削減します。APIの実装内容も仕様として決められていません。
※μITRON Ver4.03.03仕様書の「1.3 ITRON仕様の設計方針」から抜粋
図1, μITRONの弱い標準化
プロセッサやアプリケーションに依存する形でRTOSを変えますが、サービスコールの関数定義や使用する変数定義は共通です。これによりRTOSの概念や用語の共通化が可能で、今後のエンジニアの教育に役立ちます。
μITRONは国内でトップシェアを持ち、様々な機器に採用されています。加えて、μITRON準拠のRTOSを開発しているOSベンダは、TCP/IPプロトコルスタックをオプションで用意していることも多いです。よって、インターネットと接続が可能なペリフェラルを用意した評価ボードを使用することで、クラウドとの連携も容易になります。
μITRONとT-Kernel 国内におけるRTOSカーネル仕様について紹介
3.FreeRTOSとは
FreeRTOSはAWSのサービスの一部として公開されているRTOSです。AWSに買収されたことで、MITライセンスがとなり、商用利用が無料になりました。仕様はAWSとFreeRTOSの公式サイトで公開されています。
また、AWSのサイトにはユーザーズガイドもあり、FreeRTOSはAWSとの連携に優れています。以下の画像のように、AWSとFreeRTOSの入門用の評価ボードを販売しているハードウェアベンダもあり、AWSのサイトから、これらのハードウェアに合わせたSDKのダウンロードも可能です。
画像元:Renesas RX65N Cloud Kit
Marvell MW302 IoT Starter Kit Powered by AWS
さらに、AWSのサイトからクラウドとの通信用の証明書を発行し、SDKをビルド・実行することで、すぐにインターネット経由でAWSへデータを転送できます。機能面では、μITRONと同等のマルチタスク処理・排他制御・タスク間通信が可能です。細かな仕様の違いについては比較時に説明します。また、FreeRTOSのサポートはフォーラムサイトを通じて開発元と連絡が取れます。
2.FreeRTOSとμITRONの違い
FreeRTOSとµITRONのカーネル機能
次の表2にカーネル機能の対応表が示されています。
表2はµITRONの機能をもとに比較したため、一部FreeRTOSでは使えないものもあります。ただ、双方ともにマルチタスク処理・排他制御・タスク間通信やメモリ管理を行うことは可能なので、必要最低限の機能はどちらも網羅しているといえます。
FreeRTOSとµITRONの機能の違い・関数仕様
また、機能の細部においても違いがあります。例えば、OSで使用する関数仕様の違いです。FreeRTOSでタスク間通信を実現するメッセージバッファと、μITRONでタスク間通信を実現する同名の機能のメッセージバッファでは、データの受信を行うAPIに図3のような違いが存在します。
もう少し例をあげると、FreeRTOSで、タスクを起床待ち状態から待ち解除するAPI(vTaskResume)は、起床対象のタスクが実行状態となっているときに呼び出しても効果はありません。しかし、μITRONでタスクを起床待ち状態から待ち解除するAPI(wup_tsk)は、起床対象のタスクが実行状態となっている場合も有効であることが多く、対象となるタスクが次に休止状態に変更されるAPIが呼ばれた後、すぐに実行状態に変更されます。
具体的に説明しますと、図4のように、共に待ち状態ではないタスクBとタスクAが存在し、タスクBがタスクAにむけて起床待ち状態から待ち解除するAPIを呼び出します。
その後に、タスクAが待ち状態へ移行するAPIを呼び出した場合、FreeRTOSとμITRONでの挙動が異なります。FreeRTOSでは、タスクの起床要求は無効になっているため、タスクAは起床待ち状態のままとなります。一方、μITRONはタスクの起床要求が残っている(キューイングされている)ため、タスクAは起床待ち状態が解除され、実行可能状態となります。
FreeRTOSとµITRONのミドルウェアの違い
また、OSの機能だけでなく、対応するミドルウェアにも違いがあります。表3の通り、FreeRTOSにはAWS IoTに関する機能に特化しており、BSD、SMTP、POP3などの一部の機能に対応していないことがあります。もちろん、AWS IoTの機能によって代用が可能な場合もありますが、現状FreeRTOSでAWS IoTの機能をすべて使うことはできません。
AWS IoTDevice Defender、AWS IoT shadow、AWS IoT greengrass、AWS IoT Jobsは、現在FreeRTOSでサポートされているサービスで以下のような機能を提供しています。
AWS IoTDevice Defender: クラウド上から接続されたデバイスのパフォーマンス状況を確認するためのサービス
AWS IoT shadow: デバイスのステート管理をクラウドを通じて行うためのサービス
AWS IoT greengrass: クラウド機能をデバイス上で使用可能にするサービス
AWS IoT Jobs: ユーザが設定した複数の機能を、一つの操作によって実行可能にするサービス
※これらの情報は2021年5月時点のものであり、現在の情報についてはAWS IoT公式サイトをご覧ください。
3. FreeRTOSとμITRONの優れているのはどちらのRTOSか
最後に、μITRONとFreeRTOSのどちらが優れているかは、用途によって異なるため、断言することはできません。
例えば、特にハードウェアをカスタマイズせずに、早く評価ボードでクラウドと連携するデモを作りたいのであれば、FreeRTOSの方が効率的と考えられます。一方、開発経験者もいて既存のμITRONのアプリケーション資産もある場合は、ハードウェア依存部の開発のみとなるためμITRONを使用することが適しています。さらに、FreeRTOSはAWSとの連携に優れていますが、他のクラウドサービスとの連携に関しては特にサポートされていません。
また、FreeRTOSはオープンソースであり、開発者やユーザがバグの修正を行うこともできますが、精度を求める場合、FreeRTOSに精通した技術者が必要です。もし、RTOSの開発者にRTOSのバグ修正や機能追加を行ってもらうことを想定している場合、μITRON準拠のRTOSのように、OSベンダが開発するような商用RTOSを利用する必要があります。そのため、開発目的に応じてRTOSを選択することが重要です。
初心者でもわかる RTOS開発入門 (1)
最後に
最後までお読みいただきありがとうございました。eForce社の公式HPでも技術記事を公開しておりますので、ぜひ、ご覧ください。