-
        

+ Antworten
Ergebnis 1 bis 9 von 9

Thema: Probleme mit dem Makefile

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    27
    Beiträge
    116

    Probleme mit dem Makefile

    Anzeige

    GearBest Black Friday Verbraucherelektronik Promotion
    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
    Code:
    >
    "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.
    Angehängte Dateien Angehängte Dateien
    Geändert von Filou89 (09.10.2011 um 22:57 Uhr) Grund: Bild verwirrend, durch neues ersetzt(Post 3)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.789
    @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.
    Gruß
    Dirk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    27
    Beiträge
    116
    @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:
    Klicke auf die Grafik für eine größere Ansicht

Name:	Ordnerstruktur.jpg
Hits:	6
Größe:	29,1 KB
ID:	20259

    könnte es sein, dass mit der Definition in den Header-Dateien etwas nicht stimmt?
    Mein Header File beginnt so:
    Code:
    #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:

    Code:
    > "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

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    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.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    27
    Beiträge
    116
    Hallo Stefan,
    Reicht diese zeile nicht aus?
    Code:
     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

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    53
    Beiträge
    5.768
    Blog-Einträge
    8
    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

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    27
    Beiträge
    116
    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

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Filou89 Beitrag anzeigen
    Reicht diese zeile nicht aus?
    Code:
     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.

    Zitat Zitat von Filou89 Beitrag anzeigen
    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.
    MfG
    Stefan

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    27
    Beiträge
    116
    OK, danke. Ich glaube ich habe die Stelle gefunden.
    Code:
    # 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

+ Antworten

Ähnliche Themen

  1. makefile?
    Von roboter14 im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 15.05.2010, 12:04
  2. MakeFile
    Von simsbigfreak im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 11.01.2009, 16:04
  3. Makefile
    Von -Hunter- im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 30.12.2008, 21:28
  4. Linux - Makefile -> Probleme?!
    Von axel88 im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 12.01.2008, 19:04
  5. Probleme mit Makefile!
    Von Roberto im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 29.06.2007, 19:33

Stichworte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •