Jelajahi Sumber

better fix for #72 millis overthrow

hathach 6 tahun lalu
induk
melakukan
ce6976f400

+ 2 - 2
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);

+ 1 - 1
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);

+ 1 - 1
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);

+ 1 - 1
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);

+ 2 - 16
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)