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


von Johannes R. (wompy)


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:
1
sh: line 0: [: main: binary operator expected
2
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
3
avr-gcc: .map,--cref: Datei oder Verzeichnis nicht gefunden
4
In Datei, eingefügt von main.c:1:
5
/usr/lib/gcc/avr/3.4.6/../../../../avr/include/avr/io.h:356:6: Warnung: #warning "device type not defined"
6
main.c: In function `main':
7
main.c:5: Fehler: »DDRB« nicht deklariert (erste Benutzung in dieser Funktion)
8
main.c:5: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
9
main.c:5: Fehler: für jede Funktion in der er auftritt.)
10
main.c:6: Fehler: »PORTB« nicht deklariert (erste Benutzung in dieser Funktion)
11
make: *** [main] Fehler 1

Die zugehörige main.c sieht wie folgt aus:
1
#include "avr/io.h"
2
3
int main (void){
4
5
DDRB = 0xff;
6
PORTB = 0x03;
7
while(1){
8
9
}
10
return 0;
11
}

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

von kosmonaut pirx (Gast)


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

von Johannes R. (wompy)


Lesenswert?

Danke für die schnelle Antwort!
1
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:
1
# MCU name
2
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...
1
# Increase verbosity level.  Please use this when submitting bug
2
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
3
# to submit bug reports.
4
#AVRDUDE_VERBOSE = -v -v
5
6
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)

und
1
# Combine all necessary flags and optional flags.
2
# Add target processor to flags.
3
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
4
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

von kosmonaut pirx (Gast)


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

von Johannes R. (wompy)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.