Embassy/Rust vs FreeRTOS/C 対決:STM32F446 で実測

Embedded Rust RTOS vs. C RTOS

Embassy/Rust vs FreeRTOS/C 対決:STM32F446 で実測

Tweede golf のブログ記事では、STM32F446 マイコン上で Embassy(async Rust)と FreeRTOS(C)を比較しています。同じ動作をするアプリケーションを実装し、割り込みレイテンシ、プログラムサイズ、RAM使用量、プログラミングの容易さを評価。結果は、Rust の方がメモリ効率が良く、C の方がレイテンシが短い可能性が示唆されます。

Rust のコンパイラが生成する future は、await ポイントをまたいで保持する変数だけを格納し、フルスタックサイズを割り当てる必要がないため、Rust 実装が勝つはずです。
  1. Animats

    これは非常に軽いCPU負荷の下での話です。したがって、プリエンプションのない非同期アプローチでも機能します。もし重要な計算が行われているなら、それはうまく機能しません。

    オシロスコープで測定するのに有用な数値は、最悪ケースの割り込みレイテンシです。これは、ハードリアルタイム制約がある場合に重要です。彼らは標準偏差を測定しましたが、最悪ケースは測定していません。通常のテスト設定は、入力信号(通常は方形波)を入力ピンに送り、割り込みが妨げられなければ割り込みが発生し、タスクが開始され、タスクが出力ピンをオンにします。オシロスコープで入力から出力への遅延を観察し、外れ値を探します。

    完全に実行完了まで走る場合、外れ値は最も長い計算タスクによって決まります。これは、計算タスクがある場合に問題です。

    これは歴史的にQNXが優れている点です。割り込みが処理され、スレッドがスケジュールされます。割り込みレベルで行われるのは、ほぼスレッドの起動だけです。スレッドが出力ピンをオンにします。オシロスコープでスケジューリングの外れ値を探すことができます。最良ケースのレイテンシは、割り込みレベルで作業を行うよりも高くなりますが、最悪ケースのレイテンシは、優先度の低いスレッドが計算バウンドであっても一定です。

    これがリアルタイムと「ニアリアルタイム」スケジューリングの違いです。

  2. CupricTea

    タイトルは変更されるべきです。非同期RustはRTOSではありません。RTOSはプリエンプティブなマルチスレッドですが、非同期は協調的に降伏ポイントで行われます。

    おそらく「組み込み非同期Rust vs C RTOS」でしょう。

  3. joshchngs

    この記事は現在から約5年前のもので、組み込みRustの観点ではかなり古いです。一般的な状況はあまり変わっていないと思いますが、詳細に依存することには注意が必要です。

この日のほかの記事

2026-09-02