diff options
author | 2020-05-19 19:03:19 +0000 | |
---|---|---|
committer | 2020-09-25 14:29:34 +0000 | |
commit | 46bf583cc21bd8fa34e3163149b4327fcc08057e (patch) | |
tree | fc95b5becb044b01fc59aaf27edf5f49ce063b49 /macros/src/codegen | |
parent | 5cfd9b92384a6e2d352e35de9da1b7a2b53cc2ea (diff) | |
download | rtic-46bf583cc21bd8fa34e3163149b4327fcc08057e.tar.gz rtic-46bf583cc21bd8fa34e3163149b4327fcc08057e.tar.zst rtic-46bf583cc21bd8fa34e3163149b4327fcc08057e.zip |
Handle user hardware and software tasks and some resources
Diffstat (limited to 'macros/src/codegen')
-rw-r--r-- | macros/src/codegen/hardware_tasks.rs | 19 | ||||
-rw-r--r-- | macros/src/codegen/resources.rs | 12 | ||||
-rw-r--r-- | macros/src/codegen/software_tasks.rs | 18 |
3 files changed, 46 insertions, 3 deletions
diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs index 7f14b5e1..4f60876a 100644 --- a/macros/src/codegen/hardware_tasks.rs +++ b/macros/src/codegen/hardware_tasks.rs @@ -23,10 +23,13 @@ pub fn codegen( Vec<TokenStream2>, // user_hardware_tasks -- the `#[task]` functions written by the user Vec<TokenStream2>, + // user_hardware_tasks_imports -- the imports for `#[task]` functions written by the user + Vec<TokenStream2>, ) { let mut const_app = vec![]; let mut root = vec![]; let mut user_tasks = vec![]; + let mut hardware_tasks_imports = vec![]; for (name, task) in &app.hardware_tasks { let (let_instant, instant) = if app.uses_schedule() { @@ -78,6 +81,13 @@ pub fn codegen( analysis, ); + // Add resources to imports + let name_res = format_ident!("{}Resources", name); + hardware_tasks_imports.push(quote!( + #[allow(non_snake_case)] + use super::#name_res; + )); + root.push(item); const_app.push(constructor); @@ -112,7 +122,14 @@ pub fn codegen( #(#stmts)* } )); + + hardware_tasks_imports.push(quote!( + #(#attrs)* + #[allow(non_snake_case)] + use super::#name; + )); + } - (const_app, root, user_tasks) + (const_app, root, user_tasks, hardware_tasks_imports) } diff --git a/macros/src/codegen/resources.rs b/macros/src/codegen/resources.rs index 4196ee7a..80e63c79 100644 --- a/macros/src/codegen/resources.rs +++ b/macros/src/codegen/resources.rs @@ -14,9 +14,12 @@ pub fn codegen( Vec<TokenStream2>, // mod_resources -- the `resources` module TokenStream2, + // mod_resources_imports -- the `resources` module imports + Vec<TokenStream2>, ) { let mut const_app = vec![]; let mut mod_resources = vec![]; + let mut mod_resources_imports = vec![]; for (name, res, expr, _) in app.resources(analysis) { let cfgs = &res.cfgs; @@ -82,6 +85,13 @@ pub fn codegen( ) }; + mod_resources_imports.push(quote!( + #[allow(non_camel_case_types)] + #(#cfgs)* + #cfg_core + use super::#name; + )); + const_app.push(util::impl_mutex( extra, cfgs, @@ -104,5 +114,5 @@ pub fn codegen( }) }; - (const_app, mod_resources) + (const_app, mod_resources, mod_resources_imports) } diff --git a/macros/src/codegen/software_tasks.rs b/macros/src/codegen/software_tasks.rs index b56db419..07edd1db 100644 --- a/macros/src/codegen/software_tasks.rs +++ b/macros/src/codegen/software_tasks.rs @@ -22,10 +22,13 @@ pub fn codegen( Vec<TokenStream2>, // user_software_tasks -- the `#[task]` functions written by the user Vec<TokenStream2>, + // user_software_tasks_imports -- the imports for `#[task]` functions written by the user + Vec<TokenStream2>, ) { let mut const_app = vec![]; let mut root = vec![]; let mut user_tasks = vec![]; + let mut software_tasks_imports = vec![]; for (name, task) in &app.software_tasks { let inputs = &task.inputs; @@ -112,6 +115,13 @@ pub fn codegen( analysis, ); + // Add resources to imports + let name_res = format_ident!("{}Resources", name); + software_tasks_imports.push(quote!( + #[allow(non_snake_case)] + use super::#name_res; + )); + root.push(item); const_app.push(constructor); @@ -141,6 +151,12 @@ pub fn codegen( #(#stmts)* } )); + software_tasks_imports.push(quote!( + #(#attrs)* + #(#cfgs)* + #[allow(non_snake_case)] + use super::#name; + )); root.push(module::codegen( Context::SoftwareTask(name), @@ -150,5 +166,5 @@ pub fn codegen( )); } - (const_app, root, user_tasks) + (const_app, root, user_tasks, software_tasks_imports) } |