sprintf() mit float funktioniert nicht

OP #4396713
Lesenswert?
• ▲
▼
Hallo

Ich wollte ein kleines Programm mit EMblocks für den STM32F4 machen, nun 
kann ich in der sprintf funktion keine float umwandeln ?!

float xy = 65.12345;
char txt[100] = "";
sprintf(txt, "%f", xy);


Was mach ich falsch ? Muss noch irgend eine lib eingebunden werden ?

Mit int funktionierts:

int xy = 65;
char txt[100] = "";
sprintf(txt, "%d", xy);


Ich hoffe jemand hat einen Tip parat ;-)
#4397163
Lesenswert?
• ▲
▼
S. R. schrieb:
> Oder D. schrieb:
>> Printf ist ein Elefant, man sollte ueber itoa = integer to Ascii
>> nachdenken.
>
> Das ist ganz besonders dann sinnvoll, wenn man mit float
> hantiert.</ironie>


Na ja. Machen kann man das schon.
Aber mit einem STM32 hat man einen Boliden vor sich, bei dem man sich 
über float keine Gedanken mehr machen muss. Da ist der Griff zu 
derartigen Klimmzügen nicht mehr notwendig
OP #4397815
Lesenswert?
• ▲
▼
Noch eine zusätzliche INFO: Ich befasse mich erst seit kurzem mit dem 
STM32, vorher habe ich mit AVR hantiert. Deshalb bitte ich um 
Verständnis, wenn ich nicht weis wo ich welche Einstellung finde...


S. R. schrieb:
> Beherrscht dein sprintf() überhaupt floats?
keine Ahnung, ich habe meine ersten Schritte wie im folgenden Link 
gemacht, und das Projekt auch so eröffnet. Die Beschriebenen libs unter 
Punkt 2, habe ich auch so rein kopiert.
https://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks

> Das ist öfter mal per default abgeschaltet, um Flash zu sparen. Guck mal
> ins Buildsystem.
wo genau ?

> In der Newlib brauchst du ein funktionierendes sbrk(), welches den Heap
> implementiert.
wo finde ich die Newlib ?
OP #4398105
Lesenswert?
• ▲
▼
Also habe mal versucht den Heap Stack anzupassen (Bild), ich hoffe das 
ist richtig so ? jedoch ändert sich mit dem sprintf() immer noch 
nichts..

Wenn ich das richtig sehe habe ich nirgens eine Newlib in meinem Projekt 
Baum ?

Ist es wirklich so eine Zangengeburt, "nur" eine float Zahl per Uart 
auszugeben ? Beim AVR gings wesentlich einfacher ;-)
Gast #4398165
Lesenswert?
• ▲
▼
Hallo,

probiers mal mit einem "f" hinter deiner float-Zahl, also z.B.:
1
float xy = 65.12345f;

Wenn das "f" fehlt, interpretieren einige Compiler die float-Zahl als 
double. Dann passt natürlich die sprintf-Funktion nicht mehr.
#4398169
Lesenswert?
• ▲
▼
Dieter schrieb:
> Hallo,
>
> probiers mal mit einem "f" hinter deiner float-Zahl, also z.B.:
>
>
1
> float xy = 65.12345f;
2
>
>
> Wenn das "f" fehlt, interpretieren einige Compiler die float-Zahl als
> double. Dann passt natürlich die sprintf-Funktion nicht mehr.

Sollte egal sein. Denn auch ein %f in einem sprintf wird als double 
interpretiert. Bei variadischen Argument, wie den Funktionen aus der 
printf Familie werden float sowieso immer als double übergeben (genauso 
wie ein char auch immer als int übergeben wird)
Schaden kanns nicht, aber versprechen würde ich mir davon nichts.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.