Feature-gate critical-section-impl

For compatibility with earlier versions, this feature is activated by
default. This decision can be revisited later.
This commit is contained in:
Jan Niehusmann 2022-08-10 17:33:07 +00:00
parent b4d0d613e3
commit c1c5e05989
2 changed files with 9 additions and 1 deletions

View file

@ -25,8 +25,10 @@ usb-device = "0.2.9"
vcell = "0.1"
void = { version = "1.0.2", default-features = false }
rand_core = "0.6.3"
# Always set the custom-impl feature of legacy critical-section, even if we don't provide our own,
# as the default implementation should no longer be used.
critical-section_0_2 = { package = "critical-section", version = "0.2.4", features = ["custom-impl"] }
critical-section = { version = "1.0.0", features = ["restore-state-u8"] }
critical-section = { version = "1.0.0" }
futures = { version = "0.3", default-features = false, optional = true }
chrono = { version = "0.4", default-features = false, optional = true }
@ -42,11 +44,13 @@ pio-proc = "0.2.0"
dht-sensor = "0.2.1"
[features]
default = ["critical-section-impl"]
rt = ["rp2040-pac/rt"]
rom-func-cache = []
disable-intrinsics = []
rom-v2-intrinsics = []
rp2040-e5 = [] # USB errata 5: USB device fails to exit RESET state on busy USB bus.
critical-section-impl = ["critical-section/restore-state-u8"]
[[example]]
# irq example uses cortex-m-rt::interrupt, need rt feature for that

View file

@ -1,7 +1,9 @@
use core::sync::atomic::{AtomicU8, Ordering};
struct RpSpinlockCs;
#[cfg(feature = "critical-section-impl")]
critical_section_0_2::custom_impl!(RpSpinlockCs);
#[cfg(feature = "critical-section-impl")]
critical_section::set_impl!(RpSpinlockCs);
/// Marker value to indicate no-one has the lock.
@ -22,6 +24,7 @@ static mut LOCK_OWNER: AtomicU8 = AtomicU8::new(LOCK_UNOWNED);
/// The value 2 indicates that we aren't the outermost call, and should not release the spinlock or re-enable interrupts in `release`
const LOCK_ALREADY_OWNED: u8 = 2;
#[cfg(feature = "critical-section-impl")]
unsafe impl critical_section_0_2::Impl for RpSpinlockCs {
unsafe fn acquire() -> u8 {
RpSpinlockCs::acquire()
@ -32,6 +35,7 @@ unsafe impl critical_section_0_2::Impl for RpSpinlockCs {
}
}
#[cfg(feature = "critical-section-impl")]
unsafe impl critical_section::Impl for RpSpinlockCs {
unsafe fn acquire() -> u8 {
RpSpinlockCs::acquire()