diff options
| author | hathach <[email protected]> | 2019-05-21 11:38:46 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2019-05-21 11:38:46 +0700 |
| commit | 73c7db38f7517bbd5c6710874962774bdc2df65d (patch) | |
| tree | 6f0e4c9b3f62810184b60d3ea9613967928f8b4e | |
| parent | 6861b670fc0cf3e3c9e7c438c1f0a1410bfc6c8f (diff) | |
fix #72 address overflow with board_delay
| -rw-r--r-- | hw/bsp/board.h | 18 |
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) |
