Hallo,
ich habe mir ein Programm geschrieben, wo ich ein paar sachen berechnen
möchte. Die Ergebnisse möchte ich mir am anfang noch über uart ausgeben,
um zu kontrollieren, ob es richtig ist.
while ( !( UCSRA & (1<<UDRE)) );/* Wait for empty transmit buffer */
62
UDR = value & 0xFF; /* Put data into buffer, sends the lower 8 bite */
63
}
64
else{
65
while ( !( UCSRA & (1<<UDRE)) );/* Wait for empty transmit buffer */
66
UDR = value>>8; /* Put data into buffer, sends the upper 8 bite */
67
while ( !( UCSRA & (1<<UDRE)) );/* Wait for empty transmit buffer */
68
UDR = value & 0xFF; /* Put data into buffer, sends the lower 8 bite */
69
}
70
}
Es geht insbesondere um die Zeile
usartTransmit(netHidden[n]);
Wenn ich mir die Variable netHidden ausgebe, ist das Programm 938 bytes
groß. Wenn ich allerdings die Variable outHidden an der stelle ausgeben
lasse, ist das Programm 2518 bytes groß. Wieso ist das so? Ich berechne
ja zwischendrinn
outHidden[n] = tempValue * 1000;
wobei tempValue ein float ist. Aber bleibt outHidden nicht trotzdem ein
uint16_t und schneidet alles andere ab?
Wenn nicht, was muss ich machen, damit es ein uint16_t bleibt?
Johannes
Johannes schrieb:> Wenn ich allerdings die Variable outHidden an der stelle ausgeben lasse,> ist das Programm 2518 bytes groß. Wieso ist das so?
Am besten mal den Output angucken.
Vermutlich optimiert der Compiler die Berechnungen weg, wenn die
Ergebnisse nicht verwendet werden.
Wenn ich dich richtig verstanden habe, verwendest du in der Version, die
ein kurzes "Programm" erzeugt, outHidden nicht. Damit können die float
operationen weg optimiert werden, weil tempValue auch nicht verwendet
wird. Da wird der Compiler die Float Operationen nicht einbinden, was
sehr viel Platz einspart.