下面这段代码做了什么

时间:2013-08-06 00:32:03

标签: c

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

TA1R是Timer_A寄存器。我仍然不明白为什么有一个循环。如果他们想要返回时间,他们只需返回TA1R。什么是循环?

2 个答案:

答案 0 :(得分:13)

它会在您询问当前时间时尝试避免这种情况,但它会在时间滴答之前返回值。因此,如果读数稳定,它只返回当前时间。

答案 1 :(得分:2)

代码正在尝试等待TA1R更改,然后返回旧值TA1R

此代码仅在TA1R声明为volatile时才有效,否则编译器可以优化循环。