thumbv6m support with emulated atomics

This commit is contained in:
Dario Nieuwenhuis
2021-03-04 21:40:54 +01:00
parent 88946840d1
commit 18f6b8ad68
13 changed files with 51 additions and 12 deletions

View File

@ -157,17 +157,17 @@ pub fn interrupt_take(item: TokenStream) -> TokenStream {
static HANDLER: ::embassy::interrupt::Handler;
}
let func = HANDLER.func.load(::core::sync::atomic::Ordering::Acquire);
let ctx = HANDLER.ctx.load(::core::sync::atomic::Ordering::Acquire);
let func = HANDLER.func.load(::embassy::atomic::Ordering::Acquire);
let ctx = HANDLER.ctx.load(::embassy::atomic::Ordering::Acquire);
if !func.is_null() {
let func: fn(*mut ()) = ::core::mem::transmute(func);
func(ctx)
}
}
static TAKEN: ::core::sync::atomic::AtomicBool = ::core::sync::atomic::AtomicBool::new(false);
static TAKEN: ::embassy::atomic::AtomicBool = ::embassy::atomic::AtomicBool::new(false);
if TAKEN.compare_exchange(false, true, ::core::sync::atomic::Ordering::AcqRel, ::core::sync::atomic::Ordering::Acquire).is_err() {
if TAKEN.compare_exchange(false, true, ::embassy::atomic::Ordering::AcqRel, ::embassy::atomic::Ordering::Acquire).is_err() {
panic!("IRQ Already taken");
}