Ich erhalte folgende Fehlermeldungen: Build started 5.5.2010 at 17:40:16 avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT webcam-starter.o -MF dep/webcam-starter.o.d -c ../webcam-starter.c avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT clock.o -MF dep/clock.o.d -c ../clock.c avr-gcc -mmcu=atmega8 -Wl,-Map=webcam-starter.map webcam-starter.o clock.o -o webcam-starter.elf clock.o: In function `Start_Clock': D:\Elektronik\webcam-starter\webcam-starter\default/../clock.c:215: multiple definition of `row' webcam-starter.o:D:\Elektronik\webcam-starter\webcam-starter\default/../ webcam-starter.c:11: first defined here clock.o: In function `Start_Clock': D:\Elektronik\webcam-starter\webcam-starter\default/../clock.c:215: multiple definition of `sync' webcam-starter.o:D:\Elektronik\webcam-starter\webcam-starter\default/../ webcam-starter.c:11: first defined here clock.o: In function `Start_Clock': D:\Elektronik\webcam-starter\webcam-starter\default/../clock.c:215: multiple definition of `tmp_rise_hh' webcam-starter.o:D:\Elektronik\webcam-starter\webcam-starter\default/../ webcam-starter.c:11: first defined here clock.o: In function `Start_Clock': D:\Elektronik\webcam-starter\webcam-starter\default/../clock.c:215: multiple definition of `jumper' webcam-starter.o:D:\Elektronik\webcam-starter\webcam-starter\default/../ webcam-starter.c:11: first defined here clock.o:(.data+0xb): multiple definition of `rise_set' webcam-starter.o:(.data+0xb): first defined here clock.o:(.data+0xa): multiple definition of `timezone' webcam-starter.o:(.data+0xa): first defined here clock.o: In function `Start_Clock': D:\Elektronik\webcam-starter\webcam-starter\default/../clock.c:215: multiple definition of `tmp_rise_mm' webcam-starter.o:D:\Elektronik\webcam-starter\webcam-starter\default/../ webcam-starter.c:11: first defined here clock.o: In function `Start_Clock': D:\Elektronik\webcam-starter\webcam-starter\default/../clock.c:215: multiple definition of `rx_bit_counter' webcam-starter.o:D:\Elektronik\webcam-starter\webcam-starter\default/../ webcam-starter.c:11: first defined here clock.o:(.data+0x0): multiple definition of `seg7' webcam-starter.o:(.data+0x0): first defined here make: *** [webcam-starter.elf] Error 1 Build failed with 1 errors and 0 warnings... (clock.c:215 zeigt auf die Zeile "DCF77_INT_ENABLE();" aus Ulrich Radigs DCF77 Routine; Was hat die Zeile angestellt?) Was mache ich falsch? Die Forensuche ergab, dass wohl eine Datei mehrmals eingebunden wird. Aber wo? Webcam-starter.h wird in beiden C-files eingebunden, aber warum sollte das ein Problem sein? Nehme ich nun die Definitionen aus der *.h und setze sie an den Anfang einer *.c, kommen Fehlermeldungen aus der anderen *.c, dass Variablen undefiniert sind. Wäre fein, wenn ihr mir weiterhelfen könntet. Ich kenn mich, ist bestimmt nur eine idiotische Kleinigkeit.
:
Verschoben durch Moderator
Schlag mal das Wort "extern" in deinem C-Buch nach.
Danke erstmal, aber: mit extern volatile char jumper; extern char seg7[10]; extern unsigned char row; extern unsigned char sync; extern volatile char tmp_rise_hh; extern volatile char tmp_rise_mm; extern signed char timezone; extern unsigned char rise_set[24][4] = { {7,11,15,22}, {7,6,15,39}, {6,48,16,6}, {6,26,16,30}, {5,59,16,53}, {5,30,17,16}, {4,53,17,34}, {4,24,18,4}, {3,53,18,29}, {3,30,18,50}, {3,11,19,11}, {3,5,19,22}, {3,9,19,25}, {3,20,19,17}, {3,41,18,57}, {4,1,18,34}, {4,26,18,0}, {4,47,17,30}, {5,11,16,55}, {5,33,16,25}, {6,0,15,33}, {6,23,15,32}, {6,47,15,16}, {7,3,15,13} }; Bleiben die Meldungen: Build started 5.5.2010 at 18:42:17 avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT webcam-starter.o -MF dep/webcam-starter.o.d -c ../webcam-starter.c In file included from ../webcam-starter.c:4: ../webcam-starter.h:109: warning: 'rise_set' initialized and declared 'extern' avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT clock.o -MF dep/clock.o.d -c ../clock.c In file included from ../clock.c:4: ../webcam-starter.h:109: warning: 'rise_set' initialized and declared 'extern' avr-gcc -mmcu=atmega8 -Wl,-Map=webcam-starter.map webcam-starter.o clock.o -o webcam-starter.elf clock.o:(.data+0x0): multiple definition of `rise_set' webcam-starter.o:(.data+0x0): first defined here clock.o: In function `Start_Clock': D:\Elektronik\webcam-starter\webcam-starter\default/../clock.c:215: multiple definition of `rx_bit_counter' webcam-starter.o:D:\Elektronik\webcam-starter\webcam-starter\default/../ webcam-starter.c:19: first defined here make: *** [webcam-starter.elf] Error 1 Build failed with 1 errors and 2 warnings... Warum meckert er denn jetzt da?
Als extern deklarierte Variablen können nicht gleichzeitig initialisiert werden. Du musst die Variable in genau einem File definieren (also ohne extern hinschreiben) und dort initialisieren. In den anderen Files werden sie dann ohne Initialisierung hingeschrieben und als extern deklariert. In Deinem Fall musst Du also wohl nur das Schlüsselwort 'extern' wegnehmen und in die andere Datei schreiben, am besten bei allen Variablen (denn es ist schöner, die Definitionen zusammenzuhalten).
Nachdem auch du anscheinend wieder mal zu der Fraktion gehörst, die meinen ohne vernünftige Literatur C lernen zu können, lies wenigstens die Kurzfassung http://www.mikrocontroller.net/articles/FAQ#Globale_Variablen_.C3.BCber_mehrere_Dateien
Die Funktion
1 | void define_var(void) |
2 | {
|
3 | |
4 | ss = 0; |
5 | mm = 0; |
6 | hh = 0; |
7 | day = 0; |
8 | mon = 0; |
9 | year = 0; |
10 | row=0; |
11 | sync = 0; |
12 | tmp_rise_hh = 0; |
13 | tmp_rise_mm = 0; |
14 | timezone = 1; |
15 | jumper = 0; |
16 | seg7[10] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0xFE,0x09}; |
17 | |
18 | rise_set[24][4] = { |
19 | {7,11,15,22}, |
20 | {7,6,15,39}, |
21 | {6,48,16,6}, |
22 | {6,26,16,30}, |
23 | {5,59,16,53}, |
24 | {5,30,17,16}, |
25 | {4,53,17,34}, |
26 | {4,24,18,4}, |
27 | {3,53,18,29}, |
28 | {3,30,18,50}, |
29 | {3,11,19,11}, |
30 | {3,5,19,22}, |
31 | {3,9,19,25}, |
32 | {3,20,19,17}, |
33 | {3,41,18,57}, |
34 | {4,1,18,34}, |
35 | {4,26,18,0}, |
36 | {4,47,17,30}, |
37 | {5,11,16,55}, |
38 | {5,33,16,25}, |
39 | {6,0,15,33}, |
40 | {6,23,15,32}, |
41 | {6,47,15,16}, |
42 | {7,3,15,13} |
43 | };
|
44 | }
|
erzeugt nun Build started 5.5.2010 at 21:16:06 avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT webcam-starter.o -MF dep/webcam-starter.o.d -c ../webcam-starter.c ../webcam-starter.c: In function 'define_var': ../webcam-starter.c:24: error: expected expression before '{' token ../webcam-starter.c:26: error: expected expression before '{' token make: *** [webcam-starter.o] Error 1 Build failed with 2 errors and 0 warnings... Zeile 24: seg7[10] = ... Zeile 26: rise_set[24][4] = ... Heut ist nicht mein Tag. Könnt ihr mir nochmal helfen? Ich zweifle gerade an meinen C Kenntnissen
Der Flins schrieb: > Ich zweifle > gerade an meinen C Kenntnissen Woran? holger schrieb: > Schlag mal ... in deinem C-Buch nach. Karl heinz Buchegger schrieb: > Nachdem auch du anscheinend wieder mal zu der Fraktion gehörst, die > meinen ohne vernünftige Literatur C lernen zu können,... Ich kann es jetzt auch nochmal wiederholen: Die C-Grundlagen lernt man nicht durch trial and error. Die muß man einmal richtig lernen. Und um deine nicht ausgesprochene Frage auch noch zu beantworten: Nein, einmal deklarierte Arrays lassen sich so nicht mehr mit Werten füllen. Oliver
Der Flins schrieb: > Heut ist nicht mein Tag. Könnt ihr mir nochmal helfen? Ich zweifle > gerade an meinen C Kenntnissen Man kann Arrays nicht in einem Rutsch zuweisen! Jedes noch so grindige C-Buch hätte dir das erklärt. Wozu brauchst du die Funktion define_var überhaupt? Alles was du brauchst sind 2 Dinge Einmal in einem Header File globals.h *********
1 | extern int ss; |
2 | extern int mm; |
3 | extern int hh; |
4 | |
5 | ...
|
6 | |
7 | extern int seg7[10]; |
8 | extern int rise_set[24][4]; |
Das Header File wird überall inkludiert, wo du die globalen Variablen brauchst. Anstelle von int kommen natürlich deine richtigen Datentypen (war jetzt zu faul die rauszusuchen) Und in EINEM C-File (egal welchem) globals.c *********
1 | #include "globals.h" // ist zwar eigentlich nicht notwendig, aber nur |
2 | // zur Sicherheit. Dann kann der Compiler Datentypen
|
3 | // vergleichen
|
4 | |
5 | |
6 | int ss = 0; |
7 | int mm = 0; |
8 | int hh = 0; |
9 | |
10 | ...
|
11 | |
12 | int seg7[10] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0xFE,0x09}; |
13 | int rise_set[24][4] = { |
14 | {7,11,15,22}, |
15 | {7,6,15,39}, |
16 | {6,48,16,6}, |
17 | {6,26,16,30}, |
18 | {5,59,16,53}, |
19 | {5,30,17,16}, |
20 | {4,53,17,34}, |
21 | {4,24,18,4}, |
22 | {3,53,18,29}, |
23 | {3,30,18,50}, |
24 | {3,11,19,11}, |
25 | {3,5,19,22}, |
26 | {3,9,19,25}, |
27 | {3,20,19,17}, |
28 | {3,41,18,57}, |
29 | {4,1,18,34}, |
30 | {4,26,18,0}, |
31 | {4,47,17,30}, |
32 | {5,11,16,55}, |
33 | {5,33,16,25}, |
34 | {6,0,15,33}, |
35 | {6,23,15,32}, |
36 | {6,47,15,16}, |
37 | {7,3,15,13} |
38 | };
|
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.