fix #72 address overflow with board_delay
This commit is contained in:
		@@ -97,8 +97,22 @@ static inline void board_led_off(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static inline void board_delay(uint32_t ms)
 | 
					static inline void board_delay(uint32_t ms)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t start_ms = board_millis();
 | 
					  if ( ms == 0 ) return;
 | 
				
			||||||
  while( board_millis() < start_ms + ms) {}
 | 
					
 | 
				
			||||||
 | 
					  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)
 | 
					static inline int8_t board_uart_getchar(void)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user