On Nov 27, 2007, at 1:36 PM, Federico Fiorentin wrote:

Bug In Arithmetic Ops
I did more tests, and the problem still persists.
It seems that the evaluation becames incorrect when the T1 operand is bigger then 2^24.

Below the operands T1, T2.
T1 is the LocalTime.get() value. AlwaysT1 >= T2.

The subtraction T1-T2  evaluated by mote, T1-T2 by Calc OpenOffice,
then (T1-T2 by mote)-(T1-T2 by Calc) and last one logT1 in base 2. The same data in the attachment.

I'll send the code if you need, but I'm sure that there aren't errors in it.
I hope to find a solution.
thanks

T1 T2 T1-T2 by mote T1-T2 by Calc Difference logT1/log2

16983908 16759804 224103 224104 -1 24,02


I am unable to reproduce this case in a simple, controlled test. The mote always returns 224104, for all combinations of uint32_t and nx_uint32_t operations. So there is something weird going on with your code. Try rewriting it to figure out what construction causes the problem. For example, rewrite

PollResp_ptr->globalTime = PollResp_ptr->eta[1] - T2

To be

uint32_t gTime = PollRsp_ptr->eta[1];
gTime -= T2;

Or directly access arrivalTimestamp rather than going through your structure. The generated assembly is very long (and inefficient), so hard to work through. But it is not an arithmetic problem.

Phil
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to