From cf5dbcd90229a33fd6a2cedd3069cf66625d297f Mon Sep 17 00:00:00 2001 From: David O'Connor Date: Sat, 12 Jun 2021 16:03:48 -0400 Subject: [PATCH 1/6] Remove dependence on embedded-hal for Delay --- src/delay.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/delay.rs b/src/delay.rs index 2f5b8e00..8d3e00cf 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -29,7 +29,8 @@ impl Delay { self.syst } - fn _delay_us(&mut self, us: u32) { + /// Delay using the Cortex-M systick for a certain duration, µs. + pub fn delay_us(&mut self, us: u32) { let ticks = (us as u64) * (self.ahb_frequency as u64) / 1_000_000; let full_cycles = ticks >> 24; @@ -54,6 +55,11 @@ impl Delay { self.syst.disable_counter(); } + + /// Delay using the Cortex-M systick for a certain duration, ms. + pub fn delay_ms(&mut self, ms: u32) { + self.delay_us(ms * 1_000); + } } impl DelayMs for Delay { @@ -61,10 +67,10 @@ impl DelayMs for Delay { fn delay_ms(&mut self, mut ms: u32) { // 4294967 is the highest u32 value which you can multiply by 1000 without overflow while ms > 4294967 { - self.delay_us(4294967000u32); + Delay::delay_us(self, 4294967000u32); ms -= 4294967; } - self.delay_us(ms * 1_000); + Delay::delay_us(self, ms * 1_000); } } @@ -73,28 +79,28 @@ impl DelayMs for Delay { #[inline(always)] fn delay_ms(&mut self, ms: i32) { assert!(ms >= 0); - self.delay_ms(ms as u32); + Delay::delay_ms(self, ms as u32); } } impl DelayMs for Delay { #[inline(always)] fn delay_ms(&mut self, ms: u16) { - self.delay_ms(u32::from(ms)); + Delay::delay_ms(self, u32::from(ms)); } } impl DelayMs for Delay { #[inline(always)] fn delay_ms(&mut self, ms: u8) { - self.delay_ms(u32::from(ms)); + Delay::delay_ms(self, u32::from(ms)); } } impl DelayUs for Delay { #[inline] fn delay_us(&mut self, us: u32) { - self._delay_us(us); + Delay::delay_us(self, us); } } @@ -103,20 +109,20 @@ impl DelayUs for Delay { #[inline(always)] fn delay_us(&mut self, us: i32) { assert!(us >= 0); - self.delay_us(us as u32); + Delay::delay_us(self, us as u32); } } impl DelayUs for Delay { #[inline(always)] fn delay_us(&mut self, us: u16) { - self.delay_us(u32::from(us)) + Delay::delay_us(self, u32::from(us)) } } impl DelayUs for Delay { #[inline(always)] fn delay_us(&mut self, us: u8) { - self.delay_us(u32::from(us)) + Delay::delay_us(self, u32::from(us)) } } From 1a2b6eaaf65e09688a16e00c4ccd1ad1c9c32a70 Mon Sep 17 00:00:00 2001 From: David O'Connor Date: Sat, 12 Jun 2021 16:17:48 -0400 Subject: [PATCH 2/6] Use overflow-workaround on delay_ms --- src/delay.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/delay.rs b/src/delay.rs index 8d3e00cf..17dc654c 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -30,6 +30,7 @@ impl Delay { } /// Delay using the Cortex-M systick for a certain duration, µs. + #[inline] pub fn delay_us(&mut self, us: u32) { let ticks = (us as u64) * (self.ahb_frequency as u64) / 1_000_000; @@ -57,14 +58,8 @@ impl Delay { } /// Delay using the Cortex-M systick for a certain duration, ms. - pub fn delay_ms(&mut self, ms: u32) { - self.delay_us(ms * 1_000); - } -} - -impl DelayMs for Delay { #[inline] - fn delay_ms(&mut self, mut ms: u32) { + pub fn delay_ms(&mut self, mut ms: u32) { // 4294967 is the highest u32 value which you can multiply by 1000 without overflow while ms > 4294967 { Delay::delay_us(self, 4294967000u32); @@ -74,6 +69,13 @@ impl DelayMs for Delay { } } +impl DelayMs for Delay { + #[inline] + fn delay_ms(&mut self, ms: u32) { + Delay::delay_ms(self, ms); + } +} + // This is a workaround to allow `delay_ms(42)` construction without specifying a type. impl DelayMs for Delay { #[inline(always)] From d13ebd2015b7a0326934d75fd04df5a4cba1f0a6 Mon Sep 17 00:00:00 2001 From: David O'Connor Date: Sat, 12 Jun 2021 16:20:01 -0400 Subject: [PATCH 3/6] Use . syntax instead of :: on delay_ms --- src/delay.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/delay.rs b/src/delay.rs index 17dc654c..6f653631 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -29,7 +29,7 @@ impl Delay { self.syst } - /// Delay using the Cortex-M systick for a certain duration, µs. + /// Delay using the Cortex-M systick for a certain duration, in µs. #[inline] pub fn delay_us(&mut self, us: u32) { let ticks = (us as u64) * (self.ahb_frequency as u64) / 1_000_000; @@ -57,15 +57,15 @@ impl Delay { self.syst.disable_counter(); } - /// Delay using the Cortex-M systick for a certain duration, ms. + /// Delay using the Cortex-M systick for a certain duration, in ms. #[inline] pub fn delay_ms(&mut self, mut ms: u32) { // 4294967 is the highest u32 value which you can multiply by 1000 without overflow while ms > 4294967 { - Delay::delay_us(self, 4294967000u32); + self.delay_us(4294967000u32); ms -= 4294967; } - Delay::delay_us(self, ms * 1_000); + self.delay_us(ms * 1_000); } } From 7329f5710843ca70f1fc2f0266c11805e98db870 Mon Sep 17 00:00:00 2001 From: David O'Connor Date: Sat, 12 Jun 2021 16:23:25 -0400 Subject: [PATCH 4/6] remove inline on delay_us, and made u32 conversion syntax consistent --- src/delay.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/delay.rs b/src/delay.rs index 6f653631..3785907d 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -30,7 +30,6 @@ impl Delay { } /// Delay using the Cortex-M systick for a certain duration, in µs. - #[inline] pub fn delay_us(&mut self, us: u32) { let ticks = (us as u64) * (self.ahb_frequency as u64) / 1_000_000; @@ -88,14 +87,14 @@ impl DelayMs for Delay { impl DelayMs for Delay { #[inline(always)] fn delay_ms(&mut self, ms: u16) { - Delay::delay_ms(self, u32::from(ms)); + Delay::delay_ms(self, ms as u32); } } impl DelayMs for Delay { #[inline(always)] fn delay_ms(&mut self, ms: u8) { - Delay::delay_ms(self, u32::from(ms)); + Delay::delay_ms(self, ms as u32); } } @@ -118,13 +117,13 @@ impl DelayUs for Delay { impl DelayUs for Delay { #[inline(always)] fn delay_us(&mut self, us: u16) { - Delay::delay_us(self, u32::from(us)) + Delay::delay_us(self, us as u32) } } impl DelayUs for Delay { #[inline(always)] fn delay_us(&mut self, us: u8) { - Delay::delay_us(self, u32::from(us)) + Delay::delay_us(self, us as u32) } } From 81336573bc47ca12e115683cf2823fa397fdcc09 Mon Sep 17 00:00:00 2001 From: David O'Connor Date: Sat, 12 Jun 2021 16:40:24 -0400 Subject: [PATCH 5/6] Use from instead of as --- src/delay.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/delay.rs b/src/delay.rs index 3785907d..750ded14 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -31,7 +31,7 @@ impl Delay { /// Delay using the Cortex-M systick for a certain duration, in µs. pub fn delay_us(&mut self, us: u32) { - let ticks = (us as u64) * (self.ahb_frequency as u64) / 1_000_000; + let ticks = (u64::from(us)) * (u64::from(self.ahb_frequency)) / 1_000_000; let full_cycles = ticks >> 24; if full_cycles > 0 { @@ -87,14 +87,14 @@ impl DelayMs for Delay { impl DelayMs for Delay { #[inline(always)] fn delay_ms(&mut self, ms: u16) { - Delay::delay_ms(self, ms as u32); + Delay::delay_ms(self, u32::from(ms)); } } impl DelayMs for Delay { #[inline(always)] fn delay_ms(&mut self, ms: u8) { - Delay::delay_ms(self, ms as u32); + Delay::delay_ms(self, u32::from(ms)); } } @@ -117,13 +117,13 @@ impl DelayUs for Delay { impl DelayUs for Delay { #[inline(always)] fn delay_us(&mut self, us: u16) { - Delay::delay_us(self, us as u32) + Delay::delay_us(self, u32::from(us)) } } impl DelayUs for Delay { #[inline(always)] fn delay_us(&mut self, us: u8) { - Delay::delay_us(self, us as u32) + Delay::delay_us(self, u32::from(us)) } } From 4a393e091b92d95754fb7c44562767e03d172ba5 Mon Sep 17 00:00:00 2001 From: David O'Connor Date: Sat, 12 Jun 2021 17:00:28 -0400 Subject: [PATCH 6/6] Update src/delay.rs Co-authored-by: Vadim Kaushan --- src/delay.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/delay.rs b/src/delay.rs index 750ded14..8ed1fea0 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -30,6 +30,7 @@ impl Delay { } /// Delay using the Cortex-M systick for a certain duration, in µs. + #[allow(clippy::missing_inline_in_public_items)] pub fn delay_us(&mut self, us: u32) { let ticks = (u64::from(us)) * (u64::from(self.ahb_frequency)) / 1_000_000;