Что делает следующий фрагмент кода

short rtimer_arch_now(void)
{
  short t1, t2;
  do {
    t1 = TA1R;
    t2 = TA1R;
  } while(t1 != t2);
  return t1;
}

TA1R - это регистр Timer_A. Я все еще не понимаю, почему существует цикл. Если они хотят вернуть время whydont, они просто возвращают TA1R. Что такое цикл для?

Ответ 1

Он пытается избежать случая, когда вы запрашиваете текущее время, но оно возвращает значение до того, как отметит время. Таким образом, он возвращает только текущее время, если показание стабильно.

Ответ 2

Код пытается подождать, пока TA1R изменится, а затем вернет старое значение TA1R.

Этот код будет работать, только если TA1R был объявлен как volatile, иначе компилятор может оптимизировать цикл.