Forum: Mikrocontroller und Digitale Elektronik R8C - sprintf für float


von Ho W. (howu75)


Lesenswert?

Hallo,

ich brauche mal Eure Hilfe. Ich programmiere gerade einen R8C/13 in C 
(Elektor-Packet mit HEW). Für eine Ausgabe eines Strings auf einem 
Display erstelle ich den String mit dem sprintf-Befehl. Dieser Befehl 
funktioniert mit Ganzzahl-Formaten incl. Formatierung mit der 
%-Anweisung problemlos. Nun möchte ich aber eine Fließkommadarstellung 
im Format -X.XXX erreichen. Nur die mir bekannte Formatierung mit z.B. 
%5.3f funktioniert nicht. Der Wert der float-Variablen wird erst gar 
nicht in den String konvertiert. Statt dessen erscheint im String 
(natürlich im Display) nur das "f" bzw. gar nichts.
Ich habe für den sprintf-Befehl die stdio.h eingebunden. Benötige ich 
für float-Variablen etwa noch weitere Header-Files wie die float.h? Was 
genau muss ich noch beachten, um den sprintf-Befehl erfolgreich mit 
float/double-Werten anwenden zu können? Ich habe bereits vergeblich in 
diesem Forum und auf der Elektorseite nach ähnlichen Beiträgen für den 
R8C gesucht.

Hier noch mein Code :

...
#include "stdio.h"
...
float ZAHL;
char DISPLAY_TEXT[20];
...

void Unterprogramm(void)
{
...
   sprintf(DISPLAY_TEXT, "Zahl = %5.3f",ZAHL);
...
}

Danke und Gruß

Holger

von Olaf (Gast)


Lesenswert?

> Was
> genau muss ich noch beachten, um den sprintf-Befehl erfolgreich mit
> float/double-Werten anwenden zu können? Ich habe bereits vergeblich in
> diesem Forum und auf der Elektorseite nach ähnlichen Beiträgen für den
> R8C gesucht.

Wenn du die Dokumentation zum Compiler gelesen haettest, eine Fertigkeit 
die zweifellos stark in vergessenheit geraten ist, dann haettest du 
erfahren das der Compiler fuer die kleinen R8C die 
Fliesskommaunterstuetzung nicht mit einbindet. Er macht es aber fuer die 
M16C.
Es duerfte nun eine Kleinigkeit sein das zu aendern, aber du kannst in 
der Doku ebenfalls nachlesen das dies aus Platzgruenden geschehen ist. 
Wenn du also Fliesskommaunterstuetzung einbinden willst so wird nicht 
mehr viel Platz fuer dein eigenes Programm uebrig bleiben.

Generationen von Programmierern haben dieses Problem geloesst indem sie 
kein Fliesskomma verwendet haben. Du kannst schliesslich auch mit 
Festkomma arbeiten und dann das Komma soweit nach rechts schieben bis 
die Zahl ein Integer geworden ist, und nur bei der Ausgabe malst du dann 
ein Komma auf dein Display.

Oder du kapitulierst vor den Unwaegbarkeiten des Lebens und kaufst dir 
bei Glyn einen M16C/28. Der hat dann 96k Flash, 10kb Ram, 5x RS232, I2C, 
SPI, DMA, 9 Timer und kostet keine 6Euro. Das ist dann wie der Eintritt 
ins Paradies wenn du bis jetzt R8C benutzt hast. Und du kannst alles so 
weiterverwenden wie du es gewohnt bist.

Olaf

von Ho W. (howu75)


Lesenswert?

Hallo Olaf!

Danke für deine Tipps.
Bei bestimmten Fragestellungen sucht man in den Dokumenten danach wie es 
geht, und nicht ob es geht! Aber beim nächsten Problem werde ich deinen 
Rat beherzigen!

Gruß

Holger

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.