diff options
author | 2018-01-23 20:27:06 +0100 | |
---|---|---|
committer | 2018-01-23 20:27:06 +0100 | |
commit | d30209fa372831d819607e6a324b7512f8d1cfaa (patch) | |
tree | ed29ab4b5932438f4244a0efab4869231967d7d3 | |
parent | c921d43f58db6ac4050e53c6b372d530fce073b7 (diff) | |
download | cortex-m-d30209fa372831d819607e6a324b7512f8d1cfaa.tar.gz cortex-m-d30209fa372831d819607e6a324b7512f8d1cfaa.tar.zst cortex-m-d30209fa372831d819607e6a324b7512f8d1cfaa.zip |
initialize singletons at runtime
-rw-r--r-- | Cargo.toml | 3 | ||||
-rw-r--r-- | src/lib.rs | 2 | ||||
-rw-r--r-- | src/macros.rs | 5 |
3 files changed, 7 insertions, 3 deletions
@@ -13,6 +13,7 @@ version = "0.4.2" aligned = "0.1.1" bare-metal = "0.1.0" volatile-register = "0.2.0" +untagged-option = "0.1.1" [features] -cm7-r0p1 = []
\ No newline at end of file +cm7-r0p1 = [] @@ -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) } }) |