良好なコンテキストスイッチでいろいろ遊べる、イタリア発のRTOS「ChibiOS/RT」:リアルタイムOS列伝(13)(3/3 ページ)
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第13回は、生い立ちがちょっと面白い、イタリア生まれのRTOS「ChibiOS/RT」を取り上げる。
取っつきやすい構成で機能の割に必要なリソースもわずか
さて、背景説明はこの程度にして、RTOSとしてのChibiOS/RTについて紹介したい。以前の製品はChibiOS/RTだけだったが、最近は以下のように複数のコンポーネントに分けて提供されている。
- ChibiOS/RT:ChibiOS/RTそのもの。詳しくは後述
- ChibiOS/NIL:ChibiOS/RTのコンパクト版。最大構成でもコードサイズ1KB以下の完全スタティック構成
- ChibiOS/LIB:拡張ライブラリ。スレッド間通信や拡張メモリ制御、動的スレッドなどの機能を追加するもの
- ChibiOS/SB:Cortex-M3/M4/M7向け拡張。サンドボックス機能の提供と、さらにPOSIX「風」APIの提供を行う
- ChibiOS/HAL:いわゆるHAL。個々のMCUのGPIOやADC、SPIなどの周辺回路に対する高レベルのAPIを提供する
- ChibiOS/EX:開発ボードレベルのデバイス(例えばMEMSセンサーなど)向けのサービスを提供するものだが、詳細を見ると“Work in progress.”としか書かれていない。最新の21.6.0の場合、ADIの3軸加速度センサー「ADXL355」、Robert Boschの気体圧力センサー「BMP085」、それとSTマイクロの複数のセンサー向けにコードが用意されている
- ChibiStudio:EclipseベースのIDEとGNU compiler、OpenOCD debuggerとその他必要なツール類
RTOS本体となるChibiOS/RTの特徴は以下のようになっている。
- マイクロカーネルベース。プリエンプティブなマルチスレッド構成。逆にスレッド以外の管理単位(Process/Job/Task/etc……)はなし
- 128レベルの優先度でスケジューリング。同一プライオリティのスレッド同士はラウンドロビンで制御
- ChibiOS/RTそのものはStatic構成。Dynamicなスレッド制御やメモリ管理などはChibiOS/LIBベースでサポート
- Full SMP対応
- スレッド間同期はSemaphore/Mutex/Condition Variable/Message/Event Flag&Handler/Queueなど。Message BoxはChibiOS/LIBで実装
- Software Timerをサポート。同期/非同期のI/Oをタイムアウト付きで実行可能
- Memory pool/Memory heapをThread Safeで実施可能
- 一部の周辺回路に関してはHALを利用可能
- コードのメモリフットプリントは5K〜10KB。最小構成にするとおおむね1.5KBに
- Context Switching(コンテキストスイッチ)は2〜10μs
- 対応言語はC
- その他FatFSやlwIP、WolfSSLなどが提供される
ちなみにContext Switchingの実測結果は表1のようになっている。
MCU(プロセッサ/動作周波数) | ChibiOS/RT | ChibiOS/NIL |
---|---|---|
STM32F303(Cortex-M4/72MHz) | 1.12〜1.92 | 1.49〜1.96 |
STM32G0(Cortex-M0+/64MHz) | 1.69〜1.69 | 1.85〜1.85 |
STM32G4(Cortex-M4/170MHz) | 0.39〜0.58 | 0.47〜0.67 |
STM32H7(Cortex-M7/480MHz) | 0.14〜0.19 | 0.12〜0.18 |
表1 Context Switchingの実測結果。数値の単位はいずれもμs |
これらの数字はPerformance Tableに示されているが、特徴のところで挙げた10μsという数字は、もっと動作の遅いMCUを利用した場合と思われる(数字のばらつきは、FPUの有無およびGCC/IAR/Keilのどれを使ってビルドしたかに依存する)。
ここでちょっと面白いのがHAL。筆者が知っているHALと明らかに違う(図4)。実際特徴としても“ChibiOS/RTはHALに一切影響を受けない”が挙げられており、世間一般で言うところのHALに相当するのは、ChibiOS/RTの中の“RT Port Layer”に近い。とはいえ、ChibiOS/RTの方式のHALでも別に困らない(というか、むしろこの方が楽)なのは事実であるが。
対応プラットフォームは、やはりSirio氏がSTマイクロの社員(≒STマイクロのMCUや開発ボードの入手が容易)ということもあってか、STM32やSTM8のサポートが手厚い。ただし、STマイクロ/フリースケール系のPowerPCや、Cortex-MでもNXP SemiconductorやAtmelのMCUがサポートされているし、他にもAtmelの「Mega AVR」やTIの「MSP430」、Microchipの「PIC32MX」、古いところではフリースケールの「Coldfire」やルネサスの「H8S」、最近だと「Raspberry Pi」への移植も行われている。RISC-V向けは教育目的で移植された例は報告されているが、Sirio氏いわく「面白そうだしやってみたいけど時間がない」などとリプライしているあたり、完全な移植が行われるまでまだ時間がかかりそうだ。
現状STマイクロのMCU以外で使うにはそれなりの作業は必要そうだが、取っつきやすい構成ではあるし、機能の割には使うリソースもわずかで、RTOSを遊んでみるのには悪くない題材かもしれない。Context Switchingの数字からも明らかなようにリアルタイム処理の性能も悪くない。「とにかくリアルタイム性能が欲しい」なんて場合に考慮するRTOSの一つであろう。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 連載記事「リアルタイムOS列伝」バックナンバー
- スマートメーターに特化したポーランド発RTOS「Phoenix-RTOS」の潔さ
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第12回は、ポーランド発のRTOS「Phoenix-RTOS」を取り上げる。スマートメーターに特化した、ある意味で潔さが光るものになっている。 - かつて米軍に重用されたRTOS「RTEMS」、今や航空宇宙分野で揺るぎない地位に
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第11回は、かつて米国の軍需向けで重用されてきたRTOS「RTEMS」を紹介する。現在は軍需ではなく、航空宇宙分野向けフリーRTOSの座を射止めている。 - ソニーの「Spresense」が採用するオープンソースRTOS「NuttX」とは
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第9回は、日本になじみがないRTOSシリーズ第3弾として「NuttX」を紹介する。このNuttX、実はソニーのIoTセンシングボード「Spresense」に採用されているのだ。 - 欧州の車載と産業機器でガッチリシェアをつかむRTOS「ERIKA Enterprise」
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第8回は、欧州を中心に車載や産業機器などの分野でガッチリとシェアをつかんでいるRTOS「ERIKA Enterprise」を取り上げる。 - 日本で話題にならない中国発のRTOS「RT-Thread」がじわじわと勢力拡大中
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第8回は、日本以外でじわじわと人気が出始めているRTOS「RT-Thread」を取り上げる。