mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD float ausgeben


Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> diese Routine benötigt sehr viel Speicher

Lös das Ganze mit Integerarithmetik und laß float weg ;-)) dann klappts 
auch mit dem Speicher.

Das Thema wurde xfach besprochen.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hinweise bin aber drauf gekommen, wenn man im AVR Studio 
unter dem Projekt-Configurations Option-Libraries mit libm.a verlinkt 
reduziert sich der notwendige Speicher auf etwa die Hälfte bis 1/3.
(Zumindest mit meiner Routine)

Hätte es nämlich mit den anderen Methoden probiert (sind aber auch sehr 
Speicher intensiv) und dann durch Zufall drauf gekommen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>      while(anz_nk) {
> // Achtung Compilerfehler wenn man hier while(nk--) schreibt
> // funktioniert es nicht

Ach?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.