mikrocontroller.net

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


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
printf("Test: %d, %f, %s \n", 1234, 2.15, "Hallo");
Als Ausgabe erhalte ich über die serielle Schnittstelle:
Test: 1234, 0.000000, Hallo

Woran kann das liegen?

Danke
Tom

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

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

Autor: Tom (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf funktioniert jetzt aber.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

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

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.