rt 0.19.0

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};

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

fn foo() -> &'static str {
    X.fetch_add(1, Ordering::Relaxed);
    "hello world\n"
}

rt::lazy_lock!(HELLO, &'static str, foo);

fn task0() {
    let _ = *HELLO;
    let _ = *HELLO;
    // Check that foo was only called once.
    assert_eq!(X.load(Ordering::Relaxed), 1);
    rt::exit();
}

rt::task!(task0, rt::stack::MIN, 0);