コンテンツにスキップ

組み込み Rust 用語集

Rust の標準ライブラリ(std)を使わず、core ライブラリのみで動作するモード。組み込みなどOSがない環境で必須。#![no_std] アトリビュートで有効化。 標準ライブラリを使用しない場合は println! などのマクロは使用できない。 代わりに defmt などの組み込みに対応したログライブラリを使用する。

マイコンのレジスタを直接操作するための低レベル crate。 マイコンメーカーから提供される SVD (System View Description) ファイルから自動生成される。通常は HAL を経由して使う。

たとえば、STM32 であれば公式の stm32-rs リポジトリにて SVD を管理・提供している。

embassy 開発コミュニティではこの SVD を元に、 stm32-metapac クレートを自動生成している。 embassy ではこの PAC の上に embassy-stm32 を構築している。 詳細は stm32-data を参照。

PAC の上に構築される抽象化レイヤー。embedded-hal トレイトを実装し、ペリフェラルを安全に操作できるようにする。

STM32 であれば stm32f7xx-hal などのようにマイコンのファミリーごとに管理されたクレートが用意されている。 ベアメタル実装をする場合はこれらの HAL レイヤーを直接利用するか、あるいは PAC を直接利用してレジスタ操作を行う。

組み込みハードウェア抽象化のトレイト集。GPIO、SPI、I2C、UART、ADC などの共通インターフェースを定義。これに準拠した HAL 実装やドライバは相互に組み合わせ可能。

embedded-hal 参照。

RTIC (Real-Time Interrupt-driven Concurrency)

Section titled “RTIC (Real-Time Interrupt-driven Concurrency)”

Cortex-M 向けのリアルタイムフレームワーク。割り込み優先度をベースにしたタスクスケジューリングと、安全なリソース共有を提供する。

日本語版の記事は RTIC (Real-Time Interrupt-driven Concurrency) 参照。

Embassy は Rust の async/await を組み込みで活用するためのフレームワーク。非同期ランタイム(executor)、HAL(embassy-stm32 等)、通信スタック(embassy-net 等)を統合的に提供。

現在最も活発に開発されている組み込み Rust フレームワークであり、パフォーマンス面でも優れている。

defmt は組み込み向けの軽量ログフォーマット。 文字列をホスト側に転送せず、フォーマット情報のみを送信することで帯域を節約。

SEGGER が開発したデバッグプローブ経由の高速データ転送方式。defmt やロギングで広く使われる。

RTT(Real Time Transfer) RTT Knowledge Base

Rust 製のデバッグプローブ操作ライブラリ兼ツール。SWD/JTAG 経由でフラッシュ書き込み、デバッグ、RTT を統一的に扱える。 本サイトの probe-rs book 参照。

リンカスクリプト。フラッシュと RAM の開始アドレスとサイズを定義する。Cortex-M プロジェクトで必須。 memory.x については Embedded Rust Book にて 解説 あり。

cortex-m-rt が提供する #[entry] マクロ。main 関数を組み込み用のエントリポイントとしてマークする。戻り値は !(決して返らない)。 cortex-m 参照。

ホスト(PC)とは異なるターゲット(マイコン)向けにコンパイルすること。例: thumbv7em-none-eabihf ターゲットで STM32 用バイナリをビルド。

CPU を介さずにメモリとペリフェラル間でデータを転送する仕組み。UART や SPI の大量データ転送でCPU負荷を下げる。

マイコンのデバッグや書き込みを行うためのインターフェース規格。

JTAG (Joint Test Action Group) は古い規格で、4 線(TCK, TMS, TDI, TDO)を必要とする。 SWD (Serial Wire Debug) は JTAG の簡易版で、2 線(SWDIO, SWCLK)で済む。

最近の組み込み Rust 開発では SWD が一般的。