for ループによる遅延
最初の課題は、ペリフェラルを一切使わずに delay 関数を実装することです。明らかな解決策は、これを for ループによる遅延として実装することです。
#![allow(unused)]
fn main() {
#[inline(never)]
fn delay(tim6: &tim6::RegisterBlock, ms: u16) {
for _ in 0..1_000 {}
}
}
もちろん、上の実装は誤っています。ms の値が何であっても、常に同じ遅延が生成されるからです。
このセクションでは、次のことを行います。
delay関数を修正し、入力msに比例した遅延を生成するようにしてください。delay関数を調整し、LED ルーレットが 4 秒間に約 5 周する速度(周期 800 ミリ秒)で回転するようにしてください。- マイクロコントローラ内のプロセッサは 72 MHz でクロック駆動されており、ほとんどの命令を 1「tick」、つまりクロックの 1 サイクルで実行します。1 秒の遅延を生成するには、
delay関数は何回の(for)ループを実行する必要があると 思いますか? delay(1000)は実際には何回forループを実行しますか?- プログラムを
releaseモードでコンパイルして実行すると、何が起こりますか?