STM32F446VET7 Two Float Value Difference Problem
void AltitudeBuffer_Write(AltitudeBuffer_t* AltitudeBuffer, float altitude)
{
static int i=0;
i++;
AltitudeBuffer->readTime[i%2] = FlightFlagTime.CurrentTime;
uint32_t timeDifference = ( AltitudeBuffer->readTime[i%2] - AltitudeBuffer->readTime[(1 - (i%2))]);
if( ((AltitudeBuffer->head+1)%ALTITUDE_BUFFER_SIZE ) == AltitudeBuffer->tail )
{
float tempValue = 0;
for(int i=0; i<10; i++)
{
tempValue += AltitudeBuffer->buffer[i];
}
tempValue /= 10;
AltitudeBuffer->avarageAltitude[AltitudeBuffer->tail % 2] = tempValue;
AltitudeBuffer->avarageAltitude[2] = ( (AltitudeBuffer->avarageAltitude[AltitudeBuffer->tail % 2]) - (AltitudeBuffer->avarageAltitude[1-((AltitudeBuffer->tail) % 2)]) );
AltitudeBuffer->VerticalSpeed = abs((AltitudeBuffer->avarageAltitude[2] / timeDifference)*1000);
AltitudeBuffer->tail = (AltitudeBuffer->tail + 1)%ALTITUDE_BUFFER_SIZE;
}
AltitudeBuffer->buffer[AltitudeBuffer->head] = altitude;
AltitudeBuffer->head = ( (AltitudeBuffer->head + 1) % ALTITUDE_BUFFER_SIZE );
}
in line 16 ;
when (tail%2) = 0
AltitudeBuffer->avarageAltitude[2] = ( (AltitudeBuffer->avarageAltitude[AltitudeBuffer->tail % 2]) - (AltitudeBuffer->avarageAltitude[1-((AltitudeBuffer->tail) % 2)]) ); is negative.
For example I got this values in debug session ;
(AltitudeBuffer->avarageAltitude[AltitudeBuffer->tail % 2]) is = 897.060547
(AltitudeBuffer->avarageAltitude[1-((AltitudeBuffer->tail) % 2)]) is = 868.588684
so
AltitudeBuffer->avarageAltitude[2] should be = 897.060547 - 868.588684 = 28.471863
but it is oppiste of this value. I got ;
AltitudeBuffer->avarageAltitude[2] = -28.4718628
When tail % 2 = 0 its negative When tail % 2 = 0 its positive
but eitherway (AltitudeBuffer->avarageAltitude[AltitudeBuffer->tail % 2])
is bigger than
(AltitudeBuffer->avarageAltitude[1-((AltitudeBuffer->tail) % 2)]);
or example when tail % 2 = 1
(AltitudeBuffer->avarageAltitude[AltitudeBuffer->tail % 2]) is = 1.18015742
and
(AltitudeBuffer->avarageAltitude[1-((AltitudeBuffer->tail) % 2)]) is = 1.11249995
AltitudeBuffer->avarageAltitude[2] = 0.0676574707
Can u help me please?
I tried with double types instead of float but its not worked. I cannot define the problem exactly
