Измерение времени выполнения операций и функций в скетчах 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Датчик вращения енкодер KY-040

Датчик вращения енкодер KY-040

Енкодер вращения KY-040 - это поворотный датчик, который индицирует степень поворота оси и в каком н..

37.93грн.

Магнитный сенсор A3144. Датчик Холла с дискретным выходом.

Магнитный сенсор A3144. Датчик Холла с дискретным выходом.

Магнитный сенсор A3144 (датчик Холла с дискретным выходом)Магнитный сенсор A3144 — это однополюсный ..

10.10грн.

Плата STM32F103C8T6

Плата STM32F103C8T6

Минимальная плата контроллера от мирового лидера по производству контроллеров - фирмы STM32.Для зали..

211.50грн.

Модуль питания повышающий 2...24В/5...28В 2А

Модуль питания повышающий 2...24В/5...28В 2А

Модуль повышающий напряжение постоянного тока с 2 ... 24 В до 5 ... 28 ВНапряжение на выходе ре..

36.78грн.

Стерео усилитель мощности 15Втх2 на TDA7297

Стерео усилитель мощности 15Втх2 на TDA7297

Двухканальный усилитель звуковой частоты на основе микросхемы TDA7297Имеет защиту от перегрузки..

125.21грн.