Forum: Mikrocontroller und Digitale Elektronik Keine Ausgabe von Floatzahlen möglich beim gcc - Compiler??


von Patti (Gast)


Lesenswert?

Hallo Leute,
sorry das ich noch einen Thread hier im MSP430 Forum aufmache, aber ich 
bin verzweifelt!!!
ich habe ein großes Problem beim MSp430 in Verbindung mit Eclipse, wenn 
ich eine Floatzahl bzw. Double ausgeben möchte.
Siehe: Beitrag "Ausgabe von float/double Zahl via printf in Eclipse mit gcc"
Ich bin  für jeden Tipp dankbar und würde auch gerne wissen ob jemand 
von Euch mit dieser Kombination arbeitet.

Nun zu meinem Problem:
_____________________________________________________________________
Ich habe ein Problem bei der Ausgabe von einer double bzw. float Zahl.
Ich benutze einen MSP430F149 und möchte einen AD-Wert via serieller
Schnittstelle ausgeben.
printf funktioniert einwandfrei mit normalen Strings. Nun wollte ich
eine float Zahl zum testen (zB. 1.23) folgendermaßen ausgeben:

double zahl=1.23;
printf("%f",zahl);

Die Ausgabe hierfür auf dem Hyperterminal ist f . Wie kann das sein und
wo liegt der Fehler???

Die Ausgabe einer int-Zahl funktioniert jedoch einwandfrei.
_____________________________________________________________________

Muss ich noch eine Libary hinzufügen? Wo finde ich denn das Fine Manual? 
Oder ist eine Ausgabe von Floatzahlen nicht möglich????

Ich habe schon etliche Zeit mit recherche im Internet verbracht und ich 
finde immer nur wiedersprüchliche Angaben.

Danke Für Eure Hilfe :-)

von Karl H. (kbuchegg)


Lesenswert?

Ich wage mal zu behaupten:
Wenn Jörg nicht mit Sicherheit weiss, ob es eine
float-Implementierung für printf gibt, dann weiss
es niemand in diesem Forum.

Musst du dir halt selbst eine schreiben.
Ist doch nicht weiter wild. Hast du ein
ftoa() bzw. dtoa() zur Verfügung?
Ansonsten: Den Vorkommaanteil kriegst du
(wenn der Zahlenbereich reicht) durch einen
cast nach int. Den Nachkommaanteil: Den int
von der Zahl abziehen. Dadurch bleibt nur
der Nachkommaanteil übrig. In einer Schleife
immer wieder mit 10 multiplizieren bringt jeweils
die nächste Stelle vor das Komma. Mit einem cast
nach int abtrennen und ausgeben.
Das Vorzeichen nicht vergessen!
Wenn deine Zahlen nicht allzugross oder allzuklein
sind, reicht das dann schon. Probiers mal auf dem
Papier durch, ist nicht weiter wild.

   672.5023

Nach int casten, macht       672      Vorkommaanteil, ausgeben
dann einen '.' ausgeben
Von 672.5023 die 672 abziehen, macht 0.5023

0.5023 * 10   -> 5.023     int casten -> 5      672.5
5.023 - 5 -> 0.023
0.023 * 10    -> 0.23      int casten -> 0      672.50
0.23 - 0  -> 0.23
0.23 * 10    -> 2.3        int casten -> 2      672.502
2.3 - 2  ->  0.3
0.3 * 10  -> 3.0           int casten -> 3      672.5023
3.0 - 3  ->  0.0  fertig

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>3.0 - 3  ->  0.0  fertig

da sollte man vielleicht lieber "<= 0.1" als Grenze benutzen, da eine 
float-Zahl (immer) einen gewissen "Rattenschwanz" mitführt.

von Karl heinz B. (kbucheg)


Lesenswert?

Das ist richtig.
Auch zwischendurch ist einfaches casten ev. nicht so toll :-)

Wenn 3 oder 4 Nachkommastellen reichen und keine negativen
Zahlen vorkommen, gehts noch einfacher:

  double d = 672.5023;
  int Vorkomma = (int)d;
  int Nachkomma = ( d - Vorkomma ) * 1000;
  printf( "%d.%03d", Vorkomma, Nachkomma );

von crazy horse (Gast)


Lesenswert?

Kenn den gcc-Compiler nicht, aber vielleicht gibts auch da 
Compiler-options für printf()? Je mehr printf() kann, umso grösser wird 
natürlich der Code. Bei CodeVision kann ich verschiedenes einstellen 
(int,long,float).

von Karl heinz B. (kbucheg)


Lesenswert?

Beim gcc ist es so, dass je nachdem was printf alles können
soll, verschiedene Bibliotheken dazugelinkt werden müssen.
Wenn es die entsprechende Bibliothek auf einem spezifischen
gcc-System nicht gibt, schaust du in die Röhre.

Dann bleibt nur: Selber machen oder jemanden finden, der
die spezielle printf-Library auf den spezifischen Port
anpasst. Letzteres dürfte kein allzugrosses Problem sein,
da ja printf() auch in C geschrieben ist und eigentlich
nichts Plattform-spezifisches enthält (zumindest wenn
ich mal überschlägig nachdenke, kann mich auch irren).
Müsste einfach nur mal wer machen. Hat wahrscheinlich
auch für den MSP430 schon wer gemacht. Nur: Den muss man
erstmal finden.

von Patti (Gast)


Lesenswert?

Danke noch mal für Eure Mitarbeit. Habe jetzt die Bestätigung das 
Floatzahlen nicht bei printf unterstützt werden.
Habe jetzt das Problem so wie Karl Heinz gelöst.
Bye Patti

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.