diff options
Diffstat (limited to 'macros/src')
-rw-r--r-- | macros/src/codegen/hardware_tasks.rs | 18 | ||||
-rw-r--r-- | macros/src/codegen/module.rs | 12 | ||||
-rw-r--r-- | macros/src/codegen/post_init.rs | 19 |
3 files changed, 40 insertions, 9 deletions
diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs index e6233071..119ef2c9 100644 --- a/macros/src/codegen/hardware_tasks.rs +++ b/macros/src/codegen/hardware_tasks.rs @@ -74,10 +74,12 @@ pub fn codegen( #let_instant rtfm::export::run(PRIORITY, || { - hprintln!("here").unwrap(); - // core::pin::Pin::new(crate::#gen_static.assume_init()).resume(); - // let stat = &mut core::mem::transmute::<_,#gen_type>(crate::#gen_static); - core::pin::Pin::new(#gen_static.as_mut_ptr()).resume(); + // TODO: Remove trace + hprintln!("interrupt dispatch").unwrap(); + // TODO: possible compiler bug + // core::pin::Pin::new(#gen_static.as_mut_ptr()).resume(); + let mut g: &mut dyn Generator<Yield = (), Return = !> = &mut *#gen_static.as_mut_ptr(); + core::pin::Pin::new_unchecked(&mut *g).resume(); }); } )); @@ -129,8 +131,12 @@ pub fn codegen( // `${task}Locals` let mut locals_pat = None; if !task.locals.is_empty() { - let (struct_, pat) = - locals::codegen(Context::HardwareTask(name), &task.locals, core, app); + let (struct_, pat) = locals::codegen( + Context::HardwareTask(name), + &task.locals, + core, + app, + ); root.push(struct_); locals_pat = Some(pat); diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs index 5f077a22..67eae0a0 100644 --- a/macros/src/codegen/module.rs +++ b/macros/src/codegen/module.rs @@ -4,7 +4,12 @@ use rtfm_syntax::{ast::App, Context}; use crate::{check::Extra, codegen::util}; -pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) -> TokenStream2 { +pub fn codegen( + ctxt: Context, + resources_tick: bool, + app: &App, + extra: &Extra, +) -> TokenStream2 { let mut items = vec![]; let mut fields = vec![]; let mut values = vec![]; @@ -184,7 +189,9 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) -> } )); - values.push(quote!(spawn: Spawn { _not_send: core::marker::PhantomData })); + values.push( + quote!(spawn: Spawn { _not_send: core::marker::PhantomData }), + ); } else { lt = Some(quote!('a)); @@ -319,6 +326,7 @@ pub fn codegen(ctxt: Context, resources_tick: bool, app: &App, extra: &Extra) -> #[doc = #doc] #cfg_core pub mod #name { + fn plepps() {} #(#items)* } ) diff --git a/macros/src/codegen/post_init.rs b/macros/src/codegen/post_init.rs index e3e3b20e..bee481db 100644 --- a/macros/src/codegen/post_init.rs +++ b/macros/src/codegen/post_init.rs @@ -161,10 +161,27 @@ pub fn codegen( let gen_static = util::gen_static_ident(&name); let priority = task.args.priority; + // #[doc(inline)] + // pub use super::foo1Resources as Resources; + // #[doc = r" Execution context"] + // pub struct Context<'a> { + // #[doc = r" Resources this task has access to"] + // pub resources: Resources<'a>, + // } + // impl<'a> Context<'a> { + // #[inline(always)] + // pub unsafe fn new( + // priority: &'a rtfm::export::Priority, + // ) -> Self { + // Context { + // resources: Resources::new(priority), + // } + // } + // } stmts.push(quote!( const PRIORITY: u8 = #priority; - unsafe { + static CTX: #name::Context = #name::Context::new(&rtfm::export::Priority::new(PRIORITY)); #gen_static.as_mut_ptr().write( #name(#name::Context::new(&rtfm::export::Priority::new(PRIORITY))) ); |