Отсутствует время при использовании таймера
Я настроил Timer2 для подсчета каждого тика на частоте 16 МГц или 62,5 нс на такт. Затем я запускаю следующий код:
int t = 0;
for (int i=0;i<64;i++){
data[4*i] = TCNT2;
data[4*i+1] = TCNT2;
byte now = data[4*i+1];
byte last = data[4*i];
t += now > last? (long)(now-last) : 256 -(long)(last-now);
data[4*i+2] = TCNT2;
data[4*i+3] = TCNT2;
}
}
for (int i=0;i<255;i++){
Serial.println(data[i]-data[i+1]);
}
и я получаю вывод: "4 4 4 11" (повторяется), что имеет смысл, 4 такта, чтобы прочитать TCNT2 и записать его в нужное место в данных и 11 циклов при оценке состояния цикла. Однако я не могу понять, когда обновляется переменная t. Я пробовал работать с t и без него, и оба дают одинаковые тайминги. Из моего (очевидно, недостающего) понимания, что обновление переменной — это как минимум одна инструкция, так как же это сделать за один такт? Я неправильно понимаю, что такое одна инструкция, или счетчик TCNT2 для таймера не обновляется здесь точно?
@Beacon of Wierd, 👍0
1 ответ
Ой, я только что понял, что компилятор работает как по волшебству. Я никогда не использовал t, поэтому компилятор сказал: «Что делает этот парень, этот t бесполезен, и я его удалю!». Когда я использовал t, я получил ощутимые результаты.
- Разница между «time_t» и «DateTime»
- Как найти разницу между двумя timestamp
- Как отслеживать миллисекунды в спящем режиме
- Получение кода FFT arduino для работы более 9 часов с использованием micros()
- Как эффективно закодировать долговременный таймер
- Как увеличить пропускную способность последовательного порта
- Когда АЦП снимает показания?
- Какую наименьшую продолжительность можно измерить с помощью micros()?