aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bors[bot] <26634292+bors[bot]@users.noreply.github.com> 2020-07-12 00:49:28 +0000
committerGravatar GitHub <noreply@github.com> 2020-07-12 00:49:28 +0000
commit437ad12ab0a3408ad2fc802560dd695a293f874d (patch)
treed97d7df18dbf89c378ef77dd446f7baeda165742
parent32634e4e3e55a4071d12c4599484239af38cdd0f (diff)
parent688b4929d4f5ce493f778966c55ff6ead8fd0ba6 (diff)
downloadcortex-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.rs9
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 {