Hi all, We need to get the timestamp of received packets in microseconds, but I couldn't find any component that provides the interface PacketTimeStamp<TMicro,uint32_t> for telosband also we would like a Counter<TMicro,uint32_t> and, again, I couldn't find any component that provides that interface for telosb... Does anybody knows a component that does that or have some suggestion ? Thanks, Felipe
Date: Tue, 28 Aug 2012 00:52:29 -0700 From: [email protected] To: [email protected] CC: [email protected] Subject: Re: [Tinyos-help] questions about usage of keyword atomic On Mon, Aug 27, 2012 at 6:59 PM, Xiaohui Liu <[email protected]> wrote: Hello all, 1) I have the following code snippet:uint8_t a; async event void Alarm1.fired() { a = 0;} This compiles successfully without any warning. Isn't there a racing condition here, between Alarm1 and itself? I don't know what you mean by the above. How can Alarm1 have a race condition with itself? Looks to me like in the above program there is only one place where a is accessed, so how can there be a race condition. 2) If the following is added.async event void Alarm2.fired() { a = 1;} Still, this compiles successfully without any warning. Isn't there an additional racing condition here, between Alarm1 and Alarm2 (and Alarm2 and itself)? async is considered to be one level of execution. So there still isn't a race condition. When Alarm1 fires, a gets set to 0. Alarm2 can not get in and thus there is not a race condition. this is a nesc assumption. That async is one level of execution (one context). 3) If the following is added. event void Timer.fired() { a = 2;}Then there is a warning, "non-atomic accesses to shared variable `a'". Why is there no warning for a = 0;in Alarm1? Why do you expect a warning from Alarm1? Timer.fired is at sync level. Sync level is the other nesc execution context. Because there is access to a from the async level nesc beleives that there is a potential race condition between the Alarms (async level) and Timer.fired (sync level). Hence non-atomic accesses. According to the TinyOS book P196, a variable has to be protected by an atomic statement "if it is accessed from an async function". But seems to me, "a" is accessed from an async function in all 3 cases above and none is protected except a = 0;in Timer. The book isn't very clear. Typically async level is used for functions called from interrupt level signals. Can anybody please share the experience on atomic? Thanks in advance. -- -Xiaohui Liu _______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help -- Eric B. Decker Senior (over 50 :-) Researcher _______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
_______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
