mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Volatile & ISR Fehler beim Compilieren


Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe nen ATMega32 und bekomme bei diesen Zeilen:
volatile WORD Timer;    /* 100Hz increment timer */
volatile WORD DIAL_CNT=0;

/*---------------------------------------------------------*/
/* 100Hz timer interrupt generated by OC2                  */
/*---------------------------------------------------------*/
GICR |= (1<<INT0)| (1<<INT1);
MCUCR|= (1<<ISC01)|(1<<ISC11)| (1<<ISC10 );

ISR(TIM2_COMP_vect)
{
  Timer++;      /* Performance counter for this module */
  disk_timerproc();  /* Drive timer procedure of low level disk I/O module */
}

ISR(INT0_vect){
  DIAL_CNT+=1;
}

ISR(INT1_vect){
  DIAL_CNT=0;

}

...folgende Fehlermeldungen:

../main.c:43: error: expected identifier or '(' before 'volatile'
../main.c:43: error: expected ')' before '(' token
../main.c:44: error: expected identifier or '(' before 'volatile'
../main.c:44: error: expected ')' before '(' token
../main.c:46: warning: 'TIM2_COMP_vect' appears to be a misspelled 
signal handler
../main.c:56: error: redefinition of '__vector_1'
../main.c:52: error: previous definition of '__vector_1' was here



Bin da recht hilflos...
...und dankbar für jede Hilfe.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes Hofmann schrieb:
> ../main.c:43: error: expected identifier or '(' before 'volatile'
> ../main.c:43: error: expected ')' before '(' token
> ../main.c:44: error: expected identifier or '(' before 'volatile'
> ../main.c:44: error: expected ')' before '(' token

Der Compiler kennt WORD nicht. Bei den Dateisystemroutinen müsste eine 
integer.h dabei sein, darin ist WORD definiert.

> ../main.c:46: warning: 'TIM2_COMP_vect' appears to be a misspelled
> signal handler

Der Compiler erkennt den Interruptnamen nicht.

> ../main.c:56: error: redefinition of '__vector_1'
> ../main.c:52: error: previous definition of '__vector_1' was here

Du hast 2x den INT0_vect Interruptvektor im Programm.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Johannes Hofmann (menschenskind)

>Ich habe nen ATMega32 und bekomme bei diesen Zeilen:

Anweisungen ausserhalb von Funktionen sind reichlich sinnlos.
/*---------------------------------------------------------*/
/* 100Hz timer interrupt generated by OC2                  */
/*---------------------------------------------------------*/
GICR |= (1<<INT0)| (1<<INT1);
MCUCR|= (1<<ISC01)|(1<<ISC11)| (1<<ISC10 );

Für die ISRs muss avr/interrupt.h im include sein.

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

MFG

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.