mikrocontroller.net

Forum: Compiler & IDEs error: expected identifier or '(' before 'volatile'


Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausserhalb einer Funktion ist sowas
 DDRB = (1<<DDB0) | (1<<DDB1);
nicht wirklich sinnvoll.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: uninteressant... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal die Anweisungen in die main()-Funktion zu schreiben und 
nicht in die Header-Datei.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);

}

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: arno nyhm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
int main(void) {
  init_ATiny13();
  
  while (1) {
  }

  return 0;
}

Autor: arno nyhm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.