From: kusy Date: Wed, 4 Feb 2009 20:03:58 +0000 (+0000) Subject: applied Thomas's patch to fix sum of squares quantization bug X-Git-Tag: rc_6_tinyos_2_1_1~505 X-Git-Url: https://oss.titaniummirror.com/gitweb?a=commitdiff_plain;h=e19f0239e76610979fb16cb47409d44586346915;p=tinyos-2.x.git applied Thomas's patch to fix sum of squares quantization bug --- diff --git a/tos/lib/ftsp/TimeSyncP.nc b/tos/lib/ftsp/TimeSyncP.nc index fc2ef994..4313f666 100644 --- a/tos/lib/ftsp/TimeSyncP.nc +++ b/tos/lib/ftsp/TimeSyncP.nc @@ -150,6 +150,8 @@ implementation float newSkew = skew; uint32_t newLocalAverage; int32_t newOffsetAverage; + int32_t localAverageRest; + int32_t offsetAverageRest; int64_t localSum; int64_t offsetSum; @@ -169,16 +171,23 @@ implementation newOffsetAverage = table[i].timeOffset; localSum = 0; + localAverageRest = 0; offsetSum = 0; + offsetAverageRest = 0; while( ++i < MAX_ENTRIES ) if( table[i].state == ENTRY_FULL ) { + /* + This only works because C ISO 1999 defines the signe for modulo the same as for the Dividend! + */ localSum += (int32_t)(table[i].localTime - newLocalAverage) / tableEntries; + localAverageRest += (table[i].localTime - newLocalAverage) % tableEntries; offsetSum += (int32_t)(table[i].timeOffset - newOffsetAverage) / tableEntries; + offsetAverageRest += (table[i].timeOffset - newOffsetAverage) % tableEntries; } - newLocalAverage += localSum; - newOffsetAverage += offsetSum; + newLocalAverage += localSum + localAverageRest / tableEntries; + newOffsetAverage += offsetSum + offsetAverageRest / tableEntries; localSum = offsetSum = 0; for(i = 0; i < MAX_ENTRIES; ++i)