FreeRTOSとμITRON 比較

# 1, なぜ、FreeRTOSとμITRONを比較するのか
FreeRTOSとは、組み込み開発で使用される、オープンソースのRTOS(Real Time Operation System)です。2017年にAWSに買収されたことにより、AWSとの連携が容易になっています。また、μITRONは組み込み開発で使用されるRTOSの仕様のことを指します。日本国内では、今でもμITRON準拠のRTOSがトップシェアを占めています。
昨今ではIoTやクラウド技術の関心が高く、特にAWSの人気が高いため、必然的にFreeRTOSが注目されています。また、二つのRTOSについての簡単な対応ミドルウェアの違いを表1に示しています。μITRONはミドルウェアのサポートに関しての仕様が存在しないので、eForce社製のμITRON準拠のRTOS、μC3で比較しています。
表の通り、簡単に対応している機能の有無で比較できません。よってこの記事では、国内で多く使用されているμITRONとFreeRTOSの２つにフォーカスを当て、細部の違いも含め説明していきます。

![画像①.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839199/c1909985-f5a3-2005-8970-68197abd456e.jpeg)


# 2, μITRONとは
μITRONはオープンアーキテクチャを用いており、仕様は公式サイト(https://www.tron.org/ja/tron-project/itron/itronspecification/)
にて公開されています。μITRONはRTOSを開発するOSベンダや、アカデミックな機関などが、この仕様に準拠する形でRTOSを作成しています。

RTOSの機能としては、RTOSに必要なマルチタスク処理や、排他制御、メモリ管理、タスク間通信などを採用しています。また、この機能を使用するために必要なAPIや、変数定義等も仕様として策定されているので、異なるベンダ、アカデミックな機関が作成したμITRON準拠のRTOSでも、大きな違いがないようになっています。

また、μITRONは、メモリやCPU性能に制限の多いことを考慮し、システムコールのAPIを標準化し、状況に応じて最低限の機能のみを実装できるような仕様となっています。具体的には図1にて示すように、RTOSに必要な機能をプロセッサやアプリケーションに適応する形で使用する機能を削減したりします。例えば、図1では、タスクの同期処理であるイベントフラグは、プロセッサXでは必要ないため実装しないようになっています。加えて、APIの実装内容に関しても仕様として決められていません。

![画像②.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839199/1b4db551-c7a3-9d85-95dd-491c05ad5a28.jpeg)


※μITRON  Ver4.03.03仕様書の「1.3 ITRON仕様の設計方針」から抜粋
図1, μITRONの弱い標準化

一方、プロセッサやアプリケーションに依存する形でRTOSを変える事になるので、厳密にはソースコードの共通化などが難しくなりますが、RTOSで使用するサービスコールの関数定義や、使用する変数定義等は共通のため、RTOSの概念や用語の共通化を行うことができます。これは昨今でも話題になることが多い、エンジニアの教育面において役立っているかと思います。

また、μITRONは先述した通り、国内でトップシェアを占めており、様々な機器に採用されています。加えて、μITRON準拠のRTOSを開発しているOSベンダは、TCP/IPプロトコルスタックをオプションで用意していることも多いです。よって、インターネットと接続が可能なペリフェラルを用意した評価ボードを使用することで、クラウドとの連携も容易になります。

# 3, FreeRTOSとは
FreeRTOSは先述の通り、AWSのサービスの一部として公開されているRTOSです。AWSに買収されたことにより、ライセンスがMITとなったため、無料で商用利用が可能になりました。仕様に関しても、AWS　( https://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/dev-guide-freertos-kernel.html )とFreeRTOS( https://www.freertos.org/ )の公式サイトにて公開されています。
また、AWSのサイトにユーザーズガイドが存在するように、FreeRTOSはAWSとの連携に優れています。例えば、以下の画像のように、AWSとFreeRTOSの入門用の評価ボードを販売しているハードウェアベンダもあり、AWSのサイトから、このハードウェアに合わせたSDKをダウンロードすることも可能です。

画像元：https://news.mynavi.jp/article/20190820-880139/
https://www.amazon.co.jp/Marvell-MW302-Starter-Powered-%E4%B8%A6%E8%A1%8C%E8%BC%B8%E5%85%A5%E5%93%81/dp/B016PU8XR0

![画像③.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839199/ca982c69-b1f1-ad20-79f4-a2be979b29a5.jpeg)



さらに、AWSのサイトからクラウドとの通信用の証明書を発行し、SDKをビルド・実行することで、すぐにインターネットに接続できるアクセスポイントを介してAWSのクラウドへデータを転送することが可能です。

また、細かな仕様の違いはありますが、μITRONと同等のRTOSの機能を有しており、マルチタスク処理・排他制御・タスク間通信が可能です。細かな仕様の違いについては２つのOSの比較の際に記述します。

加えて、FreeRTOSのサポートについてですが、フォーラムサイト(https://forums.freertos.org/ )が用意されており、そちらへ書き込みを行うことにより開発元とコンタクトをとることができます。


# 4, FreeRTOSとμITRONの違い
次に、２つのRTOSの違いについてです。表2にカーネルの機能の対応表を示します。
　
![画像④.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839199/973bbf40-7c0c-7812-0f0b-b88b58e9f8f6.jpeg)

表2はµITRONの機能をもとに比較したため、一部FreeRTOSでは使えないものもあります。ただ、双方ともにマルチタスク処理・排他制御・タスク間通信やメモリ管理を行うことは可能なので、必要最低限の機能はどちらも網羅しているといえます。

また、機能の細部においても違いがあります。例えば、OSで使用する関数仕様の違いです。FreeRTOSでタスク間通信を実現するメッセージバッファと、μITRONでタスク間通信を実現する同名の機能のメッセージバッファでは、データの受信を行うAPIに図3のような違いが存在します。

![画像⑤.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839199/f62e63c8-ce99-c3e9-8d64-92e2f9aa9ba0.jpeg)


もう少し例をあげると、FreeRTOSで、タスクを起床待ち状態から待ち解除するAPI(vTaskResume)は、起床対象のタスクが実行状態となっているときに呼び出しても効果はありません。しかし、μITRONでタスクを起床待ち状態から待ち解除するAPI(wup_tsk)は、起床対象のタスクが実行状態となっている場合も有効であることが多く、対象となるタスクが次に休止状態に変更されるAPIが呼ばれた後、すぐに実行状態に変更されます。

具体的に説明しますと、図４のように、共に待ち状態ではないタスクBとタスクAが存在し、タスクBがタスクAにむけて起床待ち状態から待ち解除するAPIを呼び出します。

![画像⑥.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839199/09ab7aa3-686d-f4fa-0f2c-5b834284bf52.jpeg)

その後にタスクAが待ち状態へ移行するAPIを呼び出した時の振る舞いがFreeRTOSとμITRONで異なります。上記の説明の通り、FreeRTOSはタスクの起床要求は無効になっているので、タスクAは起床待ち状態のままとなります。一方で、μITRONはタスクの起床要求が残っている(キューイングされている)ので、タスクAは起床待ち状態が解除され、実行が可能な状態となります。

以上の例からもわかる通り、μITRONからFreeRTOS、もしくはFreeRTOSからμITRONにRTOSを変更する場合、このような仕様の違いに気を付ける必要があります。

加えて、OSの機能から少し離れますが、対応するミドルウェアにも違いがあることが多いです。ネットワーク関連のミドルウェアにフォーカスした対応表を表3に示します。μITRONは、ミドルウェアにおいてOS毎に違いがあるので、eForce社製のμNet3を例に挙げています。表3の通り、FreeRTOSにはAWS IoTに関する機能に特化していまして、BSD, SMTP, POP3などの一部の機能に対応していないこともあります。もちろん、AWS IoTの使うことによって代用することができる事もありますが、現状FreeRTOSでAWS IoTの機能がすべて使えるわけではありません。

表3に示した、AWS IoTDevice Defender, AWS IoT shadow, AWS IoT greengrass, AWS IoT Jobsが、現状FreeRTOSでサポートされているサービスです。4つのサービスを簡単に説明しますと、AWS IoTDevice Defenderはクラウド上から接続されたデバイスのパフォーマンス状況を確認するためのサービス、AWS IoT shadowはデバイスのステート管理をクラウドを通じて行うためのサービス、AWS IoT greengrassはクラウド機能をデバイス上で使用可能にするサービス、AWS IoT Jobsはユーザが設定した複数の機能を、一つの操作によって実行可能にするサービスです。また、AWS IoTに関する情報は2021年5月時のものです。詳しい現状の情報に関してはAWS IoT公式サイト(https://aws.amazon.com/jp/iot/ )をご覧ください。


![画像⑦.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839199/58964cdc-9dca-f1eb-8525-17c417e5d408.jpeg)



# 5, FreeRTOSとμITRONのどちらが優れているのか
　最後に、μITRONとFreeRTOSにおいてどちらかが優れているかといった観点での違いを述べさせていただきます。結論から申し上げると、用途によってどちらが使いやすいか変わってくるため、どちらが優れているかを断言することはできません。
　例えば、特にハードウェアをカスタマイズすることなく、評価ボードを使用する形でいち早くクラウドと連携するデモを作りたいのであれば、FreeRTOSを用いたほうが効率がよいかと思います。一方で、すでにμITRONのアプリケーション資産が社内にある、経験者もいる、ようなケースでは、ハードウェア依存部の開発だけすれば良いことになります。さらに、FreeRTOSではAWSとの連携においては他のRTOSよりも優れていますが、その他のクラウドサービスとの連携に関しては特にサポートされていません。AWSから他のクラウドサービスへ移行しにくくなるという、囲い込みのリスクもあります。
　また、FreeRTOSはオープンソースという形をとっていますので、開発者だけでなく、FreeRTOSを使用するユーザがバグの修正を行うことも想定されています。よって、より良い精度を求める場合、FreeRTOSに精通した技術者が必要となる可能性があります。もちろん、FreeRTOSに精通した技術者がいれば、μITRON準拠のRTOSよりFreeRTOSを使用したほうが効率的です。ただし、RTOSの開発者にRTOSのバグ修正や機能追加を行ってもらうことを想定している場合、μITRON準拠のRTOSのように、OSベンダが開発するような商用RTOSを利用する必要があります。

上記のように開発時の目的によってどちらを使用するかを考えることが重要になるかと思います。



**▼参考文献**
・AWS FreeRTOSサイト
https://aws.amazon.com/jp/freertos/
・AWS FreeRTOS ユーザーズガイド
https://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/dev-guide-freertos-kernel.html
・FreeRTOS 公式サイト
https://www.freertos.org/
・AWS FreeRTOS評価ボード: 
https://news.mynavi.jp/article/20190820-880139/
https://www.amazon.co.jp/Marvell-MW302-Starter-Powered-%E4%B8%A6%E8%A1%8C%E8%BC%B8%E5%85%A5%E5%93%81/dp/B016PU8XR0




最後まで読了をいただきありがとうございます。こちらの記事は、イー・フォース https://www.eforce.co.jp/ 
に在籍するエンジニアがまとめた内容になります。価値ある記事を共有できるように努めて参ります。ご質問等あれば、お気軽にお問い合わせください。