From bd7b3bd455fc5946a3944bd931acfdf255929cb6 Mon Sep 17 00:00:00 2001 From: Caleb Jamison Date: Thu, 9 Feb 2023 20:57:27 -0500 Subject: [PATCH] Clamp ticks to 1 and round to nearest. --- embassy-time/src/duration.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/embassy-time/src/duration.rs b/embassy-time/src/duration.rs index 846a9c3d..9d0bab2d 100644 --- a/embassy-time/src/duration.rs +++ b/embassy-time/src/duration.rs @@ -82,8 +82,17 @@ impl Duration { } /// Creates a duration corresponding to the specified Hz. + /// NOTE: Giving this function a hz >= the TICK_HZ of your platform will clamp the Duration to 1 + /// tick. Doing so will not deadlock, but will certainly not produce the desired output. pub const fn from_hz(hz: u64) -> Duration { - Duration { ticks: TICK_HZ / hz } + let ticks = { + if hz >= TICK_HZ { + 1 + } else { + (TICK_HZ + hz / 2) / hz + } + }; + Duration { ticks } } /// Adds one Duration to another, returning a new Duration or None in the event of an overflow.