さて、そんなわけでRODOSはBOSSの特徴を引き継いで、より機能を引き上げたものとなっている(図2)。RODOSの設計目標は引き続き“Simplicity”である。ただし、Simplicityを実装するに当たり、「機能を削って簡素化するわけではない」としている。具体的には、リアルタイムスケジューリング、リソース管理、同期メカニズム、ミドルウェア、スレッド間通信といった機能が全てマイクロカーネルにより「可能な限りシンプルな形で」提供される。RODOSのコアの特徴は以下の通りだ。
アプリケーションはターゲットハードウェアないしLinux上のアプリケーションとして開発可能なので、例えばある程度までLinux上で開発を進め、実機検証が必要になった段階でターゲットに移すことも容易である(再コンパイルだけで移行可能な場合もある)。
アプリケーションは、Active Object/Passive Objectを利用できる。Active Objectはタイマー/割り込み/メッセージなどのイベントを受け取ることができ、またObjectから逆にイベントを発生させることも可能である。一方、Passive Objectは単にデータとMethodをActive Objectに提供するだけの存在である。このため、アプリケーションは通常、スレッドやイベント、あるいはInstantiate Subscriber objects(これはミドルウェアへのAPIである)を継承する形でActive Objectを生成して実行をスタートする形となる。
ちょっと独特なのは時間管理だろうか。RODOSではコアがシステムの時間を制御するが、これは0からスタートし、150年後のEnd-of-Timeまでの間、ns単位の時間を提供する。150年、というのは衛星の運用寿命を考えると納得いく数字である。例えば、ボイジャー1号と同2号はどちらも1977年に打ち上げられ、機能停止(搭載する原子力電池を使い切る予定時期)は2025年ごろとされているから、50年弱動作することを想定している。一般的な組み込み機器よりも想定寿命が長く、しかも何かあっても簡単にはリセットすらできない(ボイジャーは既に1号と2号とも太陽系を脱出している)から、このくらいの設計寿命が必要なのは当然だろう。
ちなみにコアそのものには多くの機能はない。周辺回路へのアクセスなどは全てミドルウェア経由となっており、これは移植性の向上につながっている。RODOSの最新バージョンは202となっているが、ここでは以下のようなターゲットが挙げられている。
また、過去にはベアメタルで以下のプロセッサをサポートしている。
これらの他、FreeRTOS、RTEMS、Windowsなどの環境上でも動作するとしている。
RODOSで「Hello, World」を記述するとリスト1のようになる。
#include "rodos.h"
static Application appHW("HelloWorld");
class HelloWorld : public Thread {
public:
HelloWorld() : Thread("HelloWorld") { }
void init() {
PRINTF("Printing Hello World");
}
void run(){
PRINTF("Hello World!\n");
}
}
static HelloWorld helloworld;
スレッドを作るHelloWorld()と、初期化のinit()、実際にHello, Worldを出力するrun()の2つのメソッドを生成し、あとは一番下でHelloWorldを呼び出すことで実行されるというわけだ。C++としてはごく標準的な記述でコーディングできているのが分かる。
RODOSは現在もKamaro EngineeringやWuSpaceなどで人工衛星のシステム構築に利用されている。日本ではあまりなじみがないが、主にドイツの人工衛星構築では欠かせないRTOSである。
アマゾン買収から2年半、「Amazon FreeRTOS」は最も手頃なRTOSに
かつて米軍に重用されたRTOS「RTEMS」、今や航空宇宙分野で揺るぎない地位に
「ThreadX/Azure RTOS」の悔恨から生まれた「PX5 RTOS」はできたてほやほや
AVRマイコンで動作する軽量RTOS「FunkOS/Mark3」は勉強や遊びに最適!?
F-35戦闘機も採用する「LynxOS」はRTOSを超えたRTOSを目指すCopyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム