diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 2 | ||||
-rw-r--r-- | src/macros.rs | 5 |
2 files changed, 5 insertions, 2 deletions
@@ -15,6 +15,7 @@ extern crate aligned; extern crate bare_metal; +extern crate untagged_option; extern crate volatile_register; #[macro_use] @@ -31,3 +32,4 @@ pub mod peripheral; pub mod register; pub use peripheral::Peripherals; +pub use untagged_option::UntaggedOption; diff --git a/src/macros.rs b/src/macros.rs index c9a32c2..c5799bf 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -54,13 +54,14 @@ macro_rules! singleton { (: $ty:ty = $expr:expr) => { $crate::interrupt::free(|_| unsafe { static mut USED: bool = false; - static mut VAR: $ty = $expr; + static mut VAR: $crate::UntaggedOption<$ty> = $crate::UntaggedOption { none: () }; if USED { None } else { USED = true; - let var: &'static mut _ = &mut VAR; + VAR.some = $expr; + let var: &'static mut _ = &mut VAR.some; Some(var) } }) |