Hallo, ich habe eine eclipse gestern installiert und das avr-plugin auch. Trotzdem gibt es Fehlermeldungen, die auf Probleme beim Finden der includes hideuten: --------------------------------------------------------------------- code --------------------------------------------------------------------- * #include "m328pdef.inc" */ int main(void) { #include "init.c" init(); return(0); } #define zeile 0x0F #define TASTPORT PORTA #define startwert 0x08; #define TP_DefReg DDRA unsigned char scan_kbd(){ unsigned char result = 0; unsigned char vari =0; if (vari == 0) vari = startwert; /* setze bei wraparound */ TASTPORT = vari; /* schreibe und adressiere Zeile */ delay (1); /*ms*/ result = TASTPORT; /*lese und hole Spalte/Zeilen index*/ vari = (vari & zeile)/2; return(result); } ------------------------------------------------------------------ Ergebnisse: -------------------------------- 16:22:09 **** Incremental Build of configuration Debug for project TestAVR **** make all Building file: ../scan_kbd.c Invoking: Cross GCC Compiler gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"scan_kbd.d" -MT"scan_kbd.o" -o "scan_kbd.o" "../scan_kbd.c" ../scan_kbd.c: In function ‘scan_kbd’: ../scan_kbd.c:3:18: error: ‘PORTA’ undeclared (first use in this function) subdir.mk:24: recipe for target 'scan_kbd.o' failed #define TASTPORT PORTA ^ ../scan_kbd.c:14:2: note: in expansion of macro ‘TASTPORT’ TASTPORT = vari; /* schreibe und adressiere Zeile */ ^~~~~~~~ ../scan_kbd.c:3:18: note: each undeclared identifier is reported only once for each function it appears in #define TASTPORT PORTA ^ ../scan_kbd.c:14:2: note: in expansion of macro ‘TASTPORT’ TASTPORT = vari; /* schreibe und adressiere Zeile */ ^~~~~~~~ ../scan_kbd.c:15:2: warning: implicit declaration of function ‘delay’ [-Wimplicit-function-declaration] delay (1); /*ms*/ ^~~~~ make: *** [scan_kbd.o] Error 1 16:22:10 Build Failed. 3 errors, 1 warnings. (took 312ms) ------------------------------------------------------------- Anscheinend ist die Installation nicht vollständig. Ich würde nun gerne wissen, was noch getan werden muss, um dieses zu ändern. Grüsse Robert
Das erste include scheint irgendwie auskommentiert zu sein. Das zweite gehört nach oben! Includes immer vor Programmcode, sonst gibt's auf Dauer ein Chaos.
Jedes, aber auch wirklich jedes avr-gcc-Programm benötigt das include avr/io.h Oliver
ich habe das include entkommentiert und geändert und avr/io.h eingefügt. Ergebnis: ------------------------------------------------------------ .equ SPDR6 = 6 ; SPI Data Register bit 6 ^~~~~~~~ ../m328pdef.inc:695:18: error: unknown type name ‘SPI’ .equ SPDR7 = 7 ; SPI Data Register bit 7 ^~~ ../m328pdef.inc:695:27: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Register’ .equ SPDR7 = 7 ; SPI Data Register bit 7 ^~~~~~~~ ../m328pdef.inc:697:3: error: expected declaration specifiers before ‘SPSR’ ; SPSR - SPI Status Register ^~~~ ..... MOD: zigtausend ähnliche Fehlermeldungen glöscht ..... .equ INT_VECTORS_SIZE = 52 ; size in words ^~~~ ../m328pdef.inc:959:38: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘words’ .equ INT_VECTORS_SIZE = 52 ; size in words ^~~~~ ../main.c:3:10: fatal error: avr/io.h: Datei oder Verzeichnis nicht gefunden #include <avr/io.h> ^~~~~~~~~~ compilation terminated. make: *** [main.o] Error 1 18:22:16 Build Failed. 1319 errors, 4 warnings. (took 1s.70ms)
:
Bearbeitet durch Moderator
An Stelle von 6 zilliarden sinnlosen sich wiederholenden Fehlermeldungen könntest du ja mal dein Programm posten, und zwar komplett, und als Anhang. Oliver
rfr-mailbox@gmx.de schrieb: > ich habe das include entkommentiert und geändert und avr/io.h eingefügt. > Ergebnis: ...zigtausend Fehlermeldungen... Du hast eine Datei mit Assembler-Defines in ein C-Projekt eingebunden. Natürlich klatscht dir der Compiler zig Fehlermeldungen aufs Auge. Das ist, wie wenn dir einer die Waschmaschine auf Suaheli erklärt: du verstehst gar nichts, denn es ist nicht deine Sprache.
:
Bearbeitet durch Moderator
#include "m328pdef.inc" #include "init.c" #include <avr/io.h> #define zeile 0x0F #define TASTPORT PORTA #define startwert 0x08; #define TP_DefReg DDRA unsigned char scan_kbd(){ unsigned char result = 0; unsigned char vari =0; if (vari == 0) vari = startwert; /* setze bei wraparound */ TASTPORT = vari; /* schreibe und adressiere Zeile */ delay (1); /*ms*/ result = TASTPORT; /*lese und hole Spalte/Zeilen index*/ vari = (vari & zeile)/2; return(result); } int main(void) { init(); return(0); } -------------------------------------------------------------- Lothar M. schrieb: > rfr-mailbox@gmx.de schrieb: >> ich habe das include entkommentiert und geändert und avr/io.h eingefügt. >> Ergebnis: ...zigtausend Fehlermeldungen... > Du hast eine Datei mit Assembler-Defines in ein C-Projekt eingebunden. > Natürlich klatscht dir der Compiler zig Fehlermeldungen aufs Auge. das hat er anscheinend. Aber was muss ich einbinden, und wo im Linuxsystem stehen diese? Es interessiert mich, ob diese überhaupt da sind. Robert
https://de.m.wikibooks.org/wiki/C-Programmierung_mit_AVR-GCC/_Hello_World Schau dir mal das als Beispiel an. Grüsse, René
Und was soll das init.c? Das wird mehrfach kompiliert und der Linker wird meckern.
Das compilieren von ------------------------------------- #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> int main (void) { DDRB |= (1 << PB0); while(1) { PORTB ^= (1 << PB0); _delay_ms(500); } return 0; } --------------------------------------- ergab: ___------------------------------------- 19:31:00 **** Incremental Build of configuration Debug for project TestAVR **** make all Building file: ../main.c Invoking: Cross GCC Compiler gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.o" -o "main.o" "../main.c" ../main.c:3:10: fatal error: avr/io.h: Datei oder Verzeichnis nicht gefunden #include <avr/io.h> ^~~~~~~~~~ compilation terminated. subdir.mk:24: recipe for target 'main.o' failed make: *** [main.o] Error 1 19:31:00 Build Failed. 3 errors, 0 warnings. (took 325ms) -------------------------------------------------------------- was muss ich installieren und woher bekomme ich das? Gruss Robert
Das inti initialisiert die Hardware, die ich verwende. das Programm ist aber noch nicht so weit. Robert
Dann gehört da ein #include "init.h" mit dem Header hin, aber nicht die Implementierung der .c Datei. Ist den überhaupt eine aktuelle avr-gcc toolchain installiert? Das Plugin muss die nicht unbedingt mitbringen, das sind verschiedene Baustellen. Die Linux Distris haben oft ältere gcc Versionen im Gepäck und vermutlich auch keine für AVR.
Ich habe das letzte mal vor einigen Jahren programmiert, habe aber jetzt Zeit, um mich um eine Probleme (und deren Lösungen) zu kümmern. Allerdings habe ich keine Ahnung von Installationen. Es w#äre hilfreich, wenn du schreiben würdest, welche version aktuell ist und wie ich das herausfinde. Die gcc-avr Version scheint aktuell zu sein, ich habe diese aus der lint-Distri installiert. Die eclipse ist neu, Eclipse IDE for C/C++ Developers, Version: 2018-09 (4.9.0) Build id: 20180917-1800. Weiteres ist derzeit unklar. Gruss Robert
R. F. schrieb: > Ergebnis s.o. /usr/lib/avr/include/avr/io.h also -I/usr/lib/avr/include/ Grüsse, René
rfr-mailbox@gmx.de schrieb: > Invoking: Cross GCC Compiler > gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.o" > -o "main.o" "../main.c" gcc ist nicht der Cross Compiler, sondern der für den Rechner selbst.
C-Buch lesen! Man inkludiert keine .c Dateien! Dann lösen sich die Probleme dieses Beispiels auch von selber - wenn man die Materie durchdrungen hat. Das ist der beste Tip, den ich geben kann.
R. F. schrieb: > ich habe eine eclipse gestern installiert und das avr-plugin auch. > Trotzdem gibt es Fehlermeldungen, die auf Probleme beim Finden der Du brauchst natürlich auch noch einen avr-gcc. Oliver
So! nachdem ich einiges nachinstalliert habe, scheint es jetzt etwas besser zu laufen. Eine Frage habe ich aber noch: WO werden die PB, DDRA, PORTA usw eingebunden? Der Compiler findet das nicht. Gruss Robert
du musst den avr-gcc verwenden, somit muss der Compiler-Aufruf mit avr-gcc starten, nicht mit gcc
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.