Gast
#644403
Hallo
ich kaufte mir ein KS0066 kombatibles LCD und schrieb folgende Routine
zur ausgabe von float:
// Float auf Display ausgeben
// anz_nk ... Anzahl der Nachkommastellen
void lcd_float_ausgeben(float zahl, uint8_t anz_nk) {
char d, i = 1;
if(zahl < 0) {
zahl = fabs(zahl); // Absolutbetrag bilden
lcd_daten('-'); // Minus ausgeben falls negativ
}
while(zahl >= 10) {
// Anzahl der Dezimalstellen vor dem Komma
zahl /= 10;
i++;
}
anz_nk += i; // Anzahl der notwendigen Schleifendurchläufe
while(anz_nk) {
// Achtung Compilerfehler wenn man hier while(nk--) schreibt
// funktioniert es nicht
anz_nk--;
i--;
d = zahl; // Ziffer speichern
zahl = 10 * (zahl - d); // Ziffer löschen, nächste Dezimalstelle
lcd_daten(d + 0x30); // Ziffer auf Display ausgeben
if(i == 0) lcd_daten(','); // Komma setzen
}
}
Funktioniert schon recht gut aber hat jemand eine Idee für eine
Optimierung, diese Routine benötigt sehr viel Speicher.
Wie genau ist eigentlich bei AVR Studio die Gleitkommazahl float
implementiert (Bitweise)? vielleicht könnte man da etwas einsparen
wenn man Bitshift Operationen durchführen kann.
Ciao Werner