Formatierte Zahlenausgabe in C

#1103004
Lesenswert?

Oftmals muß man Zahlenwerte ausgeben.
Mit printf wird jedoch viel Code erzeugt, der auch viel Rechenzeit 
benötigt.
Mit itoa/ltoa kann man nicht die Ausgabeformatierung festlegen, in der 
Regel wünscht man aber eine rechtsbündige Darstellung.
Auch möchte man oft ein Komma in einen ganzzahligen Wert einfügen ohne 
erst die float-Lib einzubinden.


Anbei eine sehr sparsame und universelle Lösung.
Per Definition läßt sich festlegen, ob 32bit oder 16bit Zahlen 
ausgegeben werden sollen.
Als Parameter werden der Wert, die minimale Anzahl Stellen, die Stellen 
hinter dem Dezimalzeichen und der Ausgabepuffer im SRAM übergeben.
Dieses Beispiel habe ich auf dem AVR Attiny25 getestet.

Die Ausgabe der Zahl erfolgt auf ein 2*16 LCD per Timerinterrupt.
Die Ausgabe im Interrupt ist besonders effektiv, da das Main nicht durch 
die LCD-Wartezeiten belastet wird.


Peter
Angehängte Dateien:
#1124754
Lesenswert?

Johann L. wrote:
> Eine entstaubte Version anbei, aber ungetestet ;-)

Ja, da sind 2 unschöne Sache drin:

Das Unterdrücken des abschließenden 0-Bytes muß sein, wenn man direkt in 
den Display-RAM schreibt.

Und:
1
 // insert spaces until min length
2
    while (--digits)
3
        *outp++ = ' ';
Wenn dann die Zahl größer ist, als die Anzahl Digits, füllst Du damit 
fast 256 Byte SRAM mit ' '.
Daher habe ich es mit Absicht so geschrieben:
1
  while( --digits >= 0 )
2
    *outp++ = ' ';
Man kann damit auch linksbündig ausgeben, wenn digits = 1 ist.


Peter
Gast #1124784
Lesenswert?

Wolfgang Hopperdietzel wrote:
> hab ich gemacht
>
> auserdem hab ich #include <pgmspace.h> in #include <avr\pgmspace.h>
> geändert
Mach lieber Schrägstriche anstatt der Rückstriche... kommt bei 
Linux-Tools besser.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren