Forum: Mikrocontroller und Digitale Elektronik sprintf auf avr gibt aus


von Peter K. (peterka2000)


Lesenswert?

Ich möchte auf einen AVR ein float in ein char array wandeln. Dafür habe 
ich das hier:
1
...
2
char buffer[30];
3
float onePart = 0.0048828125F;
4
sprintf(buffer, "Ein Teil: %f\n\r", onePart);
5
uart_puts(buffer);
6
...
Auf der Konsole bekomm ich aber ein wunderschönes ?

von Timmo H. (masterfx)


Lesenswert?

Ich zitiere aus 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_sprintf_und_printf
1
Sollen Fließkommazahlen ausgegeben werden, muss im Makefile eine andere (größere) Version der printflib eingebunden werden.

von Peter K. (peterka2000)


Lesenswert?

Und wie muss ich das unter Linux machen? Also was muss ich als Compiler 
parameter hinzufügen?

von Chris (Gast)


Lesenswert?


von Peter K. (peterka2000)


Lesenswert?

Das hab ich auch schon gesehen, das ist aber für AVR Studio und ich hab 
keine Ahnung wie ich das per Parameter lösen soll

von Chris (Gast)


Lesenswert?

Du hast auch kein Wort darüber verraten, mit was für einer IDE du 
programmierst. Wo her sollen wir dann wissen wie das gehen soll?

von Stefan E. (sternst)


Lesenswert?

Peter K. schrieb:
> keine Ahnung wie ich das per Parameter lösen soll

"-Wl,-u,vfprintf" vorne in die Linker-Kommandozeile, "-lprintf_flt" und 
"-lm" hinten (hinter den Objekt-Datatein).

von Peter K. (peterka2000)


Lesenswert?

Chris schrieb:
> Du hast auch kein Wort darüber verraten, mit was für einer IDE du
> programmierst. Wo her sollen wir dann wissen wie das gehen soll?

>Und wie muss ich das unter Linux machen? Also was muss ich als Compiler
>parameter hinzufügen?
Das gibt zwar keine klare Auskunft, aber wenigstenst ein wenig. Als IDE 
verwende ich Kate + selbstgemachte, übereinfache makefile

von Peter K. (peterka2000)


Lesenswert?

Jetzt mal ne ganz blöde Frage:
Ist das die Linker Zeile?
avr-objcopy -O ihex main.elf main.hex
Also dann
avr-objcopy -Wl,-u,vfprintf -O ihex main.elf main.hex -lprintf_flt -lm

von Stefan E. (sternst)


Lesenswert?

Peter K. schrieb:
> Jetzt mal ne ganz blöde Frage:
> Ist das die Linker Zeile?
> avr-objcopy -O ihex main.elf main.hex

Nein.

von Peter K. (peterka2000)


Lesenswert?

Stefan Ernst schrieb:
> Peter K. schrieb:
>> Jetzt mal ne ganz blöde Frage:
>> Ist das die Linker Zeile?
>> avr-objcopy -O ihex main.elf main.hex
>
> Nein.
Sondern?

von Peter K. (peterka2000)


Lesenswert?

OK, ich hab jetzt
1
avr-gcc -Wl,-u,vfprintf main.c uart.c -mmcu=atmega1281 -o main.elf -Os -lprintf_flt -lm
Funktioniert auch soweit. Warum gibt er mir auf der Konsole jetzt Ein 
Teil: 0.004883 aus. Wo sind den die Kommastellen hin?

von Oliver (Gast)


Lesenswert?

Tja, ein 32-bit-float hat halt nicht so viele Stellen, wie du gerne 
hättest...

Oliver

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.