我只能看到使用时钟周期来实时安排大众(RTFM)任务的示例:
#[init(schedule = [foo])]
fn init() {
schedule.foo(Instant::now() + PERIOD.cycles()).unwrap();
}
我找不到包含时钟速度的变量,RTFM的源代码大部分是初学者无法访问的语法树操作,我很难在GitHub上找到此API的用法。如何将周期与秒联系起来?
答案 0 :(得分:0)
我发现了一些东西
fn hertz_to_cycles(sysclock: Hertz, hertz: Hertz) -> Duration {
return (sysclock.0 / hertz.0).cycles();
}
#[init(schedule = [toggle])]
unsafe fn init() {
let mut rcc = device.RCC.constrain();
let mut flash = device.FLASH.constrain();
let clocks = rcc.cfgr.freeze(&mut flash.acr);
let sysclock = clocks.sysclk();
let period = hertz_to_cycles(sysclock, 2.hz());
schedule.toggle(Instant::now() + period).unwrap();
}
我希望它能引起认真的回答。
基本上,调度程序基于DWT(数据观察点触发器),并且必须以核心速度进行计时,所以我去了那里。