#[macro_export]
macro_rules! mut_singleton {
($type:ty, $name:ident, $accessor:ident, $constructor:expr) => {
static mut $name : Option<$type> = None;
#[allow(dead_code)]
#[inline(always)]
pub fn $accessor() -> &'static mut $type {
unsafe {
crate::hal::concurrency::interrupt::isolated(||{
if $name.is_none() {
core::ptr::replace(&mut $name, Some($constructor));
}
match &mut $name {
None => panic!(),
Some(instance) => instance
}
})
}
}
}
}