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のみになっている。
その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.