Hallo, Kann jemand netterweise sagen wo der Fehler ist. Es scheint mir alles korrekt zu sein. Dank main.c ------------------------- #include "main.h" int main (void){ while (1){ ; } return 0; } ------------------------- main.h ------------------------- #include <stdio.h> #include <avr/wdt.h> #include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> #include <string.h> #include <avr/eeprom.h> DDRB = (1<<DDB0) | (1<<DDB1); PORTB = (0<<PB0) | (0<<PB1 ) | (0<<PB2) | (0<<PB3) | (0<<PB4); ADMUX = (1<<REFS0); ADCSRA = (1 << ADEN) | (1 << ADSC ) | (1 << ADPS2) | (1<<ADPS1); ------------------ FehlerMeldung: Compiling C: main.c avr-gcc -c -mmcu=attiny13 -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 main.c:2: main.h:11: error: expected identifier or '(' before 'volatile' main.h:11: error: expected ')' before '(' token main.h:13: error: expected identifier or '(' before 'volatile' main.h:13: error: expected ')' before '(' token main.h:15: error: expected identifier or '(' before 'volatile' main.h:15: error: expected ')' before '(' token main.h:18: error: expected identifier or '(' before 'volatile' main.h:18: error: expected ')' before '(' token make.exe: *** [main.o] Error 1
Ausserhalb einer Funktion ist sowas DDRB = (1<<DDB0) | (1<<DDB1); nicht wirklich sinnvoll.
ich schrieb: > Kann jemand netterweise sagen wo der Fehler ist. In der (Nicht-)Beherrschung der Programmiersprache C deinerseits. In C darf ausführbarer Code grundsätzlich nur innerhalb von Funktionen auftreten. Damit verbietet es sich (von inline-Funktionen mal abgesehen) normalerweise von selbst, derartige Konstrukte in Header-Dateien unterzubringen.
Probier mal die Anweisungen in die main()-Funktion zu schreiben und nicht in die Header-Datei.
Ich danke euch viel mals für die Antworten besondere Dank für den Groß Meister Jörg Wunsch Ich habe es abgeändert und es gibt keine Fehler mehr. -------------------------------------- main.c -------------------------------------- #include "main.h" int main (void){ init_ATiny13(); while (1){ ; } return 0; } -------------------------------------- main.h -------------------------------------- #include <stdio.h> #include <avr/wdt.h> #include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> #include <string.h> #include <avr/eeprom.h> void init_ATiny13(void) { DDRB = (1<<DDB0) | (1<<DDB1); PORTB = (0<<PB0) | (0<<PB1 ) | (0<<PB2) | (0<<PB3) | (0<<PB4); ADMUX = (1<<REFS0); ADCSRA = (1 << ADEN) | (1 << ADSC ) | (1 << ADPS2) | (1<<ADPS1); }
Um es richtig zu machen, musst du nur noch die Funktion aus dem Header in die Main verschieben. Denn in einen Header gehört kein Code. Sondern nur Deklarationen.
das einsame semikolon in deiner main-schleife macht sich auch nicht so gut, das gehört dort nicht hin. wenn ein block leer sein soll, ist er allein ausreichend, da muss nicht zwingend etwas hinein.
1 | int main(void) { |
2 | init_ATiny13(); |
3 | |
4 | while (1) { |
5 | }
|
6 | |
7 | return 0; |
8 | }
|
btw. ein gutes c++-tutorial (die pdf-version ist empfehlenswert): http://www.cplusplus.com/doc/tutorial/ ist zwar c++, daher für den blutigen einstieg in c mit vorsicht zu genießen, aber den syntax erklärt es gut und die ähnlichkeit zu plain-c macht es auch für den einstieg in jenes nützlich.
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.