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

TA1R एक टाइमर_ए रजिस्टर है। मुझे अभी भी नहीं पता कि एक लूप क्यों है। अगर वे समय वापस करना चाहते हैं तो क्यों वे टीए 1 आर वापस नहीं लौटते हैं। के लिए लूप क्या है?कोड का निम्नलिखित भाग

+0

टीए 1 आर इसे पढ़ने के समय के बीच मूल्यों को बदल सकता है क्योंकि यह एक रजिस्टर है। –

उत्तर

13

जब आप वर्तमान समय पूछते हैं तो यह मामले से बचने की कोशिश करता है लेकिन यह समय टिकों से पहले मूल्य वापस देता है। तो अगर रीडिंग स्थिर है तो यह केवल वर्तमान समय लौटाता है।

+8

आप मुझे टिक टिक – TheBlastOne

+0

हाँ द्वारा शर्त लगाते हैं। यह अब समझ में आता है – user2578666

2

कोड TA1R परिवर्तनों तक प्रतीक्षा करने का प्रयास कर रहा है और फिर TA1R का पुराना मान वापस लौटाता है।

यह कोड केवल तभी काम करेगा यदि TA1R को volatile के रूप में घोषित किया गया था, अन्यथा संकलक लूप को दूर कर सकता है।

+0

क्या होगा यदि टाइमर (टी 1 और टी 2) के बाद के पठन लगातार विभिन्न मूल्यों को वापस करते हैं? टाइमर की उच्च आवृत्ति होने पर यह एक मजबूत समाधान प्रतीत नहीं होता है। – jozzas

+4

इसके अलावा, आपका उत्तर गलत है - '! = '' '(T1! = T2)' –

+0

पर ध्यान दें कि यह एक मजबूत समाधान नहीं है। – markgz

संबंधित मुद्दे