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
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 } }
mache mal neues projekt dann #include <avr/io.h> int main (void) { while(1) { } return 0; } das muss der zumidnest ohne fehler compilieren
ja das klappt ohne probleme!! aber was jetzt tun?? hab extra noch mal winavr neu instaliert mit aktuellsten version...
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.
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();"
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)
>aber der müsste doch in >lcd.h difiniert sein oder?? >z.b."lcd_clrscr();" Nö, die sind in lcd.c definiert. Die muß man zum Projekt hinzufügen.
und wo find ich die datei? und wie füge ich die dann hinzu? sorry aber kapier das grad nicht
stev schrieb: > und wo find ich die datei? Na, wo wohl? Auf dem Verzeichnis auf dem du die Fleury Lib entpackt hast. Bei dir wohl d:\lcd\lcd.c wenn man davon ausgehen kann, dass der Pfad beim #include richtig ist. > und wie füge ich die dann hinzu? http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F
stev schrieb: > ja jetzt kommt: > > undefined reference to `lcd_puts' Füg endlich die lcd.c in dein Projekt ein.
Das hier sieht komisch aus: #include "D:\lcd\lcd.h" Ich glaube nicht, dass ein Laufwerksbuchstaben dort richtig Interpretiert wird.
so blaub jetzt hats geklappt ich musste doch noch genauso #include "D:\lcd\lcd.c" anhängen oder? auf jedenfall diesmal ohne fehlermeldung danke schön
Sourcefiles werden nicht includiert!!!!!! Die werden separat Compliliert und nur die Interfaces werden per include bekannt gegeben. Und einen Laufwerksbuchstaben habe ich nochn in keinem C-Projekt gesehen!!!!
ich vermute mal, dass es weniger an dem Laufwerksbuchstaben, als viel mehr an den Backslashes liegt. BtW: Und Bibliohekspfade sollten dem compiler und nicht dem Quelltext mitgegen werden
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.
Dieter Engelhardt schrieb: > Das hier sieht komisch aus: #include "D:\lcd\lcd.h" > > Ich glaube nicht, dass ein Laufwerksbuchstaben dort richtig > Interpretiert wird. Man macht es zwar nicht so, aber grundsätzlich ist das kein Problem.
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.