フラッシュする
フラッシュとは、私たちのプログラムをマイクロコントローラーの(永続)メモリに書き込むプロセスです。ひとたび フラッシュされると、マイクロコントローラーは電源が入るたびに、そのフラッシュされたプログラムを実行します。
この場合、私たちの led-roulette プログラムはマイクロコントローラーのメモリ内で動作する 唯一の プログラムになります。
つまり、マイクロコントローラー上ではほかに何も動いていません。OS もなければ、「デーモン」もなく、
本当に何もありません。led-roulette がデバイスを完全に制御します。
バイナリ自体のフラッシュは、cargo embed のおかげでとても簡単です。
ただし、そのコマンドを実行する前に、それが実際に何をしているのかを見てみましょう。USB コネクターが上を向くように micro:bit の側面を見ると、実際にはそこに黒い四角が 2 つあることに気づくはずです (micro:bit v2 には 3 つ目の、そして最も大きいものがありますが、それはスピーカーです)。1 つはすでに説明した MCU ですが、 もう 1 つは何のためにあるのでしょうか? そのもう 1 つのチップには、主に 3 つの役割があります。
- USB コネクターから MCU に電力を供給する
- MCU 用のシリアル-USB ブリッジを提供する(これは後の章で見ていきます)
- プログラマ/デバッガとして動作する(今のところ重要なのはこの役割です)
基本的に、このチップはコンピューター(USB 経由で接続されている)と MCU(配線パターンを介して接続され、SWD プロトコルで通信している)の間の ブリッジとして動作します。このブリッジによって、MCU に新しいバイナリをフラッシュしたり、 デバッガを通してその状態を調べたり、その他いろいろなことができるようになります。
では、フラッシュしてみましょう!
# 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
# 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 がそのまま待機し続けることに気づくでしょう。これは意図された挙動なので、
閉じないでください。次のステップ、つまりデバッグでこの状態のまま必要になるからです! さらに、
cargo build と cargo embed には実際には同じフラグが渡されていることにも気づいたでしょう。これは、
cargo embed が実際にはビルドを実行し、その結果できたバイナリをチップにフラッシュしているためです。したがって、
今後すぐにコードをフラッシュしたい場合は、cargo build のステップを省いてもかまいません。