summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-05-21 11:38:46 +0700
committerhathach <[email protected]>2019-05-21 11:38:46 +0700
commit73c7db38f7517bbd5c6710874962774bdc2df65d (patch)
tree6f0e4c9b3f62810184b60d3ea9613967928f8b4e
parent6861b670fc0cf3e3c9e7c438c1f0a1410bfc6c8f (diff)
fix #72 address overflow with board_delay
-rw-r--r--hw/bsp/board.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/hw/bsp/board.h b/hw/bsp/board.h
index 9e36b990d..4970dc303 100644
--- a/hw/bsp/board.h
+++ b/hw/bsp/board.h
@@ -97,8 +97,22 @@ static inline void board_led_off(void)
static inline void board_delay(uint32_t ms)
{
- uint32_t start_ms = board_millis();
- while( board_millis() < start_ms + ms) {}
+ if ( ms == 0 ) return;
+
+ uint64_t end_ms = (uint64_t) board_millis();
+ end_ms += ms;
+
+ // about to overflows
+ if (end_ms > UINT32_MAX)
+ {
+ // first wait for overflow occurs since "ms" is small enough
+ while( board_millis() > ms ) {}
+
+ // then adjust end time
+ end_ms -= UINT32_MAX;
+ }
+
+ while( board_millis() < end_ms ) {}
}
static inline int8_t board_uart_getchar(void)