Описание функции micros
Функция micros()
возвращает количество микросекунд с момента начала выполнения на плате ардуино текущей программы. Значение переполняется и сбрасывается на ноль примерно через 70 минут. Более того, на платах ардуино с частотой 16 МГц функция имеет разрешение 4 секунды (возвращаемое значение всегда кратно 4), на платах с частотой 8 МГц разрешение функции – 8 секунд.
Синтаксис
unsigned long micros()
Параметры
нет
Что возвращает
Количество микросекунд с момента начала выполнения программы.
Пример функции micros
void setup() { Serial.begin(9600); Serial.println(micros()); // Выводим количество микросекунд, прошедших после запуска МК delayMicroseconds(1000); // Приостанавливаем работу МК на 1000 микросекунд Serial.println(micros()); // Выводим количество микросекунд, прошедших после запуска МК }
Этот простой пример описан в функции setup()
.
- Мы сперва инициализируем последовательный порт
Serial.begin(9600);
. - Далее выводим значение в порт, которое нам вернула функция
micros()
– это значение равно 8 микросекундам. - Делаем паузу длительностью 1000 микросекунд функцией delayMicroseconds.
- Повторяем шаг 2: снова выводим количество микросекунд. На этот раз оно равняется 1084 микросекундам.
Код функции micros
(hardware/arduino/avr/cores/arduino/wiring.c 1.8.10)
unsigned long micros() { unsigned long m; uint8_t oldSREG = SREG, t; cli(); m = FastLED_timer0_overflow_count; // ._long; #if defined(TCNT0) t = TCNT0; #elif defined(TCNT0L) t = TCNT0L; #else #error TIMER 0 not defined #endif #ifdef TIFR0 if ((TIFR0 & _BV(TOV0)) && (t < 255)) m++; #else if ((TIFR & _BV(TOV0)) && (t < 255)) m++; #endif SREG = oldSREG; return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond()); }