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