実際に、PX5 RTOSのブローシャを見ると、以下のような形で手掛けるに至った動機が記されている。
その結果、PX5 RTOSはpthread APIをネイティブでサポートするMCU向けRTOSという、なかなかとがった構成となった(図6)
普通ここまでの割り切った判断は出来ないものである。思うにLamie氏は、ThreadXやAzure RTOSの使われ方を見て、予想以上にpthread APIを使うアプリケーションが多いことを実感し、だからといってThreadXやAzure RTOSをpthread APIベースに書き直すのはあまりにチャレンジングというか、今度はThreadXのネイティブAPIをpthread APIの上で互換レイヤーで提供するようなことになってしまうから、さすがに踏み切れなかったのではないだろうか。
逆に言えば、Microsoftから離脱したことで、ThreadXとの互換性を考えずに全く新しいRTOSを開発できる環境になったからこそこれに踏み切った、という見方もできる(あるいはAzure RTOSが一段落したので、かねて思い描いていたネイティブでpthread APIに対応するRTOSを作るためにMicrosoftから離脱したというべきか)。
さてそんなPX5 RTOSの内部構造は図7のようになっている。
PX5 RTOSのAPIは全てpx5.cで提供され、ここは通常のANSI Cで記述されている。一方で各MCU独自の部分は全てpx5_binding.sで提供される。.s、つまりオブジェクトで提供というのがミソで、そもそもここはCだけでなくアセンブラで記述される場合もあるそうだ(コードの99%はCで記述されているそうだが)。
このpx5_binding.sの詳細はPX5_RTOS_Binding_User_Guide.pdfというドキュメントで説明されているらしいのだが、今のところ一般には公開されていない(恐らくライセンスを取得すると入手できるような気がする)。
Copyright © ITmedia, Inc. All Rights Reserved.