aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/software_tasks.rs
diff options
context:
space:
mode:
authorGravatar bors[bot] <26634292+bors[bot]@users.noreply.github.com> 2021-07-09 11:00:11 +0000
committerGravatar GitHub <noreply@github.com> 2021-07-09 11:00:11 +0000
commite1a4d001f8e724596cd9de3e90698ce7de473b3f (patch)
treef7aac5eae4cc2e19cc06bfd6fa8dab843dcfb276 /macros/src/codegen/software_tasks.rs
parent13dc3992e616d817e38c167c4b47db816855f18b (diff)
parentf3d9fd9b638a25b497e1ca02e7ce5de86c9fc1c9 (diff)
downloadrtic-e1a4d001f8e724596cd9de3e90698ce7de473b3f.tar.gz
rtic-e1a4d001f8e724596cd9de3e90698ce7de473b3f.tar.zst
rtic-e1a4d001f8e724596cd9de3e90698ce7de473b3f.zip
Merge #494
494: Resoures take 2 r=korken89 a=korken89 Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
Diffstat (limited to '')
-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,