-
Problem mit LCD
Hallo,
ich versuche schon seit einiger Zeit ein LCD anzusteuern. Es kommt folgender Fehler bei der dem Versuch das Programm zu compilieren:
Linking: main.elf
avr-gcc -mmcu=atmega8 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -Wundef -MMD -MP -MF .dep/main.elf.d main.o lcd.h --output main.elf -Wl,-Map=main.map,--cref -lm
main.o: In function `main':
main.c:15: undefined reference to `lcd_init'
main.c:22: undefined reference to `lcd_clrscr'
main.c:25: undefined reference to `lcd_puts'
main.c:28: undefined reference to `lcd_puts'
main.c:31: undefined reference to `lcd_gotoxy'
main.c:34: undefined reference to `lcd_putc'
make.exe: *** [main.elf] Error 1
Klingt fast so, als ob das Hauptprogramm die Routinen nicht findet
Außerdem zeigt das LCD nur die oberste Zeile mit schwarzen Kästchen an. Warum da zweite nicht?
Gruß Stefan
-
ich nehme mal an du benutzt die Peter Fleury lib?
Hast du die beiden Dateien richtig eingebunden? entweder im Makefile oder direkt in main.c
Ich binde sie immer direkt im main-file ein:
#include <lcd.h>
#include <lcd.c>
Wie das mit dem Makefile funktioniert kannst du dir in der Testdatei anschauen, die bei der lib dabei war.
-
LCD's mit hd44780 zeigen bei anlegen der Betriebsspannung immer die ERSTE Zeile mit kästchen an. Da im controller standard 1-Zeilen-Betrieb ist. Du musst es halt erst initialisieren.
Dass es die schwarzen balken anzeigt ist ein gutes Zeichen für die Funktionalität deines LCD ;-)
-
Man included keine *.c Dateien
-
@izaseba warum nicht?
macht das irgend einen Unterschied ob ich die Datei in meinem Hauptfile include oder ob ich sie ins Makefile schreibe?
-
Warum ?
1. Weil hier auch mal Leute mitlesen, die eventuell denken könnten, das wäre so richtig.
2. weil man nur Header includet, um dem entsprechendem Programm zu sagen, wieviel Speicher zu reservieren ist bei Funktion X oder Variablen Y. Die entsprechende *.c Datei wird später extra übersetzt(falls in Makefile angegeben) und zu dem fertigem Programm gelinkt.
3.Angenommen, Du hast Datei a.c, b.c und c.c, in c.c sind Funktionen drin, die von a.c und b.c gebraucht werden. Was passiert, wenn Du in a.c und b.c die c.c includest anstatt sie extra zu übersetzen und zu linken ?
Gruß Sebastian
-
@izaseba na dann, danke für den Hinweis, werd ich dann in Zukunft nicht mehr machen ;-)
war bei mir halt nie ein Problem, weil ich nur eine Hauptdatei hatte, wo oben alle anderen Seiten included wurden.
-
Danke für eure Hilfe. Hat mich sehr weiter gebracht.