forループで遅延

最初の課題は、delay関数をペリフェラルを使わずに実装することです。 明らかな解決策は、forループで遅延を実装することです。

#![allow(unused)]
fn main() {
#[inline(never)]
fn delay(tim6: &tim6::RegisterBlock, ms: u16) {
    for _ in 0..1_000 {}
}
}

もちろん、上の実装は間違っています。どんなmsの値に対しても、常に同じ遅延を生成するからです。

このセクションでは、次のことに取り組む必要があります。

  • 入力のmsに比例した遅延を生成するように、delay関数を修正します。
  • LEDルーレットが4秒に5回(1周期800ms)程度回るように、delay関数を微調整します。
  • マイクロコントローラ内のプロセッサは、8MHzのクロックで駆動されており、ほとんどの命令を1「ティック」(1クロックサイクル)で実行します。 1秒の遅延を生成するために、何回の(for)ループが、delay関数に必要だと考えますか?
  • delay(1000)が実際に実行するforループは何回でしょうか?
  • プログラムをリリースモードでコンパイルし、実行すると、何が起こりますか?