27 lines
638 B
Rust
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);
|