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 :-)
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
>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.
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 );
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).
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.