RTOSへの移行: RP2040での経験
Martijn Braam
- コンピューター関連の作業をしているMartijn Braamの文章
- 複数のマイクロコントローラープロジェクトを進行中
- 主にRaspberry Pi Picoボードを使用しており、開発体験は良好
プロジェクト概要
- 映像機器を制御するハードウェアコントローラーを製作
- PTZカメラとビデオスイッチング機器を制御
- 既存コントローラーの性能が良くないため、新しいパネルの製作が必要
ハードウェア設計
- 9個のRGBボタン、アナログジョイスティック、ディスプレイを搭載
- RS-485とイーサネット通信モジュールを使用
- 複数回のハードウェア修正を経て機能実装を完了
初期ソフトウェア
- pico-sdkを使ったcmakeプロジェクトとして開始
- 2つ目のコアをWiznetモジュールに割り当て、1つ目のコアはユーザーインターフェースI/Oを処理
- 複数の作業を同時に処理する必要があり、複雑さが増大
FreeRTOS
- FreeRTOSを使って複数の作業を並列処理
- 複数のタスク(Task)を作成: ボタン、LED、ネットワーク、DHCP、mDNS、ATEM、VISCA
- FreeRTOSの問題点:
printf 使用時にシステムが停止する現象、ハードウェア抽象化の不足
Apache NuttX
- Unixシステムに似た環境を提供
- 初期設定後は実際のシェル(shell)を使用可能
- menuconfig/Kconfigシステムを通じてハードウェア設定が可能
- i2cバス設定の問題で基本機能が動作しない
- ファイルシステムのパスとシェルは不要
Zephyr
- プロジェクト設定用のPythonユーティリティを提供
- 5GBのgitリポジトリのダウンロードが必要
- Zephyr SDKのインストールが必要で、既存のARMツールチェーンも使用可能
- Raspberry Pi Picoのサポートが不十分で、他のボードの使用を試行
- ビルドエラーと警告を解消しても動作しない
結論
- FreeRTOSを使って一部のアプリケーションのビルドに成功
printf の代替実装が必要
- FreeRTOSを使い続けて望む機能の実装を試みる
GN⁺の要約
- この記事は、マイクロコントローラープロジェクトでRTOSへ移行する過程を扱う
- FreeRTOS、Apache NuttX、Zephyrの長所と短所を比較
- FreeRTOSが最も適した選択だと結論
- RTOS選定時に考慮すべきさまざまな要素を理解する助けになる
- 類似機能を持つプロジェクトとしてはFreeRTOSとZephyrがある
1件のコメント
Hacker Newsの意見
この筆者は、RTOSをArduino環境と同じようなものだと期待しているように見える
RTOSの簡単な整理:
従来のUNIX方式でシステム全体にツールチェーンをインストールするのはつらい
PlatformIOは正しい方向に進んでいる
RP2040プロジェクトをRustとEmbassyへ移行中
ZephyrはPi Picoを100%サポートしている
ThreadXはオープンソース
Hubrisを実際のプロジェクトで使ってみたい
microPythonのほうが簡単な道だと思う
シンプルなグリーンスレッドタイマーを自作した
FreeRTOSは事実上の業界標準
Rust RTICはrp2040をサポートしており、非常に軽量