フラッシュに書き込む
フラッシュに書き込むということは、マイクロコントローラの(永続)メモリにプログラムを移動するプロセスです。 一度フラッシュに書き込むと、電源がオンになるたびにマイクロコントローラはフラッシュに書かれたプログラムを実行します。
今回の場合、led-roulette
はマイクロコントローラのメモリに存在する唯一のプログラムです。
これはこのマイクロコントローラ上で他に何も動いていないことを意味しています。
OSも「デーモン」も動いていません。
led-roulette
はデバイスの全ての制御を握っています。
cargo embed
のおかげでバイナリをフラッシュに書き込むことは極めて簡単です。
コマンドを実行する前に、このコマンドが何をするのか見てみましょう。 micro:bitのUSBコネクタがある側を見てみると、2つの黒い四角があることに気づくでしょう(micro:bit2では3つ目の一番大きなスピーカーもあります)。 1つは既に話したとおりMCUです。 それではもう1つは何をするものなのでしょうか? このもう1つのチップは主に3つの役割を果たします。
- MCUにUSBコネクタからの電源を供給する
- MCUのシリアルとUSBのブリッジ機能を提供する(後の章で説明します)
- プログラマー/デバッガーになる(これが今のお目当てです)
基本的にこのチップは私たちのコンピュータ(USBで接続されている)とMCU(トレースで接続されていてSWDプロトコルで通信する)とのブリッジです。 このブリッジのおかげでMCUのフラッシュに新しいバイナリを書き込めるし、デバッガーを使ってMCUの状態を調査したりできます。
ファラッシュに書き込んでみましょう!
# For micro:bit v2
$ cargo embed --features v2 --target thumbv7em-none-eabihf
(...)
Erasing sectors ✔ [00:00:00] [####################################################################################################################################################] 2.00KiB/ 2.00KiB @ 4.21KiB/s (eta 0s )
Programming pages ✔ [00:00:00] [####################################################################################################################################################] 2.00KiB/ 2.00KiB @ 2.71KiB/s (eta 0s )
Finished flashing in 0.608s
# For micro:bit v1
$ cargo embed --features v1 --target thumbv6m-none-eabi
(...)
Erasing sectors ✔ [00:00:00] [####################################################################################################################################################] 2.00KiB/ 2.00KiB @ 4.14KiB/s (eta 0s )
Programming pages ✔ [00:00:00] [####################################################################################################################################################] 2.00KiB/ 2.00KiB @ 2.69KiB/s (eta 0s )
Finished flashing in 0.614s
cargo-embed
が最後の1行を出力したあと、(訳注:実行が終了せずにコンソールを)ブロックしていることに気づくでしょう。
これは意図通り動いており、閉じてはいけません。
次のステップでデバッグするためにこのままの状態にしておく必要があります。
さらに、cargo build
とcargo embed
とに同じフラグが渡されていることにも気づくでしょう。
これはcargo embed
がビルドを実行して、そのあとチップにビルド結果のバイナリを書き込んでいるためです。
そのため、新しいコードをすぐにフラッシュに書き込みたいときはcargo build
を省略できます。