Hallo, wollte einmal testweise ein LCD an einen uC anschließen und ein wenig "spielen"/Erfahrung sammeln. Habe mir dazu das Beispiel von Peter Fleury besorgt und die Anpassungen vorgenommen. => Läuft perfekt Dann habe ich die lcd.c. und lcd.h in "mein" Verzeichnis kopiert und selber etwas mit dem Display gemacht. => Läuft perfekt Nun das Problem: der Übersichtlichkeit halber, würde ich gerne zum Schluss folgende Verzeichnisstruktur haben: C:\AVR_Projekte\Test (Hauptverzeichnis/Root) C:\AVR_Projekte\Test\test.c (enthält die main Funktion) C:\AVR_Projekte\Test\test.h C:\AVR_Projekte\Test\Makefile C:\AVR_Projekte\Test\LCD\lcd.c C:\AVR_Projekte\Test\LCD\lcd.h d.h. ich würde externe Quellen/Dateien gerne aus meinem Hauptverzeichnis "raus" haben und in ein separates Unterverzeihcnis packen, so dass ich später auch noch weiß, was zusammengehört. Dazu habe ich in der test.c folgendes eingefügt: #include "LCD/lcd.h" und im Makefile den SRC Zweig erweitert: SRC = $(TARGET).c SRC += lcd.c Aber irgendwie geht das Display nun nicht mehr :=( Fehlermeldungen erhalte ich dummerweise auch nicht. Deshalb die Frage: Was muss alles gemacht werden um Dateien aus einem Unterverzeichnis einzubinden? Gruß, Björn
Der Include ist so ok. Aber im Makefile solltest du schon auch mitteilen, dass lcd.c sich jetzt in einem Subverzeichnis befindet: SRC = $(TARGET).c lcd/lcd.c Ob in einem Makefile die Sache mit += erlaubt ist, weiss ich jetzt gar nicht. Schon lange nicht mehr gemacht.
Hallo Björn Mich wundert's, dass Du da keine Fehlermeldung bekommst. Wenn im Makefile lcd.c als Quelle steht, dann sucht Make die im gleichen Verzeichnis. Man kann zwar Headerdateien (*.h) über den Schalter -I dem Compiler aus anderen Verzeichnissen anmelden. Jedoch kenne ich keine Ausführungen, dass das auch mit Make ginge. Wirf einfach alles, was zum Programm gehört in ein DIR, das tut ja auch nicht so weh. Außerdem erspart's Verwirrung, wenn mann in einer *.h portspezifische Einstellungen vornimmt (oft bei lcd.h). Die passen beim nächsten Prog meist nicht mehr.
Moin, die Sache mit += ist unter http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Quellcode-Dateien_einstellen angegeben und sah mir "schöner" aus, da ich so einfacher sehe wie viele Dateien hinzugekommen sind. Die fehlende Fehlermeldung beruht wohl auf mir: hatte die lcd.c und .h einfach wieder ins Hauptverzeichnis kopiert, da ich "ruhe" haben wollte. Nun geht es aber. Danke, Björn
Hi, zu früh gefreut: nach einem make clean gitbt es nun eine Fehlermeldung: FATAL: can't create /LCD/lcd.o: No such file or directory make.exe: *** [/LCD/lcd.o] Error 1 Gibt es eigentlich eine Alternative zu WinAVR? Das Programmers Notepad kann mich nicht so richtig überzeugen (wie brennt ihr z.B. einfach die Fuses, jedes mal eine Dos Box öffnen und avrdude Befehle per Hand eingeben?), eine Datei im Projekt mal schnell umbenennen: Fehlanzeige usw. Na ja, wäre schon glücklich wenn es wenigstens mit Unterverzeichnissen klappen würde. Das geht bei jeder IDE im PC-Bereich... Björn
> /LCD/lcd.o
Durchsuch noch mal dein Makefile.
/LCD ist, da er mit einem / beginnt, ein absoluter Pfad.
Also von der Wurzel des Dateiverzeichnisses runter. Ich bin
mir aber sicher, dass du auf der Wurzel kein Verzeichnis namens
LCD hast. Das steckt irgendwo in einem Subpfad.
Der führende / muss weg. Der Pfad den du möchtest lautet
LCD/lcd.o
Das ist jetzt ein relativer Pfad. Relativ zum aktiven Verzeichnis
wird das Unterverzeichnis LCD benutzt um lcd.o zu speichern.
Hallo, Verzeichnisstruktur ist wie oben im ersten Beitrag angegeben. In der test.c steht bei den includes #include "lcd.h" im makefile steht auch "nur" SRC = $(TARGET).c SRC += LCD/lcd.c Den führenden / habe ich nicht davor gemacht, also so wie du es in deinem ersten Beitrag angegeben hast. Der ist automatisch immer (?) mit davor. Björn
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.