光を灯せ(Lチカ) コンパイル設定

Cargo.toml

cargo generateで生成したCargo.tomlは次の通りになっているかと思います。

[package]
edition = "2021"
name = "blink"
version = "0.1.0"
license = "MIT OR Apache-2.0"

[dependencies]
cortex-m = "0.7"
cortex-m-rt = "0.7"
embedded-hal = { version = "0.2.5", features = ["unproven"] }

defmt = "0.3"
defmt-rtt = "0.4"
panic-probe = { version = "0.3", features = ["print-defmt"] }

# We're using a Pico by default on this template
rp-pico = "0.8"

# but you can use any BSP. Uncomment this to use the pro_micro_rp2040 BSP instead
# sparkfun-pro-micro-rp2040 = "0.6"

# If you're not going to use a Board Support Package you'll need these:
# rp2040-hal = { version="0.8", features=["rt", "critical-section-impl"] }
# rp2040-boot2 = "0.2"

# ~以下省略~

[package]

[package]には、この作成しているプログラム(blink)の情報が記載されています。 editionは、利用するRustのコンパイラーのエディション(バージョンに近いがい少し違う)です。ここは、基本変更の必要はないはずです。(もし、古いエディションのRustが利用したいときは、変更する必要があると思います。) それ以外として、nameはこのプログラムの名前、versionはこのプログラムのVersion、licenseはこのプログラムのライセンスです。これらの情報は直接プログラムに影響を与えるものではないので、任意の値で結構です!

[dependencies]

[dependencies]には、利用したいcrates.ioに存在するライブラリ(クレート)や自作ライブラリ(クレート)の利用情報を記載します。ここに書かれたライブラリ(クレート)は、src/の下に描かれるプログラムから参照できるようになり、さらにcrates.ioのライブラリ(クレート)は、インターネットから自動でダウンロードしコンパイルができるようになります。

Info

お気づきかもしれないですが、Rustではライブラリに近いものをクレートと呼んでいます。 これは、他の言語の経験がある方にとってには少し戸惑いがあると思いますが、慣れるとむしろクレートと聞いて少し嬉しい気持ちになったりします! また他にもトレイトと言われるものがあります。これは他の言語でいうインターフェイスに近いものになります。

それぞれ記載しているクレートについて説明します。

cortex-m

Cortex-Mに低レベルにアクセスする処理をするためのクレートです。

Info

Cortexとは、マイクロプロセッサの設計開発をしているARM社のCPUファミリーの名称で、Cortex-A、Cortex-R、Cortex-Mの3つのシリーズがあります。その中でも、Cortex-Mは、ローエンドの組み込み用プロセッサとして開発されてます。後ろについているMは、マイクロコントローラーのMを指しているようです。

cortex-m-rt

Cortex-M マイクロコントローラーのセットアップ用のコードと最小限のランタイムです。 cortex-mと基本セットで利用する必要があります。

embedded-hal

Rustの組み込み用のトレイトの集まりです。 組み込みで利用するCPUチップは、数多く存在するしますが、細かい違いはあるものも共通的な機能が多いです。このembedded-halは、それらの共通化に大きく役に立っています。 ただembeded-halには、直接的な処理の機能がないためこれを継承して作成されたクレートを呼び出して利用する必要があり、今回はrp2040-halを内包しているrp-picoがそれに当たります。

詳細は、The Embedded Rust Bookに記載されているのでそちらを見ていただきたいですが、プログラミングに慣れてない方が見ても難しい内容なので、初めは見なくても支障はありません。

Info

halとは、Hardware Abstraction Layerの略で、ハードウェア抽象化層と言われるものです。このhalがハードウェアごとの仕様の違いを吸収し、利用するCPUが異なっていてもユーザーには、別のCPUと同じ使用間でプログラムができるになります。

rp-pico

rp2040をHALであるrp2040-halをRaspberry Pi Picoにカスタマイズしたクレートです。 rp2040のGPIOやI2Cなどの制御処理を関数を呼び出すだけで利用できます。

defmt

組み込みプログラミングで効率的にロギングを利用するためのフレームワークです。 defmtという名前は、deferred formattingから来ているそうです。

defmt-rrt

RTT(Real-Time Transfer)プロトコルで、defmtのログメッセージを送信するクレートです。