如何使用秒数来实时为大众安排任务而不是周期?

时间:2019-01-14 22:30:29

标签: rust real-time

我只能看到使用时钟周期来实时安排大众(RTFM)任务的示例:

#[init(schedule = [foo])]
fn init() {
    schedule.foo(Instant::now() + PERIOD.cycles()).unwrap();
}

我找不到包含时钟速度的变量,RTFM的源代码大部分是初学者无法访问的语法树操作,我很难在GitHub上找到此API的用法。如何将周期与秒联系起来?

1 个答案:

答案 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(数据观察点触发器),并且必须以核心速度进行计时,所以我去了那里。