Forum: Compiler & IDEs Printf float mit Eclipse und Winavr


von Robert (Gast)


Lesenswert?

Hallo alle,

Ich kann mit Avr eclipse Zeichen und ganze Zahlen über printf ausgeben.
Leider ich kann keine Fliesskommazahlen ausgeben.

Beispiel:
float f = 1.0098;
printf("f = %f\n", f);

Ausgabe: f = ?

Die Libraries: printf_flt.a und m.a sind über Eclipse eingebunden.

Compiler Einstellung sind:

Building file: ../src/main.c
Invoking: AVR Compiler
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums 
-funsigned-char -funsigned-bitfields -Wl,-u,vfprintf -lprintf_flt -lm 
-mmcu=atmega8 -DF_CPU=3686400UL -MMD -MP -MF"src/main.d" -MT"src/main.d" 
-c -o"src/main.o" "../src/main.c"

Linker Einstelungen:

Invoking: AVR C Linker
avr-gcc -Wl,-Map,Temperature_Sensor.map -mmcu=atmega8 
-o"Temperature_Sensor.elf"  ./src/main.o  ./src/drivers/i2c.o 
./src/drivers/lm75A.o ./src/drivers/serial.o   -lprintf_flt -lm

Danke im Voraus.

: Verschoben durch Admin
von Stefan E. (sternst)


Lesenswert?

Das "-Wl,-u,vfprintf" muss in den Linker-Aufruf. Beim Compilieren hat 
das nichts zu suchen (wie übrigens auch -lprintf_flt und -lm).

von Pause (Gast)


Lesenswert?

Stefan, durch -Wl wird das durch das Compiler-Frontend an den Linker 
alles richtig übergeben. Das ist richtig so.
Warum die Ausgabe nicht funktioniert sehe ich gerade auch nicht.

von Stefan E. (sternst)


Lesenswert?

Pause schrieb:
> Stefan, durch -Wl wird das durch das Compiler-Frontend an den Linker
> alles richtig übergeben. Das ist richtig so.

Aber nicht, wenn bei dem gcc-Aufruf überhaupt nichts gelinkt wird, 
sondern nur übersetzt. Und da, wo dann tatsächlich gelinkt wird, fehlt 
die Option.

von Robert (Gast)


Lesenswert?

Hallo, Pause

ich habe das jetzt geändert:

Invoking: AVR Compiler
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums 
-funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=3686400UL 
-MMD -MP -MF"src/drivers/serial.d" -MT"src/drivers/serial.d" -c 
-o"src/drivers/serial.o" "../src/drivers/serial.c"
Finished building: ../src/drivers/serial.c

Invoking: AVR C Linker
avr-gcc -Wl,-Map,Temperature_Sensor.map -Wl,-u,vfprintf -lprintf_flt -lm 
-mmcu=atmega8 -o"Temperature_Sensor.elf"  ./src/main.o 
./src/drivers/i2c.o ./src/drivers/lm75A.o ./src/drivers/serial.o 
-lprintf_flt -lm
Finished building target: Temperature_Sensor.elf

Trotzdem geht das nicht.

von Daniel V. (danvet)


Lesenswert?

Robert schrieb:
> Hallo, Pause
>
> ich habe das jetzt geändert:
>
> Invoking: AVR Compiler
> avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums
> -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=3686400UL
> -MMD -MP -MF"src/drivers/serial.d" -MT"src/drivers/serial.d" -c
> -o"src/drivers/serial.o" "../src/drivers/serial.c"
> Finished building: ../src/drivers/serial.c
>
> Invoking: AVR C Linker
> avr-gcc -Wl,-Map,Temperature_Sensor.map -Wl,-u,vfprintf -lprintf_flt -lm
> -mmcu=atmega8 -o"Temperature_Sensor.elf"  ./src/main.o
> ./src/drivers/i2c.o ./src/drivers/lm75A.o ./src/drivers/serial.o
> -lprintf_flt -lm
> Finished building target: Temperature_Sensor.elf
>
> Trotzdem geht das nicht.

probier mal das '-lm' als letzte Option zu übergeben, und vor dem 
Output, also:

Invoking: AVR C Linker
avr-gcc -Wl,-Map,Temperature_Sensor.map -Wl,-u,vfprintf
-mmcu=atmega8   ./src/main.o ./src/drivers/i2c.o ./src/drivers/lm75A.o 
./src/drivers/serial.o -lprintf_flt -lm -o"Temperature_Sensor.elf"

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.