www.mikrocontroller.net

Forum: Compiler & IDEs ATmega16, WinAVR und float


Autor: Thomas M (Gast)
Datum:

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

Autor: mthomas (Gast)
Datum:

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

Autor: Thomas M (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Thomas M (Gast)
Datum:
Angehängte Dateien:

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

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwo gibt es dort eine Zeile mit "MATH_LIB = "
diese muss auf "MATH_LIB = -lm" gesetzt werden.

Autor: Thomas M (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mit diesem Makefile, das ich mit Mfile, erzeugt habe funktioniert meine
Ausgabe jetzt.

Vielen Dank!

Autor: NEELAMEGAM.P (Gast)
Datum:

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

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt

PRINTF_LIB = $(PRINTF_LIB_FLOAT)

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.