Вимірювання часу виконання операцій та функцій у скетчах Arduino

Вступ

Під час розробки проєктів на Arduino важливо знати, скільки часу займає виконання певних операцій або функцій. Це допомагає оптимізувати код, усунути затримки та підвищити швидкодію програми. Для цього в Arduino можна використовувати функції millis() та micros(), які повертають час із моменту запуску плати у мілісекундах або мікросекундах відповідно.

Основні функції для вимірювання часу

  • millis() — повертає кількість мілісекунд, що минули з моменту запуску програми.
  • micros() — повертає кількість мікросекунд, що минули з моменту запуску програми.

Використання micros() корисне, коли потрібно виміряти дуже короткі інтервали, наприклад, у високошвидкісних алгоритмах.

Приклад 1 — Вимірювання часу виконання циклу


unsigned long startTime;
unsigned long endTime;

void setup() {
  Serial.begin(9600);
}

void loop() {
  startTime = millis(); // Час початку

  for (int i = 0; i < 1000; i++) {
    int x = i * i;
  }

  endTime = millis(); // Час завершення

  Serial.print("Час виконання циклу: ");
  Serial.print(endTime - startTime);
  Serial.println(" мс");

  delay(1000);
}
  

Приклад 2 — Вимірювання часу виконання функції


unsigned long startMicros;
unsigned long endMicros;

int heavyCalculation(int n) {
  int sum = 0;
  for (int i = 0; i < n; i++) {
    sum += i;
  }
  return sum;
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  startMicros = micros(); // Початок у мікросекундах
  int result = heavyCalculation(5000);
  endMicros = micros(); // Кінець

  Serial.print("Результат: ");
  Serial.print(result);
  Serial.print(", час виконання: ");
  Serial.print(endMicros - startMicros);
  Serial.println(" мкс");

  delay(1000);
}
  

Приклад 3 — Порівняння часу роботи двох алгоритмів


unsigned long t1, t2;

void setup() {
  Serial.begin(9600);
}

void loop() {
  // Алгоритм 1
  t1 = micros();
  for (int i = 0; i < 1000; i++) {
    int x = i * 2;
  }
  t2 = micros();
  Serial.print("Алгоритм 1: ");
  Serial.print(t2 - t1);
  Serial.println(" мкс");

  // Алгоритм 2
  t1 = micros();
  for (int i = 0; i < 1000; i++) {
    int x = i << 1; // Швидше завдяки побітовому зсуву
  }
  t2 = micros();
  Serial.print("Алгоритм 2: ");
  Serial.print(t2 - t1);
  Serial.println(" мкс");

  delay(2000);
}
  

Приклад 4 — Вимірювання часу реакції на подію


int buttonPin = 2;
unsigned long pressTime;

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(buttonPin) == LOW) {
    pressTime = millis();
    while (digitalRead(buttonPin) == LOW); // Чекаємо відпускання
    Serial.print("Час реакції: ");
    Serial.print(millis() - pressTime);
    Serial.println(" мс");
  }
}
  

Висновок

Вимірювання часу виконання коду — важливий інструмент для налагодження та оптимізації проєктів Arduino. Використовуючи millis() та micros(), можна знаходити «вузькі місця» у програмі та покращувати її швидкодію.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Подвійна шестерня для зубчатого ременю на 20 зубів під вісь 5 мм

Подвійна шестерня для зубчатого ременю на 20 зубів під вісь 5 мм

Подвійна шестерня для передачі обертального моменту з одного валу на інший.Застосовується для розділ..

97.08грн.

ESP32 WiFi модуль PLC 10DI 2AI 5REL

ESP32 WiFi модуль PLC 10DI 2AI 5REL

Популярний зручний для монтажу модуль WiFi ESP32 з програматором на борту.Програмувати та діагностув..

873.07грн.

Датчик звуку з аналоговим та дискретним виходами

Датчик звуку з аналоговим та дискретним виходами

Аналоговий вихід підлючається до аналогового входу контролера та при цьому можна фіксувати рівень зв..

69.98грн.

Мотор безщіточний A2212 1000KV

Мотор безщіточний A2212 1000KV

Мотор трьохфазний безколекторний для мультикоптерів 1000KVKV: 1000 обертів на вольтМаксимальна ..

360.40грн.

АЦП ADS1115 огляд мікросхеми

АЦП ADS1115 огляд мікросхеми

Привіт, друзі! У нас на огляді дуже корисна мікросхема – ADS1115. Це 16-бітний аналогово-цифровий пе..