2013-08-06 68 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

此代碼僅在TA1R被聲明爲volatile時纔有效,否則編譯器可以優化循環。

+0

如果定時器(t1和t2)的後續讀取持續返回不同的值,該怎麼辦?如果計時器的頻率很高,這似乎不是一個可靠的解決方案。 – jozzas

+4

另外,你的回答是不正確的 - 注意while(t1!= t2)中的'!='' –

+0

同意這不是一個可靠的解決方案。 – markgz