エッジコンピューティングの逆襲 特集

ArmマイコンのRTOSとして充実する「Mbed OS」に一抹の不安リアルタイムOS列伝(5)(2/3 ページ)

» 2020年09月03日 11時00分 公開
[大原雄介MONOist]

Mbed OS 6は「Keil RTX 5」がコアに

 bare metal profileについてはこの程度にしておいて、肝心のMbed OSについて。バージョンアップにつれてどんどん肥大化……とはならずに、一応節度を持っているようだ。Mbed OS 6.0.0のリリースノートによれば「mbed-ps-example-blinky」と「mbed-cloud-client-example」という2つのサンプルをビルドした際のRAM/フラッシュのサイズ及びビルドに要する時間は以下の表1のようになった。

RAM(bytes) フラッシュ(bytes) ビルド時間(秒)
Mbed OSのバージョン 5.14.1 6.0.0 5.14.1 6.0.0 5.14.1 6.0.0
mbed-ps-example-blinky 206047 205848 39168 36601 739.53 610.81
mbed-cloud-client-example 252457 251580 361038 329505 828.68 835.21
表1 Mbed OSの5.14.1と6.0.0の比較

 わずかとはいえRAM/フラッシュのフットプリントも減っているのが分かる。

 さてそのMbed OS 6であるが、先の図1を見ると、左端にRTOSというPackがあり、ここにRTXというオープン実装が入っているのが分かる。上でも少し書いたが、このRTXがMbed OSのコアとなる。ここは「Keil RTX 5」(以前はKeil RTOSだったが、名前が変わった)が実装されている。もともと、Keilは2005年にArmに買収されるまでは独立系の開発ツールベンダーだったが、現在はArmに特化する※1)形で開発ツールを提供しており、Keil RTOS/Keil RTXもその一環である。このKeil RTXの「上」に、CMSIS-RTOS v2が被さっており(図3)、Mbed OSはこのCMSIS-RTOS v2のAPI経由でKeil RTXにアクセスするという格好になっている。

※1)と言いつつも、買収前に提供していたC166/8051/80251などへのサポートは現在も継続されている。ただし新規の製品開発はもうArmのみになっている。

図3 図3 「Keil RTX 5」はここで言えば“Real-time Kernel(3rd Party)”に当たる部分になる

 そのKeil RTX 5というか、CMSIS-RTOS v2であるが、基本はThreadモデルであり、Task/Processの概念は無い。またメモリ保護はMPUベースで、MMUは当然ながらサポートしていない※2)。スケジューラはPriorityとRound-Robinという典型的な構造で、プロセス間制御はEvent Flag/Multex/Semaphore/Message Queueと、こちらもごく当然のものが当然のように提供される。

※2)実はCMSIS-RTOS v2は「Cortex-A5/A7/A9」もサポートしており、こちらを利用する場合は、MMUをMPUモード(つまり仮想記憶は利用せずに、単にメモリ保護制御だけを利用する)で使うものと思われる。ちなみにMbed OSはこれら「Cortex-Aシリーズ」はサポートしない。

 そのCMSIS-RTOS v2で提供されるものは、基本的にはスレッド制御(生成/削除/待機/復帰/etc……)とイベントハンドリング、プロセス間制御、それとTimer制御、Memory Pool管理程度にとどまっている。変わったところでは、省電力モードにネイティブで対応しているあたりだろうか。

 もともと「Cortex-Mシリーズ」の場合は幾つかの動作モードをサポートしており、あとはベンダーが必要に応じてこれを実装する形になっているが、そのインタフェースもCMSISに用意されている。この省電力モードでは、通常まずタイマーを止めるので、CMSIS-RTOSというかKeil RTXにおいてもSysTick Timerが利用できなくなる。というか当然CPUそのものも止めるので、Threadは動作させようが無いのだが、この省電力モードの際にはRTOSそのものをサスペンドし、アクティブモードになったらレジュームするというosKernelSuspend/osKernelResumeというAPIが用意されており、アプリケーション側でMCUのサスペンド/レジュームに対応させることが可能になっている。同様に独特なのが、SysTickの定義がKeil RTXには無いことだ。この値はプロセッサによって異なるので、どのプロセッサを使うかによって決まる、としている。このあたりはArmのみをサポートするOSならではの割り切りである。

Copyright © ITmedia, Inc. All Rights Reserved.