エッジコンピューティングの逆襲 特集

組み込みエンジニアの本能的な欲求から生まれた? ポーランド発RTOS「DioneOS」リアルタイムOS列伝(38)(1/2 ページ)

IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第38回は、マルチタスクに焦点を当てたポーランド発の省フットプリントRTOS「DioneOS」を取り上げる。

» 2023年09月04日 07時00分 公開
[大原雄介MONOist]

 リアルタイムOS(RTOS)の「DioneOS」(「ディオネオス」と発音するそうだ)は、2013年で開発がストップしたようだ。ただし、開発がストップしただけで、現在も販売しているというあたりがちょっと不可解ではある(まぁなんとなく理由は分かるが)。

⇒連載記事「リアルタイムOS列伝」バックナンバー

図1 「DioneOS」のWebサイト 図1 「DioneOS」のWebサイト[クリックでWebサイトへ移動]

Atmel AVR8でも動く非常に小規模なRTOS

 DioneOSは、ポーランドのEleSoftRomで開発された商用RTOSである。EleSoftRomは2008年にPiotr Romaniuk氏によって設立された企業だが、当人はCompany Owner兼CTOというポジションに就いている。ただ、どうも他にCEOを立てているというわけでもなさそう(何しろ同社のCompany ProfileのWebページを見るとRomaniuk氏の経歴が出てくる)あたりは、極めて少人数(というか下手をするとRomaniuk氏だけ?)で運営されている小さな企業という感じだ。

 同社は組み込み向けにソフトウェア開発やデバッグのサポート、品質管理や最適化、さらには設計まで広範に対応するとしており、要するに何でも屋という感じである。そうしたさまざまなサービスの一つにRTOSの提供があり、そのために開発されたのがDioneOSというわけだ。

 DioneOSは現在、MSP430とCortex-M3がターゲットとなっているが、初期のリリースのターゲットはAtmel AVR8だったらしく、ドキュメントのそこかしこにAVRへの言及がある。そんなAVRもターゲットに入るくらいだから、非常に小規模なRTOSである。

 現在ターゲットとなっているMSP430は、ローエンドは128バイト SRAM/512バイト FlashのMSP430G2001から、ハイエンドは66KB SRAM/512KB FlashのMSP430F6459まで広範にラインアップが用意されているのだが、いくら何でもこのローエンド向けでRTOSを載せようというのは無理がある。実際、MSP430およびAVRの場合の要求仕様は、最低4KB SRAM/6KB Flashとなっている。これは製品構成上どうなんだ? という話だが、例えばAVR8でもATmegaシリーズなら8KB SRAM/256KB Flashの構成になっているから問題なく稼働させられるし、MSP430はさらに大容量の製品があるから、ローエンドでなければほぼ稼働させられることになる。

 一方、Cortex-M3に関しては、現状動作検証が完了しているのはSTM32L162のみとなっているが、こちらも32KB SRAM/256KB Flash〜80KB SRAM/512KB Flashと結構リソースは潤沢である(Cortex-M3に関しては最小要求リソースが示されていないが、これはSTM32L162を使う限り問題ない、という判断から来てるのであろう)。

マルチタスクの簡潔な記述を可能に

 DioneOSの目的は、こうしたMCUでマルチタスクを簡潔に記述することである。リソースの少ないMCUではベアメタルで直接コードを書くことが多いが、そうなるとISR(割り込みハンドラ)のハンドリングなどを自身で行う必要がある。ISRのソースが1つだけでいいならまだしも、実際には例えば送受信やタイマーなど複数デバイスなどからの割り込みハンドリングが必要だし、ポーリングをCPUのループで実装するのは論外だからウェイト機能にもタイマーを使う必要があり、するとさらにISRでのハンドリングが複雑になるという次第で、このあたりを簡素化するのであればRTOSを導入するのは理にかなっている。ただ、それだけの理由なら世の中にも多くのRTOSが存在する訳だが、DioneOSのターゲットは省リソースのMCUであり、これに対応できる省フットプリントのRTOSそのものがまず数が少ない。

 もう1つ、性能の追及も挙げられる。DioneOSのコンテキストスイッチの時間はMSP430の場合で10.4〜16.9μs、Cortex-M3の場合で3.2〜7.9μsとされる。MSP430がおおむね16M〜25MHz駆動、STM32L162が32MHz駆動ということを考えると、切り替えに要するサイクル数はMSP430の場合で260〜430サイクル、STM32L162で102〜253サイクルほどで完了している計算で、これは結構高速な部類に入るとして良いかと思う。

 ちなみにSRAMのフットプリントは以下の数字が示されている。

  • Threadの管理:106+Thread数×20(MSP430/AVRの場合、Cortex-M3は36)バイト
  • カーネルそのもの:〜3200バイト(ここにCのイニシャルスタックの160バイトも含む)

 このフットプリントの小ささは性能の追及につながる部分でもある。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.