Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Update critical_section dependency.
  • Loading branch information
reitermarkus committed Jun 14, 2022
commit 183e7e8c7ae4214b9f39fbed1f81c736f074c884
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ links = "cortex-m" # prevent multiple versions of this crate to be linked toget

[dependencies]
bitfield = "0.13.2"
critical-section = { version = "0.3", optional = true }
critical-section = "0.3"
embedded-hal = "0.2.4"
volatile-register = "0.2.0"

Expand All @@ -32,7 +32,7 @@ cm7 = []
cm7-r0p1 = ["cm7"]
linker-plugin-lto = []
std = []
single-core-critical-section = ["critical-section", "critical-section/token-bool"]
single-core-critical-section = ["critical-section/token-u8"]

[workspace]
members = [
Expand Down
11 changes: 7 additions & 4 deletions src/critical_section.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,23 @@ mod single_core_critical_section {
struct SingleCoreCriticalSection;
set_impl!(SingleCoreCriticalSection);

const TOKEN_IGNORE: RawToken = 0;
const TOKEN_REENABLE: RawToken = 1;

unsafe impl Impl for SingleCoreCriticalSection {
unsafe fn acquire() -> RawToken {
match primask::read() {
Primask::Active => {
interrupt::disable();
true
TOKEN_REENABLE
}
Primask::Inactive => false,
Primask::Inactive => TOKEN_IGNORE,
}
}

unsafe fn release(primask_was_active: RawToken) {
unsafe fn release(token: RawToken) {
// Only re-enable interrupts if they were enabled before the critical section.
if primask_was_active {
if token == TOKEN_REENABLE {
interrupt::enable()
}
}
Expand Down