rt 0.19.1

A real-time operating system capable of full preemption
Documentation
#![no_main]
#![cfg_attr(target_os = "none", no_std)]

use core::sync::atomic::{AtomicI32, Ordering};

const STACK_SIZE: usize = 2 * rt::stack::MIN;

rt::timer_queue!(QUEUE, 4);
rt::timer_task!(&QUEUE, STACK_SIZE, 0);

static X: AtomicI32 = AtomicI32::new(0);

rt::timer_periodic!(TIMER, &QUEUE, X.fetch_add(1, Ordering::Relaxed), 5);

fn task0() {
    TIMER.start();
    rt::task::sleep(18);
    TIMER.stop();
    assert_eq!(X.load(Ordering::Relaxed), 3, "x has an unexpected value");
    TIMER.change_period(3);
    TIMER.start();
    rt::task::sleep(25);
    TIMER.stop();
    assert_eq!(X.load(Ordering::Relaxed), 11, "x has an unexpected value");
    rt::exit();
}

rt::task!(task0, STACK_SIZE, 0);