rt 0.19.1

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

const ITERATIONS: u32 = 1000;

rt::pool!(POOL, u32, 10);
rt::queue!(QUEUE, rt::sync::PoolBox<u32>, 5);

fn getter() {
    rt::task::drop_privilege();
    for i in 0..ITERATIONS {
        QUEUE.push(POOL.alloc(i));
    }
}

fn putter() {
    rt::task::drop_privilege();
    for i in 0..ITERATIONS {
        assert!(*QUEUE.pop() == i, "*p has an unexpected value");
    }
    rt::exit();
}

fn timeout() {
    rt::task::sleep(100);
    panic!("timed out");
}

rt::task!(getter, rt::stack::MIN * 2, 1);
rt::task!(putter, rt::stack::MIN * 2, 1);
rt::task!(timeout, rt::stack::MIN, 0);