Volatile & ISR Fehler beim Compilieren

OP #1454950
Hallo

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

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

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

16
ISR(INT0_vect){
17
  DIAL_CNT+=1;
18
}
19

20
ISR(INT1_vect){
21
  DIAL_CNT=0;
22

23
}

...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.
#1454956
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.
#1454987
@  Johannes Hofmann (menschenskind)

>Ich habe nen ATMega32 und bekomme bei diesen Zeilen:

Anweisungen ausserhalb von Funktionen sind reichlich sinnlos.
1
/*---------------------------------------------------------*/
2
/* 100Hz timer interrupt generated by OC2                  */
3
/*---------------------------------------------------------*/
4
GICR |= (1<<INT0)| (1<<INT1);
5
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-Tutorial#Programmieren_mit_Interrupts

MFG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.