Skip to content

Commit f7f3c11

Browse files
authored
Merge pull request #542 from jamesmunns/james/clarify-delay-consts
Use named constants to clarify delay-stepdown behavior
2 parents a8c72e9 + 5656d67 commit f7f3c11

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

embedded-hal/src/delay.rs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
//! Delays.
22
3+
/// Nanoseconds per microsecond
4+
const NANOS_PER_MICRO: u32 = 1_000;
5+
/// Nanoseconds per millisecond
6+
const NANOS_PER_MILLI: u32 = 1_000_000;
7+
38
/// Delay with up to nanosecond precision.
49
pub trait DelayNs {
510
/// Pauses execution for at minimum `ns` nanoseconds. Pause can be longer
@@ -9,22 +14,30 @@ pub trait DelayNs {
914
/// Pauses execution for at minimum `us` microseconds. Pause can be longer
1015
/// if the implementation requires it due to precision/timing issues.
1116
fn delay_us(&mut self, mut us: u32) {
12-
while us > 4_294_967 {
13-
us -= 4_294_967;
14-
self.delay_ns(4_294_967_000);
17+
const MAX_MICROS: u32 = u32::MAX / NANOS_PER_MICRO;
18+
19+
// Avoid potential overflow if micro -> nano conversion is too large
20+
while us > MAX_MICROS {
21+
us -= MAX_MICROS;
22+
self.delay_ns(MAX_MICROS * NANOS_PER_MICRO);
1523
}
16-
self.delay_ns(us * 1_000);
24+
25+
self.delay_ns(us * NANOS_PER_MICRO);
1726
}
1827

1928
/// Pauses execution for at minimum `ms` milliseconds. Pause can be longer
2029
/// if the implementation requires it due to precision/timing issues.
2130
#[inline]
2231
fn delay_ms(&mut self, mut ms: u32) {
23-
while ms > 4294 {
24-
ms -= 4294;
25-
self.delay_ns(4_294_000_000);
32+
const MAX_MILLIS: u32 = u32::MAX / NANOS_PER_MILLI;
33+
34+
// Avoid potential overflow if milli -> nano conversion is too large
35+
while ms > MAX_MILLIS {
36+
ms -= MAX_MILLIS;
37+
self.delay_ns(MAX_MILLIS * NANOS_PER_MILLI);
2638
}
27-
self.delay_ns(ms * 1_000_000);
39+
40+
self.delay_ns(ms * NANOS_PER_MILLI);
2841
}
2942
}
3043

0 commit comments

Comments
 (0)