fix #72 address overflow with board_delay

This commit is contained in:
hathach 2019-05-21 11:38:46 +07:00
parent 6861b670fc
commit 73c7db38f7
1 changed files with 16 additions and 2 deletions

View File

@ -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)