atmega8 und lcd

Gast #1351923
Lesenswert?

sorry für den weitern fast unnötigen beitrag!
aber ich hab ein lcd modul mit dem üblichen kontroller
aber bei dem compiler (winavr) bekomm ich immer eine fehlermelung.
es geht überhaupt nicht um den anschluss am lcd sondern nur um das 
programm
sieht momentan folgendermaßen aus:

#include <stdlib.h>
#include <avr/io.h>
#include "D:\lcd\lcd.h"
int main(void)
{

    /* Initialisiere Display, Cursor aus */
    lcd_init(LCD_DISP_ON);

    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
    lcd_clrscr();

    /* String auf Display anzeigen */
    lcd_puts("Hello world.");

}
bekomm aber immer die Fehlermeldung

Compiling C: main.c
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -MMD -MP -MF 
.dep/main.o.d main.c -o main.o
In file included from 
c:/winavr-20090313/lib/gcc/../../avr/include/avr/sfr_defs.h:126,
                 from 
c:/winavr-20090313/lib/gcc/../../avr/include/avr/io.h:99,
                 from main.c:2:
./inttypes.h:232: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'typedef'
In file included from 
c:/winavr-20090313/lib/gcc/../../avr/include/avr/io.h:367,
                 from main.c:2:
c:/winavr-20090313/lib/gcc/../../avr/include/avr/fuse.h:243: error: 
expected '=', ',', ';', 'asm' or '__attribute__' before 'typedef'
In file included from D:\lcd\lcd.h:41,
                 from main.c:3:
c:/winavr-20090313/lib/gcc/../../avr/include/avr/pgmspace.h:215: error: 
expected '=', ',', ';', 'asm' or '__attribute__' before 'prog_int8_t'
make.exe: *** [main.o] Error 1


was hab ich falsch gemacht??

danke für die mühe
Gast #1351950
Lesenswert?

was ist das für eine lcdlib ..
wo is die her ...
kopiere diese einfach in dein projektverzeichniss ...
dann reicht ein #include "lcd.h"


dann macht man idealerweise

int main (void)
{
  //lcd init
  while(1)
   {
     // main loop
   }
}
#1351989
Lesenswert?

stev schrieb:
> ja das klappt ohne probleme!!
> aber was jetzt tun??

Jetzt nimmst du dieses Testprogramm her und ergänzt es sukzessive bis du 
bei deinem ursprünglichen Testprogramm bist oder der Fehler das erste 
mal wieder auftaucht.

Dein nächstes Testprogramm ist also
1
#include <stdlib.h>
2
#include <avr/io.h>
3

4
int main (void)
5
{
6
 while(1)
7
  {
8
  }
9
  return 0;
10
}

(Ein #include ist dazugekommen)

Wenn das kompiliert, kommt als nächstes
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include "D:\lcd\lcd.h"
4

5
int main (void)
6
{
7
 while(1)
8
  {
9
  }
10
  return 0;
11
}

etc.
Fehler muss man in kleinen Schritten suchen und nicht indem man 
100-tausend Dinge auf gut Glück in einem Rutsch verändert.
#1352095
Lesenswert?

stev schrieb:
> ja das klappt noch alles
> aber sobald ich den ersten befehl reihole sagt der
> das der den befehl nicht kennt, aber der müsste doch in
> lcd.h difiniert sein oder??
> z.b."lcd_clrscr();"

Wie lautet die genaue Fehlermeldung?

(und jetzt haben wir eine ganz andere Fehlermeldung als am Anfang)
#1352232
Lesenswert?

stev schrieb:
> so blaub jetzt hats geklappt
> ich musste doch noch genauso
> #include "D:\lcd\lcd.c"
> anhängen oder?

Nein!
Was ist bitte so schwer daran, im AVR-Studio auf 'Source Files' zu 
klicken, dann rechte Maustaste 'Add Source Files' im Menü auswählen und 
dann dem Studio dieses 1 File lcd.c zu zeigen.
#1352240
Lesenswert?

Vlad Tepesch schrieb:
> ich vermute mal, dass es weniger an dem Laufwerksbuchstaben, als viel
> mehr an den Backslashes liegt.

Auch das nicht.
Das hier ist die Spezifikation eines Dateinamens für den Präprozessor. 
Das hat nichts mit der Sonderstellung des Backslash in Strings zu tun.
Der kann so angegeben werden, wie er auf dem Zielsystem üblich ist. Die 
C-Spez hält sich da raus, wie der auszusehen hat. (Sonst müsste der 
C-Standard auch noch eine Definition beinhalten, wie ein Dateisystem in 
einer bestimmten Notation aussehen muss. Das würde wiederrum 
Schwierigkeiten bedeuten, wie man eine bestimmte Notation des 
tatsächlichen Systems in diese Notation überführt. Nicht alle 
Dateisysteme beruhen darauf, dass es eine einzige Root gibt, in die 
alles andere gemountet wird).
Wenn du willst, kannst du das auf einem VAX-VMS System auch in 
VMS-Notation angeben
1
#include "SYS$SYSTEM:[user.subverzeichnis.data]lcd.h;25"

und der Präprozessor muss das akzeptieren.
Gast #1352598
Lesenswert?

am besten für ein projekt einen neuen ordner erstellen

dort rein werden alle neuen .c und .h files reinkopiert oder erstellt


wenn man die libs  woanders aufhebt und dort in einem anderen projekt 
mal was ändert .... na mahlzeit


es müsen in dem ordner dann die main.c , lcd.c und lcd.h sein


im avr studio hat man dafür das schöne AVR GCC fenster
bei source files kommen alle .c dateien rein
bei Header files alle .h

rechtsklick .. ADD  existing header file oder eben create wenn man 
selbst eine schreiben will
Gast #1354173
Lesenswert?

danke für eure ratschläge!
wie ihr sicher bemerkt habt programmiere ich noch nicht lange in c.
hab aber schon mit assembler erfahrung und hatte gedacht ich könnte 
einfach mal wechseln.
hatte mit dem komischen programmers notepad programmiert habe dann nach 
den foreneinträgen doch zu avrstudio gewechselt!
und jetzt klappt auch das lcd.

nur noch einige fragen zu den befehlen CD_MOVE_DISP_LEFT
wie setze ich den genau ein?

oder wie sage ich dem controller, dass er 1sekunde warten soll?

das wärs dann auch schon
danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren