Forum: Compiler & IDEs LCD Ansteuerung und Einbindung lcd.c und lcd.h


von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin am verzweifeln. Seit 2 Wochen bin ich stolzer Besitzer des MyAVR 
Boards MK2 mit LCD-AddOn. In letzter Zeit habe ich viel gemacht und seit 
einer Woche versuche ich jetzt jeden Tag, das LCD anzusteuern. Hab mir 
dabei auch schon zig lcd.c und lcd.h Files runtergeladen.

Die Anleitung zu dem LCD-Addon findet ihr hier:
http://www.myavr.info/download/produkte/lcd/techb_lcd_de_en.pdf

Mit einem von MyAVR angebotenen Programm (für Windows) kann ich die 
Test-Hex-Datei auf den MC brennen und der zeigt das dann auch auf dem 
LCD  an. Aber mir nützt ja die Hex-Datei nichts, will ja in C 
programmieren. Wollt damit auch nur sagen, dass das LCD an sich geht.

Ich betreibe das ganze auf einem Mac mit Xcode und schreibe dort in C. 
Wenn ich dort das Programm brennen möchte, dann kommt als Fehler

Command/bin/user/make failed with error code 2

Mache ich das ganze in Terminal bekomme ich folgenden Fehler, der mehr 
Aufschluss verdeutlicht:

Mac-Pro:firmware Patrick$ make
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=atmega8 -o main.elf main.o
main.o: In function `main':
main.c:(.text+0x8): undefined reference to `lcd_init'
main.c:(.text+0xa): undefined reference to `lcd_on'
main.c:(.text+0xc): undefined reference to `lcd_clear'
main.c:(.text+0x12): undefined reference to `lcd_write_s'
make: *** [main.elf] Error 1

Ich habe die Dateien mal angehängt. Ich habe mich auch schon durch die 
komplette Netzwelt gelesen, habe aber mein Problem nicht lösen können. 
Hab auch das Makefile so abgeändert, dass in der Zeile SRC auch die 
lcd.c mit drinhängt. Aber auch wenn die Datei im selben Ordner ist, dann 
schaffe ich es nicht, das Ding zum laufen zu bekommen.

Ich hoffe ich habe euch jetzt alle Informationen gegeben, die ihr 
brauchen könnt, um mir zu helfen. Würde mich auf jeden fall mal 
freuen!!! Vielen, vielen Dank und eine gute Nacht noch

Patrick

von Ulf R. (roolf)


Lesenswert?

Patrick schrieb:

> avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=atmega8 -o main.elf main.o

In dieser Zeile sollen alle Teilmodule zusammengelinkt werden, es fehlt 
am Ende aber das Object-File "lcd.o". Vermutlich hat Dein Makefile an 
dieser Stelle eine Variable, in der alle Object-Files eingetragen werden 
müssen.

von Patrick (Gast)


Lesenswert?

DU GOTTT!!!! Danke Danke Danke!

Habs unter Objects eingetragen und jetzt funktionierts.

Was ist denn der unterschied zwischen der Dreickklammer <> und "" bei 
include?

#include <avr/io.h>
#include "lcd.h"



und muss die Zeile

SRC = $(TARGET).c
SRC += lcd.c

mit rein?


Vielen Dank für die schnelle Hilfe! Da wär ich bei ewigem Suchen nicht 
drauf gekommen!Danke

Viele Grüße
Patrick

von Karl H. (kbuchegg)


Lesenswert?

Patrick schrieb:

> Was ist denn der unterschied zwischen der Dreickklammer <> und "" bei
> include?

C-Buch

es werden andere Pfadlisten zum Aufsuchen von Include Files, die nicht 
auf dem Verzeichnis des includierenden *.c Files liegen, benutzt.

"" verwendet man bei Include-Files, die zum Projekt gehören.
<> verwendet man bei Include-Files, die zum 'System' gehören.

Der Compiler benutzt für beides meistens Listen von Pfaden, die er der 
Reihe nach abklappert und nachsieht, ob dort das Include-File vielleicht 
vorliegt und er es von dort includieren kann.

> und muss die Zeile
>
> SRC = $(TARGET).c
> SRC += lcd.c
>
> mit rein?

klar.
Du willst ja auch haben, dass lcd.c mitcompiliert wird.

> Da wär ich bei ewigem Suchen nicht
> drauf gekommen!Danke

Immer rückwärst anfangen:
Schau dir das Kommando an, welches ausgeführt wird. In deinem Fall ist 
es das linken mehrere Einzelteile zum kompletten Programm. Dann 
entscheide ob die Angaben vollständig sind oder ob da was fehlt (in 
deinem Fall taucht lcd.o nicht auf, obowhl es vorkommen müsste, weil 
dort ja die Implementierungen der fehlenden Funktionen drinn ist) und 
sieh im Makefile bei der entsprechenden Rgel nach, wie das Kommando 
zusammengebaut wird.

von Ulf R. (roolf)


Lesenswert?

Patrick schrieb:

> Was ist denn der unterschied zwischen der Dreickklammer <> und "" bei
> include?

Der Suchpfad.  Näheres kann man z.B. mit "info cpp" nachlesen.

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.