RTOS的に使えるがRTOSではない「QP」はMATLABの代替候補にもなり得る?リアルタイムOS列伝(22)(3/4 ページ)

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

MBDを利用してリアルタイムシステムを開発するために作られたものがQP

 ここまで説明しておいてなんだが、本来的な順番は逆だったりする。もともとSamek博士はMBDを利用してソフトウェア開発を行うことに非常に関心を持っており、これを積極的に進めていた。ただ、MBDを利用してソフトウェアを開発するためには、それを適切に実行できるプラットフォームが必要である。このため博士はQEP(Quantum hierarchical Event Processor)やQF(Quantum real-time Framework)などを開発。また、QEPやQFだけではハードウェア依存部が欠けているので、そこで軽量でプリエンプティブなQK(Quantum real-time Kernel)を開発した。これらをまとめたものがQPというわけだ。つまり、MBDを利用してリアルタイムシステムを開発するために作られたものがQP、という位置付けになる。

 ところで、ここまで出てきたQVやQXKと、QKの違いをまとめると以下のようになる。

  • QK:プリエンプティブ(Preemptive)かつNon-Blockingなカーネル
  • QV:単純なcooperative Kernel。後で出てくるQP-nano用の“Vanilla”カーネルが、現在はQVとして提供されている
  • QXK:QKのカーネルの機能に加え、BlockingもサポートしたデュアルモードPriority base Kernel。いわゆるRTOSと同じ振る舞いをさせることが可能

 また先ほども少し書いたが、当初はQPとQP-nanoという2種類のRTEFsが存在した。簡単に違いをまとめたのがこちら(図4)。

図4 図4 これはQPとその他のRTOSについて要求リソースを比較した図だが、これでQPとQP-nanoの違いが分かりやすい

 QP、正確に言えば開発言語に応じてライブラリが異なるのでQP/CとQP/C++となるが、こちらは最小で1KB程度のSRAMと10KB弱のコードサイズという省フットプリントである。ただそう言いつつもスケーラビリティが大きく、GBオーダーのメモリを持つマルチコアCPUの構成でもQP/CやQP/C++は利用できる。ターゲットは基本的に32ビットMPUで、現時点ではCortex-MとCortex-R、ARM7/ARM9、これはちょっと例外だが16ビットのMSP430(Classic MSP430に加え、MSP430Xもサポート)がネイティブサポートされるハードウェアである。それ以外のハードウェアは? という話は当然あるが、ここで役に立つのが他のRTOSやOSのサポートだ。QP/CとQP/C++では、以下のRTOSとOSをサポートしている。

  • QPの対応RTOS
    • embOS
    • FreeRTOS
    • ThreadX
    • uC/OS-II
    • OSEK/VDX RTOS ERIKA Enterprise
  • QPの対応OS
    • POSIX-QV(single-threaded Linux, embedded-Linux, BSD, etc)
    • POSIX(multi-threaded Linux, embedded-Linux, BSD, etc)
    • Win32-QV(Windows with QV)(single-threaded Windows, like the QV kernel)
    • Win32 API
    • Qt GUI Framework

 32/64ビットMPUの場合は、まずこれらのRTOSないしOSを稼働させ、その上でQP/CやQP/C++を動かす形で利用可能だ。

 これに対しQP-Nanoの方は8ビットないし16ビットのMCUがメインで、最小構成は100バイトのSRAMと2KBのコードで動作する。実際ターゲットとして挙がっていたのは8051、PIC、AVR、MSP430、68HC08/11/12、R8C/Tinyといったアーキテクチャである。このうち現在も広く利用されているというと8051、PICの一部、AVR、MSP430といったあたりか。これに対応するため、構造もちょっと異なっているし(図5)、スケーラビリティは非常に限定的である。

図5 図5 基本的な構造は図3に近いが、RTOSやOSのサポートはないし、QEPやQFもサブセット版である

 ただし、ご存じの通り、最近こうした超小型MCUのマーケットは徐々に狭まっている。8ビットで言えば、8051ベースは一応SiliconLabsがEFM8シリーズを供給しているが、その程度。AVRやPICは健在だが、AVRが市場を席巻する大きな動機となったArduinoにしても最近は32ビットMCUのラインアップが強化されているほどである。特に、コネクテッドデバイスなどになると、やはり8ビットのままでは要件的にいろいろと厳しい。それもあって、引き続き需要のある16ビットのMSP430のネイティブサポートをQP/CやQP/C++側でフォローし、QP-nanoは6.9.0を最後にアクティブサポートから切り離され、既に新規設計には推奨せず、という扱いになっている。昨今のMCUの動向、それとサポートのためのリソースが無限にあるわけではないことを考慮すると賢明な方策だろう。

Copyright © ITmedia, Inc. All Rights Reserved.