さて、順序が普段と逆だが、Apache Mynewtの特徴がこちら(図6)。完全マルチタスクOS、プリエンプティブ構成でプライオリティベースのスケジューリング(最大253レベルのプライオリティサポート)が行われる(図7)。
特徴的なのはパワーマネジメントやロギング、さらにリソース利用率のトラッキングなどが搭載されていることだろう。このあたりは、Apache Mynewtがそれ単体として使われるというよりは、大きなアプリケーションのサブシステムとして利用されることを前提としている感じだ。
プログラミングそのものはかなりLinuxの環境に近い。例えば、いわゆるLチカはこんな感じで行える(図8)。
LinuxにこんなAPIがあるか? と言われればもちろんないのだが、MCU風にレジスタをあれこれ操作しまくるといった手間は掛からず、また機種依存コードも全部HALで遮蔽する格好で記述できるので、MCUの経験が浅いプログラマーでも取っ付きやすいだろう。これをマルチタスク化したのがこちら(図9)。
Apache Mynewtの処理単位はTaskであり、ProcessやThreadという概念は存在しない。しかし、実装の実態としては、この図9を見る限りThreadベースであり、これをTaskとして扱っている、という感じだ。ちなみにmain()の最後、以前はos_start()でスケジューラが稼働を始め、my_task_func()に制御が移る格好だったが、このあたりはバージョンアップで改定されたらしい。
また、先にPriorityが253レベルと書いたが、システム全体は255レベルで、うちIdleとSanityという2つの固有Taskが2レベルを占有している。スケジューラが完全Priorityベースというのは、1Task=1Priorityになっており、同一Priorityを持つTaskを複数持つことはできないようだ。こういった割り切りもなかなかに珍しい。
Copyright © ITmedia, Inc. All Rights Reserved.