Forum: Compiler & IDEs avr eclipse atmega128


von andes (Gast)


Lesenswert?

Hallo zusammen,

ich versuche, ein LCD-Display in eclipse mit avr in c und einem Atmega 
128 zum Laufen zu bekommen. Ich verwende die Header-Datei von P. Fleury. 
Aber irgendwie gibt es Probleme beim Kompilieren der Datei. Hier meine 
main.c:

/*
 * main.c
 *
 *  Created on: 17.05.2015
 *      Author: arubuntu
 */
#include <avr/io.h>
//#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd.h"

int main(void)
{
  _delay_ms(10);
/* initialize display, cursor off */
lcd_init(LCD_DISP_ON);

/* clear display and home cursor */
lcd_clrscr();

/* put string to display (line 1) with linefeed */
lcd_puts("LCD Test Line");

while(1)
{


}

return 0;
}


Der Kompiler sagt mir, dass es kein Verweis auf lcd_init, lcd_clrscr und 
lcd_puts gibt.

Wenn ich in den Einstellungen unter AVR C Linker die Library von Hand 
und den dazugehörigen Pfad eintrage kommt dann folgende Fehlermeldung:

/usr/lib/gcc/avr/4.8.2/../../../avr/bin/ld: cannot find -llcd.h

kennt jemand das Problem ?

von Bastler (Gast)


Lesenswert?

Welche Library hat denn den Namen "lcd.h"? Lib's hören auf *.a".
P.F.-LCD besteht doch aus "lcd.h" und "lcd.c".
Beide einfach in's Source-Verzeichnis und CDT/AVR-Plugin erledigen den 
Rest. In kurz: "Build".

von andes (Gast)


Lesenswert?

ah dacht ich mir. ich habe die lcd.h als include eingebunden. Aber 
gerade da sagt mir eclipse dann dass es ein nicht definierter Verweis 
auf

../src/main.c:16: Nicht definierter Verweis auf `lcd_init'
../src/main.c:28: Nicht definierter Verweis auf `lcd_clrscr'
../src/main.c:28: Nicht definierter Verweis auf `lcd_puts'

ist

von andes (Gast)


Lesenswert?

ah, mir fehlt wahrscheinlich noch die lcd.c

von andes (Gast)


Lesenswert?

andes schrieb:
> ah, mir fehlt wahrscheinlich noch die lcd.c

wenn ich die lcd.c jetzt einbinde kommt eine Meldung "Mehrfachdefinition 
innerhalb der geschweiften Klammern von lcd_init(), usw

von andes (Gast)


Lesenswert?

Jetzt habe ich es hinbekommen, aber ich glaube, die folgende 
Schreibweise ist ned ganz richtig:

  _delay_ms(10);
/* initialize display, cursor off */
lcd_init(LCD_DISP_ON);

/* clear display and home cursor */
lcd_clrscr();

/* put string to display (line 1) with linefeed */
lcd_puts("********************");
lcd_puts("*     Display      *");
lcd_puts("*                  *");
lcd_puts("********************");

Genauso hätte ich glaube fast alles in eine Zeile schreiben können. Auf 
dem Display wird es richtig angezeigt, aber wie müßt ich es machen, 
damit auch immer nur eine Zeile beschrieben wird und nicht gleich die 
nächste, wenn ich mal zuviele Zeichen eingebe ??

von Bastler (Gast)


Lesenswert?

Was verstehst du unter "einbinden"? Das darf nicht mit #include 
geschehen, nur die ".h"-Datei wird inkludiert. Liegt "lcd.c" im 
Source-Folder, dann werden alle ".c"-Dateien übersetzt und vom Linker 
gebunden. Doppeldefinition deutet auf "c-File inkludiert" hin, dann gibt 
es die LCD-Funktionen in 2 Objekt-Files.

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.