Количество циклов в зависимости от количества и типа операторов

Я провел небольшой эксперимент, чтобы подсчитать количество циклов в секунду в двух разных конфигурациях:

1-Переменная a инициализируется нулем и увеличивается на единицу в каждом цикле цикла. -Значение a записывается каждый цикл -при millis() = 1000 приращение заканчивается, и значение millis() записывается для проверки точности синхронизации.

Код:

long a = 0;
int v = 1; 

void setup() {

Serial.begin(9600);

}

void loop() {

if (v == 1){
a = a + 1 ;

Serial.println(a);

if (millis() >= 1000){
Serial.println(millis());
v = 0;}

}
}

Результат: 1 2 . . . 227 1000

2 — То же, что и 1, но значение a пишется только в конце.

Код:

long a = 0;
int v = 1; 

void setup() {

Serial.begin(9600);

}

void loop() {

if (v == 1){
a = a + 1 ;



if (millis() >= 1000){
Serial.println(millis());
Serial.println(a);
v = 0;}

}
}

Результат:

1000 265174

-Итак, 227 циклов для 1 и 265174 для 2, это правильно, и может ли такая простая модификация замедлить цикличность на 1000?

, 👍-1

Обсуждение

Serial.print() занимает много времени, поэтому результат правильный., @Matej


3 ответа


1

Когда последовательный буфер (64 байта) заполнен, print ожидает, пока байты не будут отправлены со скоростью 9600 бод.

,

2

Запись через последовательный интерфейс занимает много времени (просто учтите выбранную вами скорость передачи данных). Вы всегда должны помнить, что изменение объема печати может изменить поведение ваших программ. Это означает, что ваша 2. конфигурация (более) надежна.

,

0

Вы также можете использовать micros(), чтобы увеличить разрешение до 4 мкС вместо 1000 мкС. Увеличение скорости до 115200 также должно привести к некоторому улучшению.

,