[][src]Macro cortex_m::singleton

macro_rules! singleton {
    (: $ty:ty = $expr:expr) => { ... };
}

Macro to create a mutable reference to a statically allocated value

This macro returns a value with type Option<&'static mut $ty>. Some($expr) will be returned the first time the macro is executed; further calls will return None. To avoid unwrapping a None variant the caller must ensure that the macro is called from a function that's executed at most once in the whole lifetime of the program.

Example

#[macro_use(singleton)]
extern crate cortex_m;

fn main() {
    // OK if `main` is executed only once
    let x: &'static mut bool = singleton!(: bool = false).unwrap();

    let y = alias();
    // BAD this second call to `alias` will definitively `panic!`
    let y_alias = alias();
}

fn alias() -> &'static mut bool {
    singleton!(: bool = false).unwrap()
}