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.
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).
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
externintss;
2
externintmm;
3
externinthh;
4
5
...
6
7
externintseg7[10];
8
externintrise_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