Fix 1 millisecond backwards time leap in time measured by micros()
This race condition caused periodic flight instability when micros() was called precisely on a 1000 nanosecond boundary.
This commit is contained in:
parent
1a15e5aa08
commit
f7530df974
|
@ -99,6 +99,12 @@ uint32_t micros(void)
|
|||
do {
|
||||
ms = sysTickUptime;
|
||||
cycle_cnt = SysTick->VAL;
|
||||
|
||||
/*
|
||||
* If the SysTick timer expired during the previous instruction, we need to give it a little time for that
|
||||
* interrupt to be delivered before we can recheck sysTickUptime:
|
||||
*/
|
||||
asm volatile("\tnop\n");
|
||||
} while (ms != sysTickUptime);
|
||||
return (ms * 1000) + (usTicks * 1000 - cycle_cnt) / usTicks;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue