mikrocontroller.net

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


Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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_...

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

Autor: Ulf Rolf (roolf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ulf Rolf (roolf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.