diff options
author | 2021-10-31 10:09:40 +0100 | |
---|---|---|
committer | 2021-11-09 10:20:43 +0100 | |
commit | 0dcb0c4e497b23bf68b7ac0d3d918ab3d3c209be (patch) | |
tree | fa4dd3f228dd643d0a989aaae512bf33bc90c291 /macros/src/codegen | |
parent | ae034aec14bf44e83e2720c81b98031d38992133 (diff) | |
download | rtic-0dcb0c4e497b23bf68b7ac0d3d918ab3d3c209be.tar.gz rtic-0dcb0c4e497b23bf68b7ac0d3d918ab3d3c209be.tar.zst rtic-0dcb0c4e497b23bf68b7ac0d3d918ab3d3c209be.zip |
New monotonic trait working
Diffstat (limited to 'macros/src/codegen')
-rw-r--r-- | macros/src/codegen/module.rs | 30 | ||||
-rw-r--r-- | macros/src/codegen/software_tasks.rs | 2 |
2 files changed, 13 insertions, 19 deletions
diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs index c59a814c..996af641 100644 --- a/macros/src/codegen/module.rs +++ b/macros/src/codegen/module.rs @@ -266,7 +266,6 @@ pub fn codegen( let tq = util::tq_ident(&monotonic.ident.to_string()); let t = util::schedule_t_ident(); let m = &monotonic.ident; - let mono_type = &monotonic.ident; let m_ident = util::monotonic_ident(&monotonic_name); let m_isr = &monotonic.args.binds; let enum_ = util::interrupt_ident(); @@ -349,15 +348,17 @@ pub fn codegen( } #[inline] - pub fn reschedule_after<D>(self, duration: D) -> Result<Self, ()> - where D: rtic::time::duration::Duration + rtic::time::fixed_point::FixedPoint, - D::T: Into<<#mono_type as rtic::time::Clock>::T>, - { + pub fn reschedule_after( + self, + duration: <#m as rtic::Monotonic>::Duration + ) -> Result<Self, ()> { self.reschedule_at(monotonics::#m::now() + duration) } - pub fn reschedule_at(self, instant: rtic::time::Instant<#mono_type>) -> Result<Self, ()> - { + pub fn reschedule_at( + self, + instant: <#m as rtic::Monotonic>::Instant + ) -> Result<Self, ()> { rtic::export::interrupt::free(|_| unsafe { let marker = #tq_marker.get().read(); #tq_marker.get_mut().write(marker.wrapping_add(1)); @@ -375,19 +376,12 @@ pub fn codegen( /// This will use the time `Instant::new(0)` as baseline if called in `#[init]`, /// so if you use a non-resetable timer use `spawn_at` when in `#[init]` #[allow(non_snake_case)] - pub fn #internal_spawn_after_ident<D>( - duration: D + pub fn #internal_spawn_after_ident( + duration: <#m as rtic::Monotonic>::Duration #(,#args)* ) -> Result<#name::#m::SpawnHandle, #ty> - where D: rtic::time::duration::Duration + rtic::time::fixed_point::FixedPoint, - D::T: Into<<#mono_type as rtic::time::Clock>::T>, { - - let instant = if rtic::export::interrupt::free(|_| unsafe { (&*#m_ident.get()).is_none() }) { - rtic::time::Instant::new(0) - } else { - monotonics::#m::now() - }; + let instant = monotonics::#m::now(); #internal_spawn_at_ident(instant + duration #(,#untupled)*) } @@ -396,7 +390,7 @@ pub fn codegen( /// Spawns the task at a fixed time instant #[allow(non_snake_case)] pub fn #internal_spawn_at_ident( - instant: rtic::time::Instant<#mono_type> + instant: <#m as rtic::Monotonic>::Instant #(,#args)* ) -> Result<#name::#m::SpawnHandle, #ty> { unsafe { diff --git a/macros/src/codegen/software_tasks.rs b/macros/src/codegen/software_tasks.rs index 1669a3fb..2008b6c9 100644 --- a/macros/src/codegen/software_tasks.rs +++ b/macros/src/codegen/software_tasks.rs @@ -73,7 +73,7 @@ pub fn codegen( #[allow(non_upper_case_globals)] #[doc(hidden)] static #instants: - rtic::RacyCell<[core::mem::MaybeUninit<rtic::time::Instant<#mono_type>>; #cap_lit]> = + rtic::RacyCell<[core::mem::MaybeUninit<<#mono_type as rtic::Monotonic>::Instant>; #cap_lit]> = rtic::RacyCell::new([#(#elems,)*]); )); } |