From 3f85cb5caf1ae930e6551e139978ceec859a2348 Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Mon, 5 Jul 2021 21:40:01 +0200 Subject: Started work --- macros/src/codegen/hardware_tasks.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'macros/src/codegen/hardware_tasks.rs') diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs index 003660c..adeea78 100644 --- a/macros/src/codegen/hardware_tasks.rs +++ b/macros/src/codegen/hardware_tasks.rs @@ -29,7 +29,7 @@ pub fn codegen( let mut user_tasks = vec![]; for (name, task) in &app.hardware_tasks { - let locals_new = if task.locals.is_empty() { + let locals_new = if task.args.local_resources.is_empty() { quote!() } else { quote!(#name::Locals::new(),) @@ -60,7 +60,7 @@ pub fn codegen( let mut needs_lt = false; // `${task}Resources` - if !task.args.resources.is_empty() { + if !task.args.shared_resources.is_empty() { let (item, constructor) = resources_struct::codegen(Context::HardwareTask(name), &mut needs_lt, app); -- cgit v1.2.3 From ef5307d83a1d62df0569d78db75d4006147c927d Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Tue, 6 Jul 2021 22:47:48 +0200 Subject: Minimal app now compiles --- macros/src/codegen/hardware_tasks.rs | 48 ++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'macros/src/codegen/hardware_tasks.rs') diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs index adeea78..a69f9c9 100644 --- a/macros/src/codegen/hardware_tasks.rs +++ b/macros/src/codegen/hardware_tasks.rs @@ -5,7 +5,7 @@ use rtic_syntax::{ast::App, Context}; use crate::{ analyze::Analysis, check::Extra, - codegen::{locals, module, resources_struct}, + codegen::{local_resources_struct, module, shared_resources_struct}, }; /// Generate support code for hardware tasks (`#[exception]`s and `#[interrupt]`s) @@ -29,11 +29,12 @@ pub fn codegen( let mut user_tasks = vec![]; for (name, task) in &app.hardware_tasks { - let locals_new = if task.args.local_resources.is_empty() { - quote!() - } else { - quote!(#name::Locals::new(),) - }; + // TODO: Fix locals + // let locals_new = if task.args.local_resources.is_empty() { + // quote!() + // } else { + // quote!(#name::Locals::new(),) + // }; let symbol = task.args.binds.clone(); let priority = task.args.priority; @@ -50,7 +51,6 @@ pub fn codegen( rtic::export::run(PRIORITY, || { #name( - #locals_new #name::Context::new(&rtic::export::Priority::new(PRIORITY)) ) }); @@ -59,10 +59,21 @@ pub fn codegen( let mut needs_lt = false; + // TODO: Fix locals + // `${task}Locals` + if !task.args.local_resources.is_empty() { + let (item, constructor) = + local_resources_struct::codegen(Context::HardwareTask(name), &mut needs_lt, app); + + root.push(item); + + mod_app.push(constructor); + } + // `${task}Resources` if !task.args.shared_resources.is_empty() { let (item, constructor) = - resources_struct::codegen(Context::HardwareTask(name), &mut needs_lt, app); + shared_resources_struct::codegen(Context::HardwareTask(name), &mut needs_lt, app); root.push(item); @@ -77,24 +88,25 @@ pub fn codegen( extra, )); - // `${task}Locals` - let mut locals_pat = None; - if !task.locals.is_empty() { - let (struct_, pat) = locals::codegen(Context::HardwareTask(name), &task.locals, app); + // TODO: Fix locals + // // `${task}Locals` + // let mut locals_pat = None; + // if !task.locals.is_empty() { + // let (struct_, pat) = + // local_resources_struct::codegen(Context::HardwareTask(name), &task.locals, app); - root.push(struct_); - locals_pat = Some(pat); - } + // root.push(struct_); + // locals_pat = Some(pat); + // } - if !&task.is_extern { + if !task.is_extern { let attrs = &task.attrs; let context = &task.context; let stmts = &task.stmts; - let locals_pat = locals_pat.iter(); user_tasks.push(quote!( #(#attrs)* #[allow(non_snake_case)] - fn #name(#(#locals_pat,)* #context: #name::Context) { + fn #name(#context: #name::Context) { use rtic::Mutex as _; use rtic::mutex_prelude::*; -- cgit v1.2.3 From d7393c5b27fc95f3569d12137ee0c4d03ff7e2ba Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Wed, 7 Jul 2021 21:03:56 +0200 Subject: Full local resource syntax working --- macros/src/codegen/hardware_tasks.rs | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) (limited to 'macros/src/codegen/hardware_tasks.rs') diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs index a69f9c9..c7f3e7d 100644 --- a/macros/src/codegen/hardware_tasks.rs +++ b/macros/src/codegen/hardware_tasks.rs @@ -57,13 +57,17 @@ pub fn codegen( } )); - let mut needs_lt = false; + let mut shared_needs_lt = false; + let mut local_needs_lt = false; // TODO: Fix locals // `${task}Locals` if !task.args.local_resources.is_empty() { - let (item, constructor) = - local_resources_struct::codegen(Context::HardwareTask(name), &mut needs_lt, app); + let (item, constructor) = local_resources_struct::codegen( + Context::HardwareTask(name), + &mut local_needs_lt, + app, + ); root.push(item); @@ -72,8 +76,11 @@ pub fn codegen( // `${task}Resources` if !task.args.shared_resources.is_empty() { - let (item, constructor) = - shared_resources_struct::codegen(Context::HardwareTask(name), &mut needs_lt, app); + let (item, constructor) = shared_resources_struct::codegen( + Context::HardwareTask(name), + &mut shared_needs_lt, + app, + ); root.push(item); @@ -82,23 +89,13 @@ pub fn codegen( root.push(module::codegen( Context::HardwareTask(name), - needs_lt, + shared_needs_lt, + local_needs_lt, app, analysis, extra, )); - // TODO: Fix locals - // // `${task}Locals` - // let mut locals_pat = None; - // if !task.locals.is_empty() { - // let (struct_, pat) = - // local_resources_struct::codegen(Context::HardwareTask(name), &task.locals, app); - - // root.push(struct_); - // locals_pat = Some(pat); - // } - if !task.is_extern { let attrs = &task.attrs; let context = &task.context; -- cgit v1.2.3 From 98d2af9d73da56910c8bb6cb662fbc4d609a704a Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Wed, 7 Jul 2021 22:50:59 +0200 Subject: Fixing tests --- macros/src/codegen/hardware_tasks.rs | 8 -------- 1 file changed, 8 deletions(-) (limited to 'macros/src/codegen/hardware_tasks.rs') diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs index c7f3e7d..e6192e2 100644 --- a/macros/src/codegen/hardware_tasks.rs +++ b/macros/src/codegen/hardware_tasks.rs @@ -29,13 +29,6 @@ pub fn codegen( let mut user_tasks = vec![]; for (name, task) in &app.hardware_tasks { - // TODO: Fix locals - // let locals_new = if task.args.local_resources.is_empty() { - // quote!() - // } else { - // quote!(#name::Locals::new(),) - // }; - let symbol = task.args.binds.clone(); let priority = task.args.priority; let cfgs = &task.cfgs; @@ -60,7 +53,6 @@ pub fn codegen( let mut shared_needs_lt = false; let mut local_needs_lt = false; - // TODO: Fix locals // `${task}Locals` if !task.args.local_resources.is_empty() { let (item, constructor) = local_resources_struct::codegen( -- cgit v1.2.3