AVRStudio printf float problem

Gast #1592355
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
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
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...
#1592473
mario schrieb:

> Mich hat auch ein bischen gewundert, dass das binary nach dem einbinden
> der float libraries nicht größer geworden ist.

Hmm.
Das klingt nicht gut.
Hast du das debug Verzeichnis schon einmal komplett gelöscht?
#1592778
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.