inline __attribute__((always_inline))
void test(void) {
}
// =========================================
volatile uint16_t cnt_ovf = 0;
void setup() {
Serial.begin(9600);
TCCR1A = TCCR1B = TCNT1 = cnt_ovf = 0; // Сброс таймера
TIFR1 |= (1 << TOV1);
TIMSK1 = (1 << TOIE0); // Прерывание переполнения
TCCR1B = (1 << CS10); // Старт таймера
test(); // тест
TCCR1B = 0; // остановить таймер
uint32_t count = TCNT1 - 2; // минус два такта на действия
count += ((uint32_t)cnt_ovf * 0xFFFF); // с учетом переполнений
Serial.print("ticks: ");
Serial.println(count);
Serial.print("time (us): ");
Serial.println(count * (float)(1000000.0f / F_CPU), 4);
Serial.println();
}
ISR(TIMER1_OVF_vect) {
cnt_ovf++;
}
void loop() {
}