ATmega16, WinAVR und float

Gast #178185
Lesenswert?

Hi,

ich habe zum Testen des USART's von meinem Mega16 ein kleines
Programmchen geschrieben was auch funktioniert. Meine Frage ist ob
WinAVR, ich kann mir das eigentlich nicht vorstellen oder der Mega16,
den float Datentyp nicht unterstützt?

for(;;)
 {
  PORTA^=0xFF; //alles auf 1
  //value = 2.123 * i;
  value = 10 * i;
  i++;
  delay_ms(2000);
  sprintf(buffer," Der Wert ist %i ",value);
  //sprintf(buffer,"## Der Wert ist %2.2f",value);
  len = strlen(buffer);
  uart_send(buffer, len); //sende chararray mit x zeichen

 }

Der Programmauschnitt funktioniert mit den int - Werten aber nicht den

auskommentierten float Varablen. Ich bekomme keine Fehlermeldung beim
Compilieren und die Ausgabe funktioniert soweit aber an der Stelle wo
die Zahl ausgegeben werden sollte steht nur Misst. Mache ich etwas
falsch?

Danke!!!
Gast #178187
Lesenswert?

Hi,

das ist meine Fehlermeldung des Compilers nach dem ich das Makefile
geändert habe:

avr-gcc -mmcu=atmega16        -I. -g -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=test.o  -std=gnu99 test.o   --output
test.elf   RINTF_LIB =   -lm
avr-gcc: RINTF_LIB: No such file or directory

So habe ich das eingebunden, ich weiss sonst nicht wie ich das machen
soll:

# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $PRINTF_LIB = $(PRINTF_LIB_FLOAT)
$(SCANF_LIB)

Danke!!!
$(MATH_LIB)
Gast #178188
Lesenswert?

Warum benutzt du nicht das Programm mfile, das bei WinAVR dabei ist?

Du scheinst nämlich das Makefile editieren zu wollen, ohne die
make-Anleitung jemals gesehen zu haben
(http://www.gnu.org/software/make/manual/html_chapter/make_toc.html).
Falls du nicht vorhast, sie zu wenigstens zu überfliegen, bist du mit
einem Programm wie mfile besser bedient.

> LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $PRINTF_LIB = $(PRINTF_LIB_FLOAT)
Das ist sinnlos. Zwei Zuweisungen in einer Zeile, das funktioniert
sicher nicht.
Lass die LDFLAGS, wie sie sind, und veränder nur die Variable
$PRINTF_LIB. Dann werden die Linker-Flags automatisch richtig befüllt.


btw:
> PORTA^=0xFF; //alles auf 1
Diese Zeile setzt bei PORTA nicht alles auf 1 (falls PORTA vorher
nicht 0 war). Richtig wäre eine simple Zuweisung:
PORTA = 0xFF; // alles auf 1

Dein Code entspricht:
PORTA = PORTA ^ 0xFF;
^ ist in C der Operator für bitweises XOR.
Gast #178189
Lesenswert?

Hi,

irgendwie kriege ich das nicht hin mit dem Makefile. Bei dem Programm
Mfile finde ich keine Option in der ich etwas mit Floating - Point
einbenden kann. Wenn mir jemand helfen könnte währe das wirklich sehr
nett.

Danke!
Angehängte Dateien:
Gast #178192
Lesenswert?

Hi,

ich habe zum Testen des USART's von meinem Mega16 ein kleines
Programmchen geschrieben was auch funktioniert. Meine Frage ist ob
WinAVR, ich kann mir das eigentlich nicht vorstellen oder der Mega16,
den float Datentyp nicht unterstützt?

for(;;)
 {
  PORTA^=0xFF; //alles auf 1
  //value = 2.123 * i;
  value = 10 * i;
  i++;
  delay_ms(2000);
  sprintf(buffer," Der Wert ist %i ",value);
  //sprintf(buffer,"## Der Wert ist %2.2f",value);
  len = strlen(buffer);
  uart_send(buffer, len); //sende chararray mit x zeichen

 }

Der Programmauschnitt funktioniert mit den int - Werten aber nicht den

auskommentierten float Varablen. Ich bekomme keine Fehlermeldung beim
Compilieren und die Ausgabe funktioniert soweit aber an der Stelle wo
die Zahl ausgegeben werden sollte steht nur Misst. Mache ich etwas
falsch?

Danke!!!

Re: ATmega16, WinAVR und float  Beitrag melden
Autor: mthomas
Datum: 04.11.2004 20:05

------------------------------------------------------------------------ 
--------

Floating point printf libs einbinden, vgl. Kommentare im WinAVR
Beispiel-makefile (PRINTF_LIB...). (die Foren-Suche haette geholfen).

Re: ATmega16, WinAVR und float  Beitrag melden
Autor: Thomas M - Athomit-online.de
Datum: 04.11.2004 20:46

------------------------------------------------------------------------ 
--------

Hi,

das ist meine Fehlermeldung des Compilers nach dem ich das Makefile
geändert habe:

avr-gcc -mmcu=atmega16        -I. -g -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=test.o  -std=gnu99 test.o   --output
test.elf   RINTF_LIB =   -lm
avr-gcc: RINTF_LIB: No such file or directory

So habe ich das eingebunden, ich weiss sonst nicht wie ich das machen
soll:

# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $PRINTF_LIB = $(PRINTF_LIB_FLOAT)
$(SCANF_LIB)

Danke!!!
$(MATH_LIB)

Re: ATmega16, WinAVR und float  Beitrag melden
Autor: Chris
Datum: 04.11.2004 21:27

------------------------------------------------------------------------ 
--------

Warum benutzt du nicht das Programm mfile, das bei WinAVR dabei ist?

Du scheinst nämlich das Makefile editieren zu wollen, ohne die
make-Anleitung jemals gesehen zu haben
(http://www.gnu.org/software/make/manual/html_chapter/make_toc.html).
Falls du nicht vorhast, sie zu wenigstens zu überfliegen, bist du mit
einem Programm wie mfile besser bedient.

> LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $PRINTF_LIB = $(PRINTF_LIB_FLOAT)
Das ist sinnlos. Zwei Zuweisungen in einer Zeile, das funktioniert
sicher nicht.
Lass die LDFLAGS, wie sie sind, und veränder nur die Variable
$PRINTF_LIB. Dann werden die Linker-Flags automatisch richtig befüllt.


btw:
> PORTA^=0xFF; //alles auf 1
Diese Zeile setzt bei PORTA nicht alles auf 1 (falls PORTA vorher
nicht 0 war). Richtig wäre eine simple Zuweisung:
PORTA = 0xFF; // alles auf 1

Dein Code entspricht:
PORTA = PORTA ^ 0xFF;
^ ist in C der Operator für bitweises XOR.

Re: ATmega16, WinAVR und float  Beitrag melden
Autor: Thomas M - Athomit-online.de
Datum: 05.11.2004 22:07
Dateianhang: Makefile (9.7kB, 23 Downloads)

------------------------------------------------------------------------ 
--------

Hi,

irgendwie kriege ich das nicht hin mit dem Makefile. Bei dem Programm
Mfile finde ich keine Option in der ich etwas mit Floating - Point
einbenden kann. Wenn mir jemand helfen könnte währe das wirklich sehr
nett.

Danke!

Re: ATmega16, WinAVR und float  Beitrag melden
Autor: Malte - m.marwedelonlinehome.de
Datum: 06.11.2004 12:02

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