光を灯せ(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のライブラリ(クレート)は、インターネットから自動でダウンロードしコンパイルができるようになります。
お気づきかもしれないですが、Rustではライブラリに近いものをクレートと呼んでいます。 これは、他の言語の経験がある方にとってには少し戸惑いがあると思いますが、慣れるとむしろクレートと聞いて少し嬉しい気持ちになったりします! また他にもトレイトと言われるものがあります。これは他の言語でいうインターフェイスに近いものになります。
それぞれ記載しているクレートについて説明します。
cortex-m
Cortex-Mに低レベルにアクセスする処理をするためのクレートです。
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に記載されているのでそちらを見ていただきたいですが、プログラミングに慣れてない方が見ても難しい内容なので、初めは見なくても支障はありません。
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
のログメッセージを送信するクレートです。