diff options
author | 2020-07-12 02:43:14 +0200 | |
---|---|---|
committer | 2020-07-12 02:43:14 +0200 | |
commit | 688b4929d4f5ce493f778966c55ff6ead8fd0ba6 (patch) | |
tree | d97d7df18dbf89c378ef77dd446f7baeda165742 | |
parent | 32634e4e3e55a4071d12c4599484239af38cdd0f (diff) | |
download | cortex-m-688b4929d4f5ce493f778966c55ff6ead8fd0ba6.tar.gz cortex-m-688b4929d4f5ce493f778966c55ff6ead8fd0ba6.tar.zst cortex-m-688b4929d4f5ce493f778966c55ff6ead8fd0ba6.zip |
Allow the taken flag to be optimized out
-rw-r--r-- | src/peripheral/mod.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/peripheral/mod.rs b/src/peripheral/mod.rs index 0838dca..0dfd434 100644 --- a/src/peripheral/mod.rs +++ b/src/peripheral/mod.rs @@ -150,14 +150,17 @@ pub struct Peripherals { // NOTE `no_mangle` is used here to prevent linking different minor versions of this crate as that // would let you `take` the core peripherals more than once (one per minor version) #[no_mangle] -static mut CORE_PERIPHERALS: bool = false; +static CORE_PERIPHERALS: () = (); + +/// Set to `true` when `take` or `steal` was called to make `Peripherals` a singleton. +static mut TAKEN: bool = false; impl Peripherals { /// Returns all the core peripherals *once* #[inline] pub fn take() -> Option<Self> { interrupt::free(|_| { - if unsafe { CORE_PERIPHERALS } { + if unsafe { TAKEN } { None } else { Some(unsafe { Peripherals::steal() }) @@ -168,7 +171,7 @@ impl Peripherals { /// Unchecked version of `Peripherals::take` #[inline] pub unsafe fn steal() -> Self { - CORE_PERIPHERALS = true; + TAKEN = true; Peripherals { CBP: CBP { |