検索
連載

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

IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第5回は、プロセッサコアIPベンダーのArmが独自に展開する「Mbed OS」を取り上げる。

Share
Tweet
LINE
Hatena

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.

ページトップに戻る