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

Термопара K-типа 0...600°C с преобразователем MAX6675

Термопара хромель-алюмель рассчитана на измерение температуры в диапазоне 0 ... 600 °CДлина каб..

165.83грн.

Как начать программировать Arduino и какие базовые функции используются

Как начать программировать Arduino и какие базовые функции используются

Как начать программировать Arduino и какие базовые функции используются Arduino — это прост..

Набор диодов 100 шт.

Набор диодов 100 шт.

В наборе 8 типов диодов разного количества. В сумме 100 штук.В набор входят следующие типы диодов 1N..

154.34грн.

Что такое широтно-импульсная модуляция (ШИМ), и как она используется в Arduino?

Что такое широтно-импульсная модуляция (ШИМ), и как она используется в Arduino?

Что такое широтно-импульсная модуляция (ШИМ), и как она используется в Arduino? Широт..

..

0.00грн.