Forum: Compiler & IDEs EMBLITZ 1.11 GCC vsprindf mit Float geht nicht?


von Dirk (Gast)


Lesenswert?

Hallo,

ich benutze EMBlocks2.2 bzw EMBlitz1.11 für den STM32f303.
Die neue 2.1 funktioniert nicht, aber das ist ein anderes Thema.

Nun muss ich auf einem Display float zahlen ausgeben.

Also habe ich mir eine PRINTF Funktion nach lehrbuch mit vsprintf 
gebaut.
Allerdings liefert der eine GCC unter EMBlocks mir mal gleich eine 
falsche Anzahl der Zeichen und es fehlt im String logischerweise der 
Wert.
Unter EMBlitz 1.11 stimmt wenigstens die Anzahl.

Nun habe ich mal einfach nur ein sprintf (Ziel,"%5.1f hallo", 1234.0);
gemacht und auch da fehlt die Zahl komplett.

Mache ich was falsch oder sind die Funktionen einfach nur schrott?
Achso eine HEX oder Dezimal Zahl geht.

Was wäre die alternative?
Gibt es fertige Funktionen für Float to String die auch eine 
Formatierung können? Das kann ich zwar selber schreiben aber dieser weg 
wäre sowieso eine Krücke.

von Thosch (Gast)


Lesenswert?

Du musst in den Linker-Einstellungen schon eine stdlib verwenden, die 
float in printf unterstützt.

Die defaultmäßig eingetragene Lib ist aus Platzgründen ohne 
float-Unterstützung in printf.

UND (das hat mich mal mehr als einen Tag Fehlersuche gekostet):
Der Stack muß unbedingt 64-Bit-aligned liegen. Sonst liefert printf zwar 
float-Werte, aber völligen Garbage.

Die Stackadresse sollte also auf 00 enden, keinesfalls auf FF.
Das war irgendwann mal Default in CooCox, den Stack auf die letzte 
RAM-Adresse zu setzen, statt ein Byte dahinter.

von Dirk (Gast)


Lesenswert?

So nun muss ich doch mal abschliessend antworten.

Der Tipp mit der falschen LIB war dann der richtige.
Somit wusste ich dann auch wonach ich suchen musste.
Es war bei mir nur ein Harken in der LIB Einstellung.

Bei mir war der Stack schon richtig angelegt, aber viel zu klein.
Was zum Glück aber keine Probleme machen konnte.


Wie läuft das denn wenn ich zum Beispiel ein FREERTOS nehmen würde?
Da kann ich ja nicht garantieren das der Stack von meinem Task so sauber 
liegt. Ist das da egal oder muss man da irgentwelche Tricks anwenden?

VG Dirk

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.