diff options
| -rw-r--r-- | embassy-executor/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-macros/Cargo.toml | 3 | ||||
| -rw-r--r-- | embassy-macros/src/macros/cortex_m_interrupt_take.rs | 27 |
3 files changed, 26 insertions, 8 deletions
diff --git a/embassy-executor/Cargo.toml b/embassy-executor/Cargo.toml index 1a611720c..409a341f0 100644 --- a/embassy-executor/Cargo.toml +++ b/embassy-executor/Cargo.toml | |||
| @@ -31,7 +31,7 @@ nightly = [] | |||
| 31 | integrated-timers = ["dep:embassy-time"] | 31 | integrated-timers = ["dep:embassy-time"] |
| 32 | 32 | ||
| 33 | # Trace interrupt invocations with rtos-trace. | 33 | # Trace interrupt invocations with rtos-trace. |
| 34 | rtos-trace-interrupt = ["rtos-trace"] | 34 | rtos-trace-interrupt = ["rtos-trace", "embassy-macros/rtos-trace-interrupt"] |
| 35 | 35 | ||
| 36 | [dependencies] | 36 | [dependencies] |
| 37 | defmt = { version = "0.3", optional = true } | 37 | defmt = { version = "0.3", optional = true } |
| @@ -39,7 +39,7 @@ log = { version = "0.4.14", optional = true } | |||
| 39 | rtos-trace = { version = "0.1.2", optional = true } | 39 | rtos-trace = { version = "0.1.2", optional = true } |
| 40 | 40 | ||
| 41 | futures-util = { version = "0.3.17", default-features = false } | 41 | futures-util = { version = "0.3.17", default-features = false } |
| 42 | embassy-macros = { version = "0.1.0", path = "../embassy-macros"} | 42 | embassy-macros = { version = "0.1.0", path = "../embassy-macros" } |
| 43 | embassy-time = { version = "0.1.0", path = "../embassy-time", optional = true} | 43 | embassy-time = { version = "0.1.0", path = "../embassy-time", optional = true} |
| 44 | atomic-polyfill = "1.0.1" | 44 | atomic-polyfill = "1.0.1" |
| 45 | critical-section = "1.1" | 45 | critical-section = "1.1" |
diff --git a/embassy-macros/Cargo.toml b/embassy-macros/Cargo.toml index 19a3e9de2..03fa79dd8 100644 --- a/embassy-macros/Cargo.toml +++ b/embassy-macros/Cargo.toml | |||
| @@ -15,3 +15,6 @@ proc-macro = true | |||
| 15 | [features] | 15 | [features] |
| 16 | std = [] | 16 | std = [] |
| 17 | wasm = [] | 17 | wasm = [] |
| 18 | |||
| 19 | # Enabling this cause interrupt::take! to require embassy-executor | ||
| 20 | rtos-trace-interrupt = [] | ||
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); |
