Как использовать секунды для планирования задачи в реальном времени для масс вместо циклов? - PullRequest
0 голосов
/ 15 января 2019

Я вижу только примеры использования циклов часов для планирования задач в реальном времени для масс (RTFM):

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

Я не могу найти переменную, содержащую тактовую частоту, исходный код RTFM - это в основном манипулирование синтаксическим деревом, недоступное для новичка, я изо всех сил пытаюсь найти использование этого API на GitHub. Как соотнести циклы с секундами?

1 Ответ

0 голосов
/ 15 января 2019

Я нашел что-то:

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 (триггер точки наблюдения за данными), и у этой вещи есть для тактирования на частоте ядра, поэтому я пошел, чтобы получить ее там.

...