検索
ニュース

150年間使い続けられるRTOS「RODOS」はドイツの人工衛星に欠かせないリアルタイムOS列伝(33)(2/2 ページ)

IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第33回は、ドイツの人工衛星に欠かせないRTOS「RODOS」を紹介する。

Share
Tweet
LINE
Hatena
前のページへ |       

「RODOS」の設計目標は引き続き“Simplicity”

図2 「RODOS」のロゴ
図2 「RODOS」のロゴ 出所:GiLab

 さて、そんなわけでRODOSはBOSSの特徴を引き継いで、より機能を引き上げたものとなっている(図2)。RODOSの設計目標は引き続き“Simplicity”である。ただし、Simplicityを実装するに当たり、「機能を削って簡素化するわけではない」としている。具体的には、リアルタイムスケジューリング、リソース管理、同期メカニズム、ミドルウェア、スレッド間通信といった機能が全てマイクロカーネルにより「可能な限りシンプルな形で」提供される。RODOSのコアの特徴は以下の通りだ。

  • オブジェクト指向のC++インタフェース
  • 超高速ブート
  • リアルタイム優先制御のプリミティブなマルチスレッディング
  • 時間管理
  • スレッドセーフな通信/同期メカニズム
  • イベントプロパゲーション

 アプリケーションはターゲットハードウェアないし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となっているが、ここでは以下のようなターゲットが挙げられている。

  • Linux上での動作
  • POSIX環境での動作
  • STMicroelectronics STM32F4
  • Microchip SmartFusion 2
  • Raspberry Pi 3

 また、過去にはベアメタルで以下のプロセッサをサポートしている。

  • arm_cortex(Armv8-A汎用)
  • arm-cortexA8(Cortex-A8汎用)
  • arm-cortexA9(Cortex-A9汎用)
  • arm-cortexA9_zinq(Cortex-A9コア内蔵のXilinx Zynq)
  • arm_v4(Armv4汎用)
  • avr32(AtmelのAVR32)
  • bf561(ADIのBlackfin BF501)
  • imx(NXP Semiconductosのi.MX)
  • leon(SPARCv8ベースのLEONプロセッサ)
  • microblaze(XilinxのMicroBlaze)
  • raspberrypi(Raspberry Pi)
  • smatfusion(Microchip SmartFusion)
  • virtex4(Xilinx Virtex-II搭載のPowerPC 405)

 これらの他、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;
リスト1 RODOSにおける「Hello, World」の記述

 スレッドを作るHelloWorld()と、初期化のinit()、実際にHello, Worldを出力するrun()の2つのメソッドを生成し、あとは一番下でHelloWorldを呼び出すことで実行されるというわけだ。C++としてはごく標準的な記述でコーディングできているのが分かる。

 RODOSは現在もKamaro EngineeringWuSpaceなどで人工衛星のシステム構築に利用されている。日本ではあまりなじみがないが、主にドイツの人工衛星構築では欠かせないRTOSである。

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る