diff options
author | 2020-07-12 00:49:28 +0000 | |
---|---|---|
committer | 2020-07-12 00:49:28 +0000 | |
commit | 437ad12ab0a3408ad2fc802560dd695a293f874d (patch) | |
tree | d97d7df18dbf89c378ef77dd446f7baeda165742 | |
parent | 32634e4e3e55a4071d12c4599484239af38cdd0f (diff) | |
parent | 688b4929d4f5ce493f778966c55ff6ead8fd0ba6 (diff) | |
download | cortex-m-437ad12ab0a3408ad2fc802560dd695a293f874d.tar.gz cortex-m-437ad12ab0a3408ad2fc802560dd695a293f874d.tar.zst cortex-m-437ad12ab0a3408ad2fc802560dd695a293f874d.zip |
Merge #243
243: Allow the taken flag to be optimized out r=adamgreig a=jonas-schievink
Fixes https://github.com/rust-embedded/cortex-m/issues/242
Verified manually that it still prevents linking in multiple versions.
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
-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 { |