Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 モードでコンパイルして実行すると、何が起こりますか?