aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/codegen')
-rw-r--r--macros/src/codegen/hardware_tasks.rs4
-rw-r--r--macros/src/codegen/module.rs21
2 files changed, 16 insertions, 9 deletions
diff --git a/macros/src/codegen/hardware_tasks.rs b/macros/src/codegen/hardware_tasks.rs
index 4a1d7492..540b95e5 100644
--- a/macros/src/codegen/hardware_tasks.rs
+++ b/macros/src/codegen/hardware_tasks.rs
@@ -37,12 +37,16 @@ pub fn codegen(
let symbol = task.args.binds.clone();
let priority = task.args.priority;
+ let cfgs = &task.cfgs;
+ let attrs = &task.attrs;
let app_name = &app.name;
let app_path = quote! {crate::#app_name};
mod_app.push(quote!(
#[allow(non_snake_case)]
#[no_mangle]
+ #(#attrs)*
+ #(#cfgs)*
unsafe fn #symbol() {
const PRIORITY: u8 = #priority;
diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs
index e15aab1c..ac69a803 100644
--- a/macros/src/codegen/module.rs
+++ b/macros/src/codegen/module.rs
@@ -21,7 +21,7 @@ pub fn codegen(
let app_name = &app.name;
let app_path = quote! {crate::#app_name};
- let all_task_names: Vec<_> = app
+ let all_task_imports: Vec<_> = app
.software_tasks
.iter()
.map(|(name, st)| {
@@ -46,6 +46,13 @@ pub fn codegen(
quote!()
}
}))
+ .chain(app.user_types.iter().map(|ty| {
+ let t = &ty.ident;
+ quote! {
+ #[allow(unused_imports)]
+ use super::#t;
+ }
+ }))
.collect();
let mut lt = None;
@@ -230,7 +237,7 @@ pub fn codegen(
// Spawn caller
items.push(quote!(
- #(#all_task_names)*
+ #(#all_task_imports)*
#(#cfgs)*
/// Spawns the task directly
@@ -268,7 +275,7 @@ pub fn codegen(
let tq = util::mark_internal_ident(&tq);
let t = util::schedule_t_ident();
let m = &monotonic.ident;
- let mono_type = &monotonic.ty;
+ let mono_type = &monotonic.ident;
let m_ident = util::monotonic_ident(&monotonic_name);
let m_ident = util::mark_internal_ident(&m_ident);
let m_isr = &monotonic.args.binds;
@@ -300,10 +307,6 @@ pub fn codegen(
items.push(quote!(
/// Holds methods related to this monotonic
pub mod #m {
- // #(
- // #[allow(unused_imports)]
- // use #app_path::#all_task_names as #all_task_names;
- // )*
use super::*;
#[allow(unused_imports)]
use #app_path::#tq_marker;
@@ -341,7 +344,7 @@ pub fn codegen(
where D: rtic::time::duration::Duration + rtic::time::fixed_point::FixedPoint,
D::T: Into<<#app_path::#mono_type as rtic::time::Clock>::T>,
{
- self.reschedule_at(#app_path::#m::now() + duration)
+ self.reschedule_at(#app_path::monotonics::#m::now() + duration)
}
pub fn reschedule_at(self, instant: rtic::time::Instant<#app_path::#mono_type>) -> Result<Self, ()>
@@ -373,7 +376,7 @@ pub fn codegen(
let instant = if rtic::export::interrupt::free(|_| unsafe { #app_path::#m_ident.is_none() }) {
rtic::time::Instant::new(0)
} else {
- #app_path::#m::now()
+ #app_path::monotonics::#m::now()
};
spawn_at(instant + duration #(,#untupled)*)