1 ポイント 投稿者 GN⁺ 2024-07-07 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-07-07
Hacker Newsの意見
  • この筆者は、RTOSをArduino環境と同じようなものだと期待しているように見える

    • 多くのArduinoはmbedまたはfreertosを使っている
    • Zephyrは使いやすく、Pi Picoもサポートしている
  • RTOSの簡単な整理:

    • FreeRTOS: ほとんどのSoC/デバイスでサポートされているが、ドライバは各SoC/デバイスごとに異なる
    • Zephyr: 実際のハードウェア抽象化をサポートし、ほとんどのSoCをサポートしている
    • NuttX: サポートは弱いが、動けば非常に素晴らしい
  • 従来のUNIX方式でシステム全体にツールチェーンをインストールするのはつらい

    • Pythonをツールとして使うとバージョン問題を引き起こす
    • ツールは静的リンクされたバイナリであるべき
  • PlatformIOは正しい方向に進んでいる

    • ツールチェーン、SDK、ライブラリ、プロジェクト構成を管理する必要がある
    • ビルドはどこでも再現可能であるべき
  • RP2040プロジェクトをRustとEmbassyへ移行中

    • Rustは慣れるのが難しいが、満足感がある
  • ZephyrはPi Picoを100%サポートしている

    • ドキュメントを確認していないのではないかと疑問に思う
  • ThreadXはオープンソース

  • Hubrisを実際のプロジェクトで使ってみたい

    • Cでもっと苦労するが、Erlang/Elixirに似ている
  • microPythonのほうが簡単な道だと思う

    • async/awaitベースの協調マルチタスクがうまく機能する
  • シンプルなグリーンスレッドタイマーを自作した

    • 実際のプロセス管理はサポートしていないが、さまざまなセンサーをポーリングして信号を処理できる
  • FreeRTOSは事実上の業界標準

  • Rust RTICはrp2040をサポートしており、非常に軽量