aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/software_tasks.rs
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/codegen/software_tasks.rs')
-rw-r--r--macros/src/codegen/software_tasks.rs39
1 files changed, 24 insertions, 15 deletions
diff --git a/macros/src/codegen/software_tasks.rs b/macros/src/codegen/software_tasks.rs
index 0372e8ec..cfd21e40 100644
--- a/macros/src/codegen/software_tasks.rs
+++ b/macros/src/codegen/software_tasks.rs
@@ -5,7 +5,7 @@ use rtic_syntax::{ast::App, Context};
use crate::{
analyze::Analysis,
check::Extra,
- codegen::{locals, module, resources_struct, util},
+ codegen::{local_resources_struct, module, shared_resources_struct, util},
};
pub fn codegen(
@@ -45,7 +45,7 @@ pub fn codegen(
quote!(rtic::export::Queue(unsafe {
rtic::export::iQueue::u8_sc()
})),
- Box::new(|| util::link_section_uninit(true)),
+ Box::new(|| util::link_section_uninit()),
)
};
mod_app.push(quote!(
@@ -90,23 +90,32 @@ pub fn codegen(
));
// `${task}Resources`
- let mut needs_lt = false;
- if !task.args.resources.is_empty() {
- let (item, constructor) =
- resources_struct::codegen(Context::SoftwareTask(name), &mut needs_lt, app);
+ let mut shared_needs_lt = false;
+ let mut local_needs_lt = false;
+
+ // `${task}Locals`
+ if !task.args.local_resources.is_empty() {
+ let (item, constructor) = local_resources_struct::codegen(
+ Context::SoftwareTask(name),
+ &mut local_needs_lt,
+ app,
+ );
root.push(item);
mod_app.push(constructor);
}
- // `${task}Locals`
- let mut locals_pat = None;
- if !task.locals.is_empty() {
- let (struct_, pat) = locals::codegen(Context::SoftwareTask(name), &task.locals, app);
+ if !task.args.shared_resources.is_empty() {
+ let (item, constructor) = shared_resources_struct::codegen(
+ Context::SoftwareTask(name),
+ &mut shared_needs_lt,
+ app,
+ );
- locals_pat = Some(pat);
- root.push(struct_);
+ root.push(item);
+
+ mod_app.push(constructor);
}
if !&task.is_extern {
@@ -114,12 +123,11 @@ pub fn codegen(
let attrs = &task.attrs;
let cfgs = &task.cfgs;
let stmts = &task.stmts;
- let locals_pat = locals_pat.iter();
user_tasks.push(quote!(
#(#attrs)*
#(#cfgs)*
#[allow(non_snake_case)]
- fn #name(#(#locals_pat,)* #context: #name::Context #(,#inputs)*) {
+ fn #name(#context: #name::Context #(,#inputs)*) {
use rtic::Mutex as _;
use rtic::mutex_prelude::*;
@@ -130,7 +138,8 @@ pub fn codegen(
root.push(module::codegen(
Context::SoftwareTask(name),
- needs_lt,
+ shared_needs_lt,
+ local_needs_lt,
app,
analysis,
extra,