From 9e88718fbdd27a33e0182c8430bc51ff314f4e48 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Mon, 4 Jan 2021 22:25:39 +0100 Subject: Add "context" pointer to owned interrupt handlers. --- embassy-macros/src/lib.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'embassy-macros/src') diff --git a/embassy-macros/src/lib.rs b/embassy-macros/src/lib.rs index c46f114a0..861406393 100644 --- a/embassy-macros/src/lib.rs +++ b/embassy-macros/src/lib.rs @@ -117,9 +117,9 @@ pub fn interrupt_declare(item: TokenStream) -> TokenStream { fn number(&self) -> u8 { Interrupt::#name as u8 } - unsafe fn __handler(&self) -> &'static ::core::sync::atomic::AtomicPtr { + unsafe fn __handler(&self) -> &'static ::embassy::interrupt::Handler { #[export_name = #name_handler] - static HANDLER: ::core::sync::atomic::AtomicPtr = ::core::sync::atomic::AtomicPtr::new(::core::ptr::null_mut()); + static HANDLER: ::embassy::interrupt::Handler = ::embassy::interrupt::Handler::new(); &HANDLER } } @@ -141,13 +141,14 @@ pub fn interrupt_take(item: TokenStream) -> TokenStream { pub unsafe extern "C" fn trampoline() { extern "C" { #[link_name = #name_handler] - static HANDLER: ::core::sync::atomic::AtomicPtr; + static HANDLER: ::embassy::interrupt::Handler; } - let p = HANDLER.load(::core::sync::atomic::Ordering::Acquire); - if !p.is_null() { - let f: fn() = ::core::mem::transmute(p); - f() + let func = HANDLER.func.load(::core::sync::atomic::Ordering::Acquire); + let ctx = HANDLER.ctx.load(::core::sync::atomic::Ordering::Acquire); + if !func.is_null() { + let func: fn(*mut ()) = ::core::mem::transmute(func); + func(ctx) } } -- cgit