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

Выбор шагового двигателя

Вам уже приходилось делать выбор между разными шаговыми двигателями для реализации своих амбициозных..

Блок питания 24В 1А 5,5х2,5мм

Блок питания 24В 1А 5,5х2,5мм

Блок питания 24В 1АПодходит для ультразвукового парогенератора 24ВРазъем 5,5 х 2,5мм..

205.07грн.

Одна кнопка — три команды на Arduino UNO: клик, двойной клик и длинное нажатие

Одна кнопка — три команды на Arduino UNO: клик, двойной клик и длинное нажатие

Одна кнопка — три команды: клик, длинное нажатие и двойной клик на Arduino UNO В большинств..

Светодиодная матрица 8х8 с управляющим контроллером MAX7219

Светодиодная матрица 8х8 с управляющим контроллером MAX7219

Готовый блок светодиодной матрицы 8х8 с поддержкой каскадного включения нескольких идентичных модуле..

87.37грн.

Стойка латунная М3 высотой 15мм шестигранник мама-папа

Стойка латунная М3 высотой 15мм шестигранник мама-папа

Латунная стойка мама-папа с резьбой М3 и шестигранным внешним сечениемПрименяется при конструировани..

8.34грн.