Код
unsigned long micros() {
unsigned long m;
cli();
m = timer0_overflow_count;
t = TCNT0;
if ((TIFR0 & _BV(TOV0)) && (t < 255))
m++;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}
unsigned long m;
cli();
m = timer0_overflow_count;
t = TCNT0;
if ((TIFR0 & _BV(TOV0)) && (t < 255))
m++;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}
Не пинайте только, код взят с библиотеки ардуино - функция получения времени в микросекундах.
Ну вот объясните, ну вот с чего, с чего они взяли что прерывание по переполнению (сам флаг) не будет между этими двумя строчками
Код
t = TCNT0;
if ((TIFR0 &
if ((TIFR0 &
Да и вообще, может кто подскажет как это сделать корректно, без потери точности