From e8b4fa7b32cf044428971f22e01428ff9cccff3c Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Thu, 8 Oct 2020 17:33:16 +0200 Subject: Added critical sections --- macros/src/codegen/module.rs | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'macros/src/codegen/module.rs') diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs index bba64bb9..1fd3cd42 100644 --- a/macros/src/codegen/module.rs +++ b/macros/src/codegen/module.rs @@ -350,13 +350,6 @@ pub fn codegen( let device = extra.device; let enum_ = util::interrupt_ident(); let interrupt = &analysis.interrupts.get(&priority); - let pend = { - quote!( - rtic::pend(#device::#enum_::#interrupt); - ) - }; - - eprintln!("pend {}", &pend); items.push(quote!( #(#cfgs)* @@ -365,25 +358,26 @@ pub fn codegen( use rtic::Mutex as _; let input = #tupled; - // TODO: use critical section, now we are unsafe - unsafe { - if let Some(index) = #app_path::#fq.dequeue() { + + if let Some(index) = rtic::export::interrupt::free(|_| #app_path::#fq.dequeue()) { + unsafe { #app_path::#inputs .get_unchecked_mut(usize::from(index)) .as_mut_ptr() .write(input); + } - // #write_instant, do we need? - + rtic::export::interrupt::free(|_| { #app_path::#rq.enqueue_unchecked((#app_path::#t::#name, index)); + }); - #pend + rtic::pend(#device::#enum_::#interrupt); - Ok(()) - } else { - Err(input) - } + Ok(()) + } else { + Err(input) } + })); } -- cgit v1.2.3