mikrocontroller.net

Forum: Compiler & IDEs AVRStudio printf float problem


Autor: mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

http://www.mikrocontroller.net/articles/FAQ#Aktivi...

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

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

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

dtostrf(volt, 5, 2, buf);
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Mach einen Screenshot davon

Besser noch: ein Logfile erzeugen.  Kann AVR Studio das irgendwie?
Ansonsten müsste man sich mit copy&paste über einen Texteditor
behelfen.

Autor: mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und du hast das aktuelle Image auch wirklich noch einmal geflasht?

Autor: mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, mehrmals sogar.

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist deine Installation auch zerschossen.  Wenn er kein
vfprintf in libprintf_flt.a findet, dann beklagt er sich über nichts,
sondern macht einfach weiter und findet dann ein vfprintf in der
libc.a (allerdings halt das ohne FP-Unterstützung).

Autor: mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut ich werde mal das winavr komplett neu installieren, aber erst morgen 
(Feierabend muß auch mal sein... :)

Ich poste morgen nochmal

Gruss
Mario

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Libraries einbinden:
libprintf_flt.a
libm.a

Custom Options (Linker Options):
-Wl,-u,vfprintf -lprintf_flt

Float mit sprintf ausgeben klappt bei mir damit.

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Datum: 10.02.2010 17:29
...
> (Feierabend muß auch mal sein... :)

Was für eine Arbeitshaltung ist das denn????????????
Öffentlicher Dienst?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Was für eine Arbeitshaltung ist das denn????????????

http://sockenseite.de/__oneclick_uploads/2006/10/ausruf.html

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.