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ループは何回でしょうか?- プログラムをリリースモードでコンパイルし、実行すると、何が起こりますか?