Ответ 1
Он пытается избежать случая, когда вы запрашиваете текущее время, но оно возвращает значение до того, как отметит время. Таким образом, он возвращает только текущее время, если показание стабильно.
short rtimer_arch_now(void)
{
short t1, t2;
do {
t1 = TA1R;
t2 = TA1R;
} while(t1 != t2);
return t1;
}
TA1R - это регистр Timer_A. Я все еще не понимаю, почему существует цикл. Если они хотят вернуть время whydont, они просто возвращают TA1R. Что такое цикл для?
Он пытается избежать случая, когда вы запрашиваете текущее время, но оно возвращает значение до того, как отметит время. Таким образом, он возвращает только текущее время, если показание стабильно.
Код пытается подождать, пока TA1R
изменится, а затем вернет старое значение TA1R
.
Этот код будет работать, только если TA1R
был объявлен как volatile
, иначе компилятор может оптимизировать цикл.