2013-08-06 2 views
10
short rtimer_arch_now(void) 
{ 
    short t1, t2; 
    do { 
    t1 = TA1R; 
    t2 = TA1R; 
    } while(t1 != t2); 
    return t1; 
} 

TA1RはTimer_Aレジスタです。私はまだループがある理由を知りません。彼らが時間を返すことを望むなら、彼らは単にTA1Rを返します。どのようなループですか?次のコードは何ですか?

+0

TA1Rはレジスタとして読み出される時間の間に値を変更できます。 –

答えて

13

現在時刻を尋ねるときには避けようとしますが、タイムティックの直前に値を返します。したがって、読み取り値が安定している場合は現在の時刻のみを返します。

+8

ダニで私を賭ける – TheBlastOne

+0

うん。それは今意味がある – user2578666

2

コードがTA1Rに変更されるまで待つことを試みていて、古い値TA1Rを返します。

このコードは、TA1Rvolatileと宣言された場合にのみ機能します。そうしないと、コンパイラはループを最適化できます。

+0

タイマ(t1とt2)の連続した読み込みが連続して異なる値を返すとどうなりますか?タイマーの周波数が高い場合、これは強固な解決策ではありません。 – jozzas

+4

また、あなたの答えは間違っています - 'while(t1!= t2)'の '!='に注意してください。 –

+0

はこれが強固な解決策ではないことに同意しました。 – markgz

関連する問題