今回はEmbedded Rustの話は置いといて,とにかくサンプルコードをRPi Pico上で動かすことにフォーカスします.そのためコードやクレートの解説はほかの資料に譲ることにします.
1.RPi PicoとEmbedded Rust
そもそもRustで組込みプログラミングができるのかという問題があるのですが,Arm Cortex-M系のマイコンであれば動かすことができるようです.RPi PicoのマイコンであるRP2040はCortex-M0+のデュアルコアなのでRustが動かせるというわけです.
参考:
The Embedded Rust Book, https://rust-embedded.github.io/book/
2.何をやるか
今回はデバッガ等も使わずに,ただひたすらにバイナリを吐き出しLチカを
することにフォーカスします.3.環境
今回は,コードのビルドとELF->UF2の変換で使う環境を変えました.
ビルド:Rust(1.52.0-nightly) + PowerShell
ELF->UF2の変換:WSL2(Ubuntu 20.04)
最初はWSL2一本でやろうと思ったのですが,cargo buildを実行した際に
error: RPC failed; curl 56 GnuTLS recv error (-24): Decryption has failed.
のエラーが出てしまい,ビルドが通らなくなる現象が解決しなかったので今回はPowerShellを使いました(GitHubとの通信で出るようで,git fetchやgit cloneが使えなくなる).
ビルド後の処理でC/C++SDKに含まれるツールが必要になるので,WSL2の方の環境構築もお勧めします.詳細は,こちらを参考にしてください.
ビルド環境の方は,公式の手順通りにRustを突っ込んだのちにarm-none-eabi-gdbを突っ込みます.この辺りはEmbedded Rustでの手順と同じですが,今回はデバッガを使わないので,OpenOCDなどは入れません.
arm-none-eabi-gdbをインストールする際に,必ず環境変数にパスを追加するようにしましょう.インストールの最後に出てくる画面にAdd path to environment variableのオプションが出てくるのでチェックを入れましょう(初期状態だとチェックがないはず).
4.サンプルコードのクローン
5.ビルド
早速ビルドに移るのですが,そのままではCortex-M0+のELFファイルを吐き出してくれません.そこでおまじない
rustup target add thumbv6m-none-eabi
cargo run
6.ELF2UF2
.elfも生成出来たのでRPi Picoへ実装したいのですが,Picoへ実装する際に.uf2に変換する必要があります.これを行うツールがRPi PicoのC/C++ SDKに入っています.このツールは事前にビルドする必要があります.今回はこのビルドをWSL2上で行うことにします.
cd (pico-sdkのあるフォルダ)
cd pico-sdk/tools/elf2uf2
mkdir build
cd build
cmake ..
make
sudo cp elf2uf2 /usr/local/bin/
Usage: elf2uf2 (-v) <input ELF file> <output UF2 file>
最後に
elf2uf2 rp-test.elf rp-test.uf2
7.実機で動かす
.uf2を実機に入れるところの操作はC/C++ SDKと全く同じなので割愛.
こんな感じでLチカ完了です.
8.感想
Embedded Rustとほぼ同じなので,開発環境についてはある程度ほかのマイコンでの知見が生かせそうです.またデバッガを使う場合は,OpenOCDやらなんやらのインストールが必要みたいです.
9.参考
"rp-rs/sample-project", https://github.com/rp-rs/sample-project
"The Embedded Rust Book 日本語版",https://tomoyuki-nakabayashi.github.io/book/intro/index.html
"Crate cortex_m_quickstart", https://rust-embedded.github.io/cortex-m-quickstart/cortex_m_quickstart/
"PicoボードにPico_SDKでC言語をビルドする", https://beta-notes.way-nifty.com/blog/2021/02/post-2fff25.html
©2021 shts All Right Reserved.