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