良好なコンテキストスイッチでいろいろ遊べる、イタリア発のRTOS「ChibiOS/RT」リアルタイムOS列伝(13)(3/3 ページ)

» 2021年07月29日 10時00分 公開
[大原雄介MONOist]
前のページへ 1|2|3       

取っつきやすい構成で機能の割に必要なリソースもわずか

 さて、背景説明はこの程度にして、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のどれを使ってビルドしたかに依存する)。

図4 図4 “ChibiOS General Architecture”より抜粋。OSレイヤーの上にHALがある(クリックで拡大)

 ここでちょっと面白いのが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の一つであろう。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.