aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2021-10-31 10:09:40 +0100
committerGravatar Emil Fresk <emil.fresk@gmail.com> 2021-11-09 10:20:43 +0100
commit0dcb0c4e497b23bf68b7ac0d3d918ab3d3c209be (patch)
treefa4dd3f228dd643d0a989aaae512bf33bc90c291 /macros/src/codegen
parentae034aec14bf44e83e2720c81b98031d38992133 (diff)
downloadrtic-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.rs30
-rw-r--r--macros/src/codegen/software_tasks.rs2
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,)*]);
));
}