ここからはRT-Threadそのものの特徴を説明しておきたい。まずは、RT-Thread(図6)と、その超軽量版であるRT-Thread Nano(図7)の構成を見ていただこう。
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.