diff --git a/examples/device/cdc_msc_hid/src/main.c b/examples/device/cdc_msc_hid/src/main.c index ce81767c..7c0fd39d 100644 --- a/examples/device/cdc_msc_hid/src/main.c +++ b/examples/device/cdc_msc_hid/src/main.c @@ -177,7 +177,7 @@ void hid_task(void) const uint32_t interval_ms = 10; static uint32_t start_ms = 0; - if ( board_millis() < start_ms + interval_ms) return; // not enough time + if ( board_millis() - start_ms < interval_ms) return; // not enough time start_ms += interval_ms; uint32_t const btn = board_button_read(); @@ -264,7 +264,7 @@ void led_blinking_task(void) static bool led_state = false; // Blink every 1000 ms - if ( board_millis() < start_ms + blink_interval_ms) return; // not enough time + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time start_ms += blink_interval_ms; board_led_write(led_state); diff --git a/examples/device/hid_generic_inout/src/main.c b/examples/device/hid_generic_inout/src/main.c index d6459867..b08ca5ae 100644 --- a/examples/device/hid_generic_inout/src/main.c +++ b/examples/device/hid_generic_inout/src/main.c @@ -146,7 +146,7 @@ void led_blinking_task(void) static bool led_state = false; // Blink every 1000 ms - if ( board_millis() < start_ms + blink_interval_ms) return; // not enough time + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time start_ms += blink_interval_ms; board_led_write(led_state); diff --git a/examples/device/msc_dual_lun/src/main.c b/examples/device/msc_dual_lun/src/main.c index 54cd3d5b..60500df9 100644 --- a/examples/device/msc_dual_lun/src/main.c +++ b/examples/device/msc_dual_lun/src/main.c @@ -107,7 +107,7 @@ void led_blinking_task(void) static bool led_state = false; // Blink every 1000 ms - if ( board_millis() < start_ms + blink_interval_ms) return; // not enough time + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time start_ms += blink_interval_ms; board_led_write(led_state); diff --git a/examples/host/cdc_msc_hid/src/main.c b/examples/host/cdc_msc_hid/src/main.c index a5e95159..61f10112 100644 --- a/examples/host/cdc_msc_hid/src/main.c +++ b/examples/host/cdc_msc_hid/src/main.c @@ -170,7 +170,7 @@ void led_blinking_task(void) static bool led_state = false; // Blink every 1000 ms - if ( board_millis() < start_ms + interval_ms) return; // not enough time + if ( board_millis() - start_ms < interval_ms) return; // not enough time start_ms += interval_ms; board_led_write(led_state); diff --git a/hw/bsp/board.h b/hw/bsp/board.h index 4970dc30..6467a5e4 100644 --- a/hw/bsp/board.h +++ b/hw/bsp/board.h @@ -97,22 +97,8 @@ static inline void board_led_off(void) static inline void board_delay(uint32_t 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 ) {} + uint32_t start_ms = board_millis(); + while( board_millis() - start_ms < ms) {} } static inline int8_t board_uart_getchar(void)