rt/rust/examples/sleep.rs

27 lines
638 B
Rust

#![no_main]
const NLOOPS: i32 = 5;
fn sleep_periodic(period: rt::tick::Utick) {
rt::task::drop_privilege();
let mut last_wake_tick = 0;
for _ in 0..NLOOPS {
rt::task::sleep_periodic(&mut last_wake_tick, period);
assert_eq!(
rt::tick::count(),
last_wake_tick,
"a task woke up at the wrong tick"
);
}
// Only the second task to finish will call rt::trap.
rt::semaphore!(TRAP_SEM, 1);
if !TRAP_SEM.try_wait() {
rt::trap();
}
}
rt::task!(sleep_periodic(5), rt::task::STACK_MIN, 2);
rt::task!(sleep_periodic(10), rt::task::STACK_MIN, 1);