Forum: Compiler & IDEs Kann keine Variablen beschreiben. HILFE!


von Ulli K. (ulluru)


Angehängte Dateien:

Lesenswert?

Hallo Forumler,
versuche grade ein Projekt für die Hochschule zu machen, allerdings war 
mein Mikrocontroller-kurs mehr als dürftig. Also erarbeite ich mir das 
jetzt alles nochmal selbst.

Soweit bin ich gekommen:
LEDs leuichten lassen und ausschalten. Über den Uart ein einzelnes 
Zeichen senden. Alles soweit nach dem Tutorial hier auf der Seite. 
Allerdings bin ich über irgendwas gestolpert was ich nicht so ganz 
verstanden hab als ich versuchte einen String zu senden, nach der 
Tutorial Anleitung.

Kurzer Einschub: Ich fände es sinnvoll wenn an der Stelle im 
AVRGCC-Tutorial kurz erklärt wird wie man den String definieren muss und 
wie die Funktion in der Main dann aufgerufen wird.

Dort bin ich nämlich dann hängen geblieben und hab erst nicht verstanden 
wieso. Ich habe gleichzeitig versucht, die Funktionen zum puts und putc 
in eine Externe c DAtei abzulegen weil ich mein Projekt gern 
übersichtlich gestalten wollte und früh übt sich usw.

Das eigentliche Problem scheint aber zu sein, dass ich keine Variablen 
beschreiben kann. Register direkt anzusprechen ist offensichtlich kein 
Problem.

Als ich das verstanden hab habe ich versucht einige andere Variablen zu 
deklarieren (Keine Fehler) und zu beschreiben: Immer Fehler.

Deshalb hier meine Quellcodes und das Winavr-Projekt im Anhang.
Die Files aus dem default Ordner hab ich mal nicht kopiert weil das ja 
wohl ältere Ergebnisse des selben Projekts sind und im Moment unwichtig, 
oder?

Hier die Vollständigen Meldungen die der Compiler während dessen 
ausgiebt

Build:

avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT seri.o -MF 
dep/seri.o.d  -c  ../seri.c
../seri.c:5:2: warning: #warning "F_CPU war noch nicht definiert, wird 
nun nachgeholt mit 8000000"
../seri.c:24:22: warning: extra tokens at end of #include directive
../seri.c:30: warning: data definition has no type or storage class
../seri.c:30: warning: type defaults to 'int' in declaration of 'i'
../seri.c:30: error: conflicting types for 'i'
../seri.c:29: error: previous declaration of 'i' was here
../seri.c:34: warning: data definition has no type or storage class
../seri.c:34: warning: type defaults to 'int' in declaration of 'wort'
../seri.c:34: error: conflicting types for 'wort'
../seri.c:32: error: previous declaration of 'wort' was here
../seri.c:34: error: invalid initializer
../seri.c:47: error: expected '=', ',', ';', 'asm' or '__attribute__' 
before '.' token
make: *** [seri.o] Error 1
Build failed with 6 errors and 6 warnings...



Meine Daten:
Windows 7 x64
Selbst Zusammengestecktes Experimentierboard mit Atmega8 8MHz Quarz
AVR-Dragon zum Programmieren

Hoffe das sind alle Infos die Ihr braucht. Wenn nicht bitte schreibt 
mir. Ich brauch dringend Hilfe. Danke


Danke im Voraus

Gruß Ulli

von Huch (Gast)


Lesenswert?

Quellcode bitte als Anhang und nicht im ZIP-File. Es macht es einfacher, 
wenn man das nicht erst entpacken muss und lokal speichern.

Du erhälst doch Fehlermeldungen und Warnungen. Bitte versuche die zu 
verstehen. Wenn Du ein Detail konkret nicht verstehst, dann poste das 
hier.
Aber Code zu korrigieren ist eine Tätigkeit die Du beherrschen musst. 
Das können wir Dir nicht abnehmen.
Einige hier sind erfahrungsgemäß auch dazu bereit, aber das hilft Dir 
auf die Dauer nicht weiter, weil Du so nie lernst selbst damit 
umzugehen. Du wärst immer auf Hilfe angewiesen um zu programmieren.
Also formuliere Deine Frage so, das man feststellen kann, wo genau Du 
nicht weiterkommst.

Das Tutorial ersetzt übrigens nicht die eigenständige Lektüre eines 
entsprechenden C-Buchs. Deswegen wird es nicht alles und im Detail 
erklären. Bitte schaff Dir eins an oder nimm eins aus dem Netz.

von Rolf M. (rmagnus)


Lesenswert?

Ulli Klappenberger schrieb:
> Das eigentliche Problem scheint aber zu sein, dass ich keine Variablen
> beschreiben kann.

Nicht außerhalb von Funktionen, so wie du es versuchst. Du kannst sie 
initialisieren, also bei der Definition gleich einen Wert mitgeben, aber 
du kannst nicht irgendwo außerhalb einer Funktion eine Zuweiseung 
schreiben.

Wir können die Meldungen ja mal durchgehen:

> ../seri.c:24:22: warning: extra tokens at end of #include directive

Sollte offensichtlich sein, wenn du dir die Zeile mal anschaust.

> ../seri.c:30: warning: data definition has no type or storage class

Da Zuweisungen außerhalb von Funktionen nicht erlaubt sind, geht der 
Compiler davon aus, daß du mit
1
i=1;
eine Definition meinst, wo du nur den Typ vergessen hast...

> ../seri.c:30: warning: type defaults to 'int' in declaration of 'i'

... und nimmt deswegen an, daß du int meintest. Wenn du dich fragst, 
wieso er sowas macht: int als Default ist noch aus grauer Vorzeit 
übriggeblieben.
Er macht also ein
1
int i=1;
daraus.
Da du aber direkt davor schon ein i mit anderem Typ (uint8_t) definiert 
hast, erkennt der Compiler, daß es hier einen Konflikt zwischen zwei 
unterschiedlichen Definitionen von i gibt:

> ../seri.c:30: error: conflicting types for 'i'
> ../seri.c:29: error: previous declaration of 'i' was here

Die restlichen Warnungen/Fehler sind dann nochmal das gleiche für 
weitere Variablen.

von Ulli K. (ulluru)


Lesenswert?

Vielen, vielen Dank Rolf Magnus,
natürlich weiß ich, dass man Variablen nicht außerhalb von Funktionen 
beschreiben kann. Also zumindest wusste ich es mal. Bin nur nicht drauf 
gekommen.

Das mit dem Semikolon hinter dem Include ist durch spätnächtliches 
rumprobieren entstanden und ist natürlich Blödsinn.
Vielleicht sollte man einfach nur einen Schutz in die PCs einbauen das 
nach 00 Uhr nicht mehr programmiert werden kann. Da kommt nix bei rum.

Auf jeden Fall LÄUFT es jetzt und ich kann weiter arbeiten.

Bin wohl auch ein bisschen verwöhnt von der ganzen 
Matlab-Programmiererei.


@Huch: Nett, dass du versuchst hier das Forum für die wirklich 
Hilfestellenden leichter zu machen. Natürlich habe ich hier auch ein C 
Buch liegen und natürlich kann ich meinen Code auch selber 
korrigieren(Hab ich das etwa gefordert?). Und ich denke ich zeige schon 
genug Selbstständigkeit, habe schon seit 1,5 Tagen an diesem Problem 
gesessen. Hatte nur das Gefühl das ich einen ganz kleinen Fehler 
übersehe und wollte fragen ob ihn jemand sieht.
Aber vielleicht kannst du mir ja ein noch ein gutes C-Buch empfehlen?
Oder noch besser ein Compiler-Meldungen verstehen für Dummies. Ich denke 
an denen ist schon so mancher Programmierer verzweifelt. Ich bin 
durchaus des Englischen mächtig, aber manchmal sprechen die Compiler 
halt ihre eigene Sprache.
Und außerdem wofür ist das Forum doch dafür da Hilfe zu erhalten, oder 
hab ich da was falsch verstanden?




Nochmals THX Magnus.

Gruß Ulli

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
Noch kein Account? Hier anmelden.