IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第31回は、ほぼ独力で開発された軽量RTOS「FunkOS/Mark3」を紹介する。
今回ご紹介する「FunkOS/Mark3」は、実体的にほぼ1人の開発者によって開発されているリアルタイムOS(RTOS)だ。ついでに言えば知名度も非常に低い。
Mark Slevinsky氏が「FunkOS」というRTOSの開発に着手したのは2008年のことである。最初のターゲットMCUはAVRとMSP430で、特にAVR向けはいろいろと機能が充実していた。2009年に最初バージョンであるR1(Andromache)がリリース。続いて同年11月にはR2(Bacchus)、2010年3月にR3(Cactrot)がリリースされている。このR3では、プラットフォームハードウェアとしてAVRの他にCortex-M3とMSP430に対応した。開発環境も、Cortex-M3がGCCとKeil IDE、AVRがCodevision/GCC/IAREW(IAR Embedded Workbench)/ICCv7(Imagecraft C)、MSP430がCCS(Code Composer Studio)とIAREWに対応、ということで結構充実している。
以下に、FunkOSそのものの特徴を挙げてみよう。
カーネルそのものはプリエンプティブな構成ではないが、R3にはオプションでPipsqueak Nano-Kernelと呼ばれるプリエンプティブなミニマルカーネルも同梱されており、こちらに入れ替えればプリエンプティブな動作が可能になった(サポートされるAPIに若干制約が入るが)。
むしろFunkOSの焦点は完璧なプリエンプティブ動作ではなく、さまざまなプラットフォームへの容易な移植とオーバーヘッドの最小化にあった。R3の場合、Atmel ATMega328を使ったケースでのメモリのフットプリントは、全機能を搭載した状態で以下のようになっている。
機能 | 概要 | メモリフットプリント |
---|---|---|
driver | Device driver infrastructure | 478バイト |
heap | Fixed-block dynamic memory | 280バイト |
message | Simple Inter-process communications | 386バイト |
mutex | Resource-protection locks | 468バイト |
plumber | Complex inter-process communications | 1054バイト |
semaphore | Thread synchronization object | 446バイト |
task | FunkOS portable kernel | 802バイト |
(port) | Port-specific functions | 696バイト |
timer | Lightweight threads and periodic events | 228バイト |
watchdog | Software watchdog interface | 188バイト |
合計 | − | 5026バイト |
表1 FunkOS R3のAtmel ATMega328におけるメモリフットプリント |
ATMega328のフラッシュ容量は32KBだから、5KB弱ならアプリケーションを書くのに十分なゆとりが残っているといえる。実際にはここまで全機能を使うことはなく、そうなるとさらにメモリのフットプリントは減る。実際にWinAVR GCCコンパイラを使ってビルドしたケースでは3万2600バイトのフラッシュと2014バイトのSRAMがアプリケーションから利用可能で、Pipsqueak Nano-Kernelを使った場合は3万904バイトのフラッシュと1648バイトのSRAMが利用可能だったとされている。SRAMが2KB、フラッシュが32KBのMCUとしては十分な容量としてよいかと思う。
移植の容易性に関して言えば、実験的ではあるもののカーネルをC++で書き直したKernel++というコンポーネントがFunkOS R3には同梱されている。こちらは機能がほぼFunkOSそのままであり、APIがC++対応になったというだけで、対応環境もAVR+GCC(WinAVR)のみであるが、もしニーズがあれば広範なプラットフォームへの移植がさらに容易だったはずだ。
FunkOSはR3でさらにμOLEDのドライバや、PSXジョイパッド、フレームバッファベースのアクセラレータ付き2Dディスプレイのサポート、Bitmapフォントレンダラなど、あまり見かけないデバイスドライバ(いずれもAVR8向け)なども追加されている。
どうもこのFunkOS、Slevinsky氏のお仕事(Funkenstein Software Consultingという組み込み向けシステムコンサルティング)のために開発/メンテナンスが行われていたのではないかと思われる。妙に特定のデバイス向けのドライバのみが充実しているのがその傍証である。
FunkOSのライセンスにはSleepycat Licenseが採用されている。Sleepycat Licenseのライセンス要件は以下の通りだ。
要するに、例えばマニュアルの最後に原著作権者を表示しさえすれば、商用製品として販売することに支障はない。
Copyright © ITmedia, Inc. All Rights Reserved.