PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Probleme mit dem Makefile



Filou89
09.10.2011, 16:21
Hallo Zusammen
Ich programmiere seit kurzem einen AT90USBKEY 1287.

Dazu programmiere ich in C mit dem Programmers Notepad.
Da ich bereits Erfahrungen mit dem RP6 habe, dache ich mir, ich kopiere das Makefile einfach mal und mache dann die nötigen anpassungen.
Soweit so gut!
Leider wird der zusätzliche SRC - Pfad offenbar nicht erkannt. Dort Wären alle Libraries (.c und .h) Files gespeichert.
Momentan wird das Projekt nur erstellt, wenn die .h und .c Libraries im selben Ordner sind wie das main-File.
Das verwendete Makefile sowie ein Bild der Ordnerstruktur und die PN-Fehlermeldung liegen bei.
Ich hoffe, mir kann jemand weiterhelfen.
MfG
Filou

>
"make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: LedAndButton.c
avr-gcc -c -mmcu=at90usb1287 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./LedAndButton.lst -std=gnu99 -MMD -MP -MF .dep/LedAndButton.o.d LedAndButton.c -o LedAndButton.o
LedAndButton.c:1:21: error: AT90Lib.h: No such file or directory
LedAndButton.c: In function 'main':
LedAndButton.c:26: error: 'DDRD' undeclared (first use in this function)
LedAndButton.c:26: error: (Each undeclared identifier is reported only once
LedAndButton.c:26: error: for each function it appears in.)
LedAndButton.c:26: error: expected ';' before 'SET_BIT4'
LedAndButton.c:27: error: expected ';' before 'SET_BIT5'
LedAndButton.c:28: error: expected ';' before 'SET_BIT6'
LedAndButton.c:29: error: expected ';' before 'SET_BIT7'
LedAndButton.c:34: error: 'PORTD' undeclared (first use in this function)
LedAndButton.c:34: error: expected ';' before 'SET_BIT4'
LedAndButton.c:36: error: expected ';' before 'CLEAR_BIT4'
LedAndButton.c:38: error: expected ';' before 'SET_BIT7'
LedAndButton.c:40: error: expected ';' before 'CLEAR_BIT7'
LedAndButton.c:42: error: expected ';' before 'SET_BIT5'
LedAndButton.c:44: error: expected ';' before 'CLEAR_BIT5'
LedAndButton.c:46: error: expected ';' before 'SET_BIT6'
LedAndButton.c:48: error: expected ';' before 'CLEAR_BIT6'
make.exe: *** [LedAndButton.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:00

Ordnerstruktur:

[EDIT2]
Fehlerhaftes Bild entfernt

[EDIT]
Im Unterordner AT90Lib ist ein Ordner AT90base vorhanden. Darin sind die Libraries gespeichert.

Dirk
09.10.2011, 20:30
@Filou89:
Dein Main liegt also im Ordner "AT90USBKEY".
Im make ist AT90_LIB_PATH = ../../AT90Lib.
Daher sucht der Compiler den Ordner AT90Lib 2 Ebenen (../../) höher (also in "Atmel Programme"). Da gibt es ihn aber nicht, sondern er ist ein Unterordner von "AT90USBKEY_20110811".
Alle anderen Lib-Ordner werden daher auch nicht gefunden.

Filou89
09.10.2011, 22:55
@Dirk
Tut mir leid. Das Foto, das ich hochgeladen habe, führt nur zu verwirrung, da es nicht alles zeigt! Das ist mein Fehler!
hier nun das Foto, das die ganze Wahrheit zeigt:
20259

könnte es sein, dass mit der Definition in den Header-Dateien etwas nicht stimmt?
Mein Header File beginnt so:


#ifndef AT90LIB_H
#define AT90LIB_H


#include (...)
(...)
#endif


Wenn ich im Makefile nämlich den Pfad absichtlich falsch mache, also AT90_LIB_PATH = ../../../AT90Lib oder ebenfalls bei AT90_LIB_PATH = ../AT90Lib git es diese Meldung:



> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

make.exe: *** No rule to make target `LedAndButton.elf', needed by `elf'. Stop.

> Process Exit Code: 2
> Time Taken: 00:01



Grüsse und guten Start in die neue Woche
Filou

sternst
09.10.2011, 23:20
Wie soll der Compiler die Header-Datei in AT90_LIB_PATH auch finden, wenn du ihm überhaupt nicht mitteilst, dass er dort auch suchen soll.

Filou89
10.10.2011, 08:36
Hallo Stefan,
Reicht diese zeile nicht aus?

SRC += $(AT90_LIB_PATH)/AT90base/AT90Lib.c

Wie würdest du es denn schreiben? Ich kenne mich mit den Makefiles nicht sonderbar gut aus.
Danke für die Hilfe,
Filou

radbruch
10.10.2011, 09:13
Hallo

Gleich vorweg: Mit Makefiles kenne ich mich leider auch nicht aus.

Wenn "DDRD" nicht gefunden wird, dann wurde io.h, und damit auch die kontrollerspezifische Beschreibung der Hardware ioxxx.h, nicht eingebunden. Möglicherweise stimmt der Kontrollertyp nicht in "-mmcu=at90usb1287"

In meiner Installation (unter C:\WinAVR\avr\include\avr) befindet sich eine Datei Namens "iousb1287.h", richtiger Kontroller, aber ohne "90". Vielleicht muss man die in "io90usb1287.h" umbenennen?

Oder der Kontroller hat gar keinen Port D ...

Zu: "LedAndButton.c:26: error: expected ';' before 'SET_BIT4'"

Irgendwo kurz vor oder in der Set_Bit/Clear_Bit-Geschichte fehlt ein ";".


Gruß

mic

Filou89
10.10.2011, 09:57
Hallo radbruch,
so wie ich das einschätze, kann das alles leider nicht sein. Wenn ich nämlich die selbstgemachten Lib's im gleichen Verzeichnis wie die LedAndButton.c Datei abspeichere, wird das Programm Ohne Fehlermeldung erstellt.
Die ";" Warnung kommt, weil die vorangehende Definition nicht gefunden wurde.
Ich kann sonst mal versuchen, das ganze Projekt hochzuladen, dann können alle üben. Dauert aber bis zum Abend.
MfG
Filou

sternst
10.10.2011, 10:57
Reicht diese zeile nicht aus?

SRC += $(AT90_LIB_PATH)/AT90base/AT90Lib.c Nein. Du hast den Fehler, weil er beim Übersetzen von LedAndButton.c den Header AT90Lib.h nicht findet. Dass es noch eine weitere Source-Datei gibt, die in einem anderen Ordner liegt, interressiert den Compiler beim Übersetzen von LedAndButton.c nicht die Bohne. Es interessiert ihn nicht nur nicht, er weiß es auch gar nicht. Jede Source-Datei wird separat und unabhängig von den anderen übersetzt.


Wie würdest du es denn schreiben? Ich kenne mich mit den Makefiles nicht sonderbar gut aus.Es gibt in deinem Makefile bereits eine vorbereitete Variable für deinen Fall. Du musst es nur durchsehen und die Kommentare lesen.

Filou89
10.10.2011, 12:35
OK, danke. Ich glaube ich habe die Stelle gefunden.


# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRAINCDIRS = $(AT90_LIB_PATH) $(AT90_LIB_PATH_OTHERS)


Danke für den entscheidenden Hinweis!

MfG
Filou