AVRStudio printf float problem

Gast #1592355
Lesenswert?

Hallo,

ich weiß das Thema wurde schon ein paar mal diskutiert, aber:
ich habe nach Artikel:

http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio

die Unterstützung von float-Ausgabe eingeschaltet, es funktioniert aber 
nicht (Es wird "LT3582 vcat = ?V" angezeigt),z.B.
1
double volt=4.8;
2

3
printf("\r\nLT3582 vcat = %5.2fV", volt);
funktioniert nicht.

Der Workaround:
1
double volt=4.8;
2
char buf[10];
3

4
dtostrf(volt, 5, 2, buf);
5
printf("\r\nLT3582 vcat = %sV", buf);
funkioniert aber.

Scheinbar hat das Linken nicht geklappt, kann man das irgednwie 
nachprüfen?
Irgendwelche Ideen warum es nicht geht.
#1592365
Lesenswert?

mario schrieb:

> Scheinbar hat das Linken nicht geklappt, kann man das irgednwie
> nachprüfen?


Im AVR-Studio wird im Output Fenster mitprotokolliert, was die einzelnen 
'Erstellungsschritte' machen und mit welchen Argumenten sie aufgerufen 
wurden.
Mach einen Screenshot davon und poste ihn (Bei einem Rebuild all). Dann 
kann man hier mal durchsehen, welchen Schalter du vergessen hast.
Gast #1592392
Lesenswert?

Hier ist der output:

Build started 10.2.2010 at 16:41:46
avr-gcc  -mmcu=atmega644p -Wall -gdwarf-2 -std=gnu99 
-DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct 
-fshort-enums -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
../main.c: In function 'main':
../main.c:11: warning: unused variable 'i'
avr-gcc  -mmcu=atmega644p -Wall -gdwarf-2 -std=gnu99 
-DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct 
-fshort-enums -MD -MP -MT TWI_Master.o -MF dep/TWI_Master.o.d  -c 
../TWI_Master.c
../TWI_Master.c: In function 'TWIM_Init':
../TWI_Master.c:11: warning: unused variable 'i'
avr-gcc -mmcu=atmega644p -Wl,-u,-vfprintf  -Wl,-Map=Peripherie-Board.map 
main.o uart_ext.o uart.o I2C_Slave_Handler.o TWI_Slave.o TWI_Master.o 
ADC.o OLED.o LT3582.o    -lprintf_flt -lm  -o Peripherie-Board.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature 
Peripherie-Board.elf Peripherie-Board.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex 
Peripherie-Board.elf Peripherie-Board.eep || exit 0
avr-objdump -h -S Peripherie-Board.elf > Peripherie-Board.lss

AVR Memory Usage
----------------
Device: atmega644p

Program:   17496 bytes (26.7% Full)
(.text + .data + .bootloader)

Data:       1077 bytes (26.3% Full)
(.data + .bss + .noinit)


Build succeeded with 2 Warnings...

Wie man erkennen kann, werden die Linkeroption "-Wl,-u,-vfprintf" und 
die libraries "-lprintf_flt" und "-lm" eingebunden...
#1592778
Lesenswert?

Matthias K. schrieb:
> Libraries einbinden:
> libprintf_flt.a
> libm.a
>
> Custom Options (Linker Options):
> -Wl,-u,vfprintf -lprintf_flt

mario schrieb:
> Wie man erkennen kann, werden die Linkeroption "-Wl,-u,-vfprintf" und
> die libraries "-lprintf_flt" und "-lm" eingebunden...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren