mikrocontroller.net

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


Autor: Ho Wu (howu75)
Datum:

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

Autor: Olaf (Gast)
Datum:

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

Autor: Ho Wu (howu75)
Datum:

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

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.