Отсутствует время при использовании таймера

timers time speed

Я настроил 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 для таймера не обновляется здесь точно?

, 👍0


1 ответ


1

Ой, я только что понял, что компилятор работает как по волшебству. Я никогда не использовал t, поэтому компилятор сказал: «Что делает этот парень, этот t бесполезен, и я его удалю!». Когда я использовал t, я получил ощутимые результаты.

,