①マクロ宣言
このコード部分の話
#![no_std]
#![no_main]
マクロ(#![no_std]
と#![no_main]
)
Rustのマクロは、コンパイル時に処理されます。
コンパイルする時にコードを上書きしてくれるイメージです。
これは、C言語の#define
に少し似ています。
書き方は、#![macro_name]
です。
他にも関数のような使い方ができるマクロもあり、info!(argument)
がそれに当たります。
そして、最初の2行に#![no_std]
と#![no_main]
が記載されているかと思いますが、これもマクロです。
#![no_std]
#![no_std]
は、Rustのstdクレートの代わりにcoreクレートをリンクします。
このstdクレートは、WindowsやLinuxといったOS上で動作するソフトウェアに対して利用できます。
一方で、今回の組み込みソフトウェアでは、OSなしのベアメタル環境になるめstdクレートが利用できません。
そのため、OSなしの環境でも動作するcoreクレートに切り替える必要があるわけです。
#![no_main]
#![no_main]
は、Rustコンパイラの通常のエントリポイント(main関数)を利用しないことを意味します。
通常のmain関数を利用しない代わりに、今回のコードでは#[rp2040_hal::entry]
というマクロを宣言しています。
つまり、RP2040専用のエントリポイントを利用しているということです。