さて、Nano-RKはこのFireFlyを動かすためのRTOSとして開発されたものである。こうしたセンサーネットワーク向けRTOSとしては、既に「Contiki」や、スマートメーターまで範囲を広げれば「Phoenix-RTOS」などもある訳で、FireFlyのプロジェクトでも当初は「Tiny OS」や「Mantis OS」の他、「μC/OS」「Emerald」「OSEK」などを検討したものの(図3)、うまくニーズにミートしないと判断し、「では作ってしまえ」の結果がNano-RKになったわけだ。
設計目標は図4に示されている。加えて言えば、上述したようにSRAM 8KB/Flash 128KBだから、これに収まる(使い切ったらアプリケーションが動かないので、当然アプリケーションの分を残す必要がある)省フットプリント性が求められた。
Nano-RKの特徴は以下のようになっている。
エラーハンドリング機能と、それに伴う非同期リセット機能をOSで持つのはちょっと珍しい(が、用途を考えれば納得できる)し、ネットワークとしてSLIPを利用したstreamを実装しているのも、ちょっと珍しいがこれも理解はしやすい。ちなみに、なぜPriotiryベースのSchedulingか? というと、センサーの種類によってプローブの間隔と処理時間が異なるからだとする。
実際に以下のような性能が実例として挙がっている。
さすがにスマートカメラは他のセンサーと併用するのは厳しそうな感じだが、他のものについては1台のFireFlyで複数のセンサーを取り付けてデータ収集なども可能な範囲である。問題はこれをTimeベースのSchedulingにするのが著しく困難(そもそも周期がでたらめすぎるし、非同期のものまである)だからで、Priorityベースにすることは必須、という話であった。
この設計目標に対する実装の結果が図5である。Context Swapの45μsは一般的には高速とは言いにくいが、ATMega128Lの動作周波数が8MHzということを考えると360cycleほどでContext Switchが行われているわけで、これは十分高速かと思う。またTaskとMutexが8つずつに16バイトのネットワークバッファーを抱えた状態でSRAMの占有サイズが2KBというのもやはり十分優秀かと思う。
Copyright © ITmedia, Inc. All Rights Reserved.