日本で話題にならない中国発のRTOS「RT-Thread」がじわじわと勢力拡大中:リアルタイムOS列伝(8)(3/3 ページ)
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第8回は、日本以外でじわじわと人気が出始めているRTOS「RT-Thread」を取り上げる。
「RT-Thread」のカーネルはモノリシックからマイクロカーネルに変化
ここからはRT-Threadそのものの特徴を説明しておきたい。まずは、RT-Thread(図6)と、その超軽量版であるRT-Thread Nano(図7)の構成を見ていただこう。
図7 「RT-Thread」の構成。「RT-Thread」のサブセット、というか本当に必要なコンポーネントだけ組み込んだ格好。libcpu/BSPのサポートも外され、その分対応するアーキテクチャは限られる(クリックで拡大)
RT-Threadのカーネルは、以前はモノリシック構造だったが、最近はマイクロカーネルベースに変化しつつある。プリエンプティブ、マルチタスク、マルチCPU対応でリアルタイムスケジューリングも可能である。
マルチスレッドモデルを採用しており、タスクの概念はない(ドキュメントを読む限り、RT-Threadではタスク=スレッドである)。スレッドスケジューリングは、プライオリティベースだ(256のプライオリティレベルが設定可能。これを32ないし8レベルまで減らすこともできる)。タイムスライス方式のスケジューリングも可能だが、これは同じプライオリティのスレッド同士でのみ成立する。
スレッド間同期としてセマフォ、ミューテックス、イベントが、スレッド間通信としてメールボックス、メッセージキュー、シグナルが提供される。シグナルは本来ハードウェアベースの割り込みをソフトウェア的に発生させる仕組みで、機能的には同期メカニズムっぽい気もするのだが、用法を見てみると例えば「rt_thread_kill()」で相手のスレッドを強制終了させるなんてものもあり、同期とはちょっと違う機能である(通信とも言い難い。スレッド制御というべきか)。ちなみにShared Memory Pool(共有メモリプール)を利用しての通信(というか、メモリ領域の共有)も可能である。
開発の沿革の中でさまざまなターゲットを追加してきたように、マルチプラットフォームに対応している。現在は、ARM 7/9/11、Cortex-M0/M0+/M3/M4/M7/M23/R4/A8/A9、MIPS32、RISC-V、ARC、DSP(TI)、C-Sky、x86に対応している。また、機種依存部をlibcpu/BSPという形で分離しているので、他のアーキテクチャや新規のSoCであっても対応が容易だ(RT-Thread Nanoを除く)。
コンポーネントとして、コマンドラインI/F(FinSH)、デバイスドライバフレームワーク、ネットワークフレームワーク、仮想ファイルシステム(FAT、YAFFS、UFFS、ROM/RAMファイルシステムその他)、TCP/IP(lwIP)、libc/POSIX互換レイヤーなどが提供される。また、システム構成ツールとしては、RT-Thread Env(先述したKconfigやmenuconfigを統合したもの)が、ソフトウェア統合開発環境として「RT-Thread Studio」がそれぞれ提供される。
ライセンスはApache 2.0ライセンスであり、ソースコードはGitHubで公開されている。パッケージもやはりGitHubで公開されている。
RT-Threadは、APIも比較的分かりやすく、使いこなすのは案外容易なようにも思える。中国製ということもあって、対応しているチップに中国のMCU系が多いとか、パッケージとして提供されている機能にも日本では使っているという話を聞いたことがないものが含まれているとか、ちょっと癖があるRTOSではあるが、案外にこれでシステムを組むのも面白いかもしれない。
Copyright © ITmedia, Inc. All Rights Reserved.