aboutsummaryrefslogtreecommitdiff
path: root/embassy-macros/src
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2022-08-23 14:57:45 +0200
committerUlf Lilleengen <[email protected]>2022-08-25 12:46:24 +0200
commit045ae2c29f2ca358a501e664ed2a7863b9a6bd59 (patch)
treeaaf0b1ac5b83a9c23151964fd6c6b4aeb40360c0 /embassy-macros/src
parent529535194d4b5d58b31fd6a7541176105e3c63f7 (diff)
Ensure interrupt::take works without embassy-executor
Add "rtos-trace-interrupt" feature flag on embassy-macros and enable it for embassy-executor, to ensure that the interrupt::take! macro can be used without depending on embassy-executor.
Diffstat (limited to 'embassy-macros/src')
-rw-r--r--embassy-macros/src/macros/cortex_m_interrupt_take.rs27
1 files changed, 21 insertions, 6 deletions
diff --git a/embassy-macros/src/macros/cortex_m_interrupt_take.rs b/embassy-macros/src/macros/cortex_m_interrupt_take.rs
index f6e41bcb4..d30189ce3 100644
--- a/embassy-macros/src/macros/cortex_m_interrupt_take.rs
+++ b/embassy-macros/src/macros/cortex_m_interrupt_take.rs
@@ -6,6 +6,23 @@ pub fn run(name: syn::Ident) -> Result<TokenStream, TokenStream> {
6 let name_interrupt = format_ident!("{}", name); 6 let name_interrupt = format_ident!("{}", name);
7 let name_handler = format!("__EMBASSY_{}_HANDLER", name); 7 let name_handler = format!("__EMBASSY_{}_HANDLER", name);
8 8
9 #[cfg(feature = "rtos-trace-interrupt")]
10 let (isr_enter, isr_exit) = (
11 quote! {
12 ::embassy_executor::rtos_trace_interrupt! {
13 ::embassy_executor::export::trace::isr_enter();
14 }
15 },
16 quote! {
17 ::embassy_executor::rtos_trace_interrupt! {
18 ::embassy_executor::export::trace::isr_exit();
19 }
20 },
21 );
22
23 #[cfg(not(feature = "rtos-trace-interrupt"))]
24 let (isr_enter, isr_exit) = (quote! {}, quote! {});
25
9 let result = quote! { 26 let result = quote! {
10 { 27 {
11 #[allow(non_snake_case)] 28 #[allow(non_snake_case)]
@@ -19,13 +36,11 @@ pub fn run(name: syn::Ident) -> Result<TokenStream, TokenStream> {
19 let func = HANDLER.func.load(interrupt::_export::atomic::Ordering::Relaxed); 36 let func = HANDLER.func.load(interrupt::_export::atomic::Ordering::Relaxed);
20 let ctx = HANDLER.ctx.load(interrupt::_export::atomic::Ordering::Relaxed); 37 let ctx = HANDLER.ctx.load(interrupt::_export::atomic::Ordering::Relaxed);
21 let func: fn(*mut ()) = ::core::mem::transmute(func); 38 let func: fn(*mut ()) = ::core::mem::transmute(func);
22 ::embassy_executor::rtos_trace_interrupt! { 39 #isr_enter
23 ::embassy_executor::export::trace::isr_enter(); 40
24 }
25 func(ctx); 41 func(ctx);
26 ::embassy_executor::rtos_trace_interrupt! { 42 #isr_exit
27 ::embassy_executor::export::trace::isr_exit(); 43
28 }
29 } 44 }
30 45
31 static TAKEN: interrupt::_export::atomic::AtomicBool = interrupt::_export::atomic::AtomicBool::new(false); 46 static TAKEN: interrupt::_export::atomic::AtomicBool = interrupt::_export::atomic::AtomicBool::new(false);