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

TA1R は Timer_A レジスタです。ループがある理由はまだわかりません。時間を返したい場合は、単に TA1R を返します。ループは何のためですか?

4

2 に答える 2

13

現在の時刻を尋ねると、このケースを回避しようとしますが、時刻が刻む直前の値を返します。そのため、読み取り値が安定している場合にのみ現在の時刻を返します。

于 2013-08-06T00:38:39.453 に答える
2

コードは、変更されるまで待ってからTA1R、 の古い値を返そうとしていますTA1R

このコードは、TA1Rが として宣言されている場合にのみ機能volatileします。それ以外の場合、コンパイラはループを最適化できます。

于 2013-08-06T00:36:54.830 に答える