Forum: Compiler & IDEs Yagarto printf und float funktioniert nicht richtig


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Tom (Gast)


Lesenswert?

Hallo,

ich benutzte die Yagarto Toolchain mit Eclipse um einen STM32F103 
Controller zu Programmieren. Da ich printf benötige, habe ich die 
syscalls.c eingebunden. Allerdings funktioniert die Ausgabe von float 
Zahlen nicht.
1
printf("Test: %d, %f, %s \n", 1234, 2.15, "Hallo");
Als Ausgabe erhalte ich über die serielle Schnittstelle:
1
Test: 1234, 0.000000, Hallo

Woran kann das liegen?

Danke
Tom

von Klaus W. (mfgkw)


Lesenswert?

Ich kenne jetzt gerade die Umgebung nicht, aber das riecht
nach dem Standardfehler, daß es vielleicht printf() in mehreren
Versionen gibt (eine platzsparende Version, die keine
Gleitkommazahlen kennt und meistens reicht sowie eine vollständige)
und du vielleicht vergessen hast, die vollständige Version der
C-Bibliothek einzubinden?

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich wüsste nicht wie ich eine andere Bibliothek einbinden kann. Ich hab 
im Makefile -lc -lm -lgcc. Das sollte eigentlich reichen.
Was außerdem seltsam ist, dass ich keine float Werte debuggen kann 
(Siehe Anhang). Ich bin ratlos.

Ich werde das Programm mit einer anderen Toolchain testen.


Grüße
Tom

von Tom (Gast)


Lesenswert?

Hatte grade einen Geistesblitz. Problem gelöst.

Ich hab im Makefile das Optimierungslevel auf "0" gesetzt. Level "s" hat 
wohl einfach die float zahlen weg optimiert..

von Karl H. (kbuchegg)


Lesenswert?

Die float Zahlen sicher nicht. Das wäre ein schwerer Compilerfehler. 
Aber das der Optimizer die Variable rausgeschmissen hat, kann natürlich 
schon sein.

Das erklärt aber immer noch nicht dein printf Ergebnis

von Tom (Gast)


Lesenswert?

printf funktioniert jetzt aber.

von Karl H. (kbuchegg)


Lesenswert?

Hmm.
Das würde mich stutzig machen.
Durch das Einschalten des Optimizers darf sich das beobachtete Verhalten 
eines Programmes nicht verändern. Wenn es das doch tut, dann gibt es 2 
Möglichkeiten
* entweder hast du etwas Verbotenes getan
* die Toolchain ist fehlerhaft

Ich würde das so nicht auf sich beruhen lassen, sondern dem Ganzen 
nachgehen. Das ist eine Zeitbombe.

von Klaus W. (mfgkw)


Lesenswert?

eine Variable, die mit printf() ausgegeben wird, kann doch nicht 
wegoptimiert werden.

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.