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毫秒周期)的速度旋转。 - 微控制器内的处理器的时钟频率为72MHz,并在一次"tick"中执行大多数指令。您认为延迟函数必须执行多少(
for
)循环才能产生1秒的delay
? delay(1000)
实际执行多少个for
循环?- 如果以发布模式编译程序并运行它会发生什么?