mikrocontroller.net

Forum: Compiler & IDEs AVR+Gentoo+GCC->"device type not defined"


Autor: Johannes R. (wompy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,Moin

ich habe das Experiementierboard 1.5 von myAVR( 
http://www.myavr.de/shop/article.php?artDataID=2 ) und möchte nun unter 
Gentoo C-Code compilieren und übertragen.

Anbei befindet sich mein "Versuch" ein vorhandenes Makefile 
anzupassen,allerdings habe ich mit avrdude noch keine Verbindung 
zustande bekommen und möchte dazu PonyProg2000 benutzen.
Zunächst hab ich aber das Problem,den Code vernünftig zu kompilieren. 
Wenn ich mit dem Makefile "make all" ausführe,kriege ich folgende 
Fehler-Meldung:
sh: line 0: [: main: binary operator expected
avr-gcc -gstabs   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99  -Wl,-Map=main .map,--cref    -lm  main.c   -o main
avr-gcc: .map,--cref: Datei oder Verzeichnis nicht gefunden
In Datei, eingefügt von main.c:1:
/usr/lib/gcc/avr/3.4.6/../../../../avr/include/avr/io.h:356:6: Warnung: #warning "device type not defined"
main.c: In function `main':
main.c:5: Fehler: »DDRB« nicht deklariert (erste Benutzung in dieser Funktion)
main.c:5: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
main.c:5: Fehler: für jede Funktion in der er auftritt.)
main.c:6: Fehler: »PORTB« nicht deklariert (erste Benutzung in dieser Funktion)
make: *** [main] Fehler 1

Die zugehörige main.c sieht wie folgt aus:
#include "avr/io.h"

int main (void){

DDRB = 0xff;
PORTB = 0x03;
while(1){

}
return 0;
}

Ich habe mir über Portage das crossdev-Paket gezogen, crossdev -t avr 
durchgeführt und noch "emerge cross-avr/binutils" sowie "emerge 
cross-avr/avr-libc".

Bin absoluter Anfänger-also nicht wundern, wenn es sich um einen plumpen 
Fehler handelt;-)

Vielen Dank im Voraus!
mfg Johannes

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

>/usr/lib/gcc/avr/3.4.6/../../../../avr/include/avr/io.h:356:6: Warnung: >#warning 
"device type not defined"

immer schön die warnungen beachten. dir fehlt die angabe deines 
mikrocontrollers beim aufruf des compilers. ohne weiß er gar nicht, was 
sache ist und das einbinden der header-files der avr-libc geht 
entsprechend daneben.

-mmcu=<type_of_mcu>

muss beim aufruf angegeben werden. bei dir müsste atmega8 oder mega8 
rein, probier mal eins von beide aus. eher ersteres, vermute ich, bei 
mir ist das schema jedenfalls so.
bye kosmo

Autor: Johannes R. (wompy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort!
avr-gcc main.c -mmcu=atmega8
Kompiliert in der Tat den Quelltext ohne Probleme. Ich hab nur gedacht, 
ich muss die ganzen anderen Optionen und Flags, die im Makefile gesetzt 
werden auch beachten und ich hab "eigentlich" die betreffende Stelle 
angepasst:
# MCU name
MCU = atmega8

Ich hab nochmal die betreffenden Stellen rauskopiert,wie gesagt - ich 
versteh  leider noch nicht recht,wofuer die einzelnen Flags gesetzt 
werden,aber meiner Meinung nach sollte es so funktionieren...
# Increase verbosity level.  Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v

AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)

und
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
...aber vielleicht brauche ich das ja erstmal garnicht alles um erstmal 
etwas funktionierendes auf den Atmel zu brennen.
Wäre nett wenn sich das noch jmd anschauen könnte.
Vielen Dank im Voraus
Johannes

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ok, du hast dieses makefile.

mich irritiert ein wenig diese zeile:
>sh: line 0: [: main: binary operator expected
solltest du dir dein file nochmal anschauen.

dann solltest du dir anschauen, welche flags wofür sind.
die ganzen mit dem prefix "AVRDUDE" versehenen sind (eben) nur für das 
'brennen' per (na klar)avrdude gut. die haben nichts mit dem kompilieren 
zu tun.

für sämtliche anderen flags gibt es die sehr gute dokumentation des gcc.
http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/

im makefile sind üblicherweise die CFLASG die kompiler-flags, 
linkerflags entsprechnd die LDFLAGS.
der hinweis auf die doku gilt auch für make, falls da noch unklarheiten 
bestehen. einzelne details kann man sicher hier nachfragen.

bye kosmo

Autor: Johannes R. (wompy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kompilier das Ganze jetzt "von Hand". An das Makefile werd ich mich 
später mal rantrauen. Aber vielen Dank erstmal fuer Deine Hilfe!

Jo

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.