no_std Rust環境
通常のRustプログラムを書く場合、完全な標準ライブラリ(std)にアクセスできます。これにより、heap allocation、スレッド、ファイルシステム、ネットワーキングといった機能を利用できます。しかし、これらの機能はすべて、ある前提に依存しています。それは、下層にオペレーティングシステムが存在することです。
embedded systemsでは、通常オペレーティングシステムがありません。ファイルシステムもありません。ネットワークスタックもありません。自分で用意しない限りheap allocatorもありません。ハードウェア上で直接動作します。
そこで登場するのがno_stdです。
コードの先頭にこの1行を追加すると:
#![allow(unused)] #![no_std] fn main() { }
Rustコンパイラに対してこう伝えることになります。「標準ライブラリは不要です。coreの言語機能だけでやりくりします。」
Rustは最小限のcore crateのみをリンクするようになり、これには基本的な型、エラー処理などの必須要素が含まれます。これは、多くのembedded applicationsのロジックを書くのに十分です。
コードの修正
このディレクティブを含めるように、プログラムを更新しましょう。コードエディタでプロジェクトを開き、src/main.rsファイルを次のように修正してください:
#![no_std] #![no_main] use cortex_m_rt::entry; #[entry] fn main() -> ! { loop {} }