static char im Interrupt definieren

Gast #1982252
Hey zusammen,

bei dem Versuch die static-Variable im Interrupt zu deklarieren bekomme 
ich die Nachricht "invalid expression". Was ist denn daran invalid?

Ich benutze die Demo des AVR-compilers von Mikroelectronika (Mikroc) in 
der neuesten Version
1
void interrupt() org IVT_ADDR_INT6 /*iv IVT_ADDR_INT7*/ {
2

3
     SREG_I_bit=0;
4
     static char i=0x00;   //--> invalid expression
5

6
     if (V1_PHASE_A) i=1;  //graycode to binary
7
     if (V1_PHASE_B) i^=3;
8

9
     i-=stand;
10

11
     if (i==-3) i=1;
12
     if (i==3) i=-1;
13

14
     Wert_rel+=i;
15

16
     i=0;
17
     SREG_I_bit=1;
18
}
Gast
Vielleicht spricht der C-Compiler C 89 und du musst die Variable vor dem 
ersten Statement deklarieren? Also einfach die ersten beiden Zeilen 
tauschen.
Gast
wunderbar, funzt prima, danke dir!

weiß jemand, wie man diese Funkton von zwei Interrupts (Int an pin 6 und 
7) triggern lassen kann? Wenn ich die Kommentarzeichen entferne, wird 
gemeckert...
Gast
Die Version hier haut auch nihct so recht hin...

1
void interrupt() iv IVT_ADDR_INT6 {
2

3

4
     static char i=0x00;
5
     
6
     SREG_I_bit=0;
7

8

9
     if (V1_PHASE_A) i=1;  //graycode to binary
10
     if (V1_PHASE_B) i^=3;
11

12
     i-=stand;
13

14
     if (i==-3) i=1;
15
     if (i==3) i=-1;
16

17
     Wert_rel+=i;
18
     Stand =i;
19
     i=0;
20
     SREG_I_bit=1;
21
}
22

23
void interrupt2() iv IVT_ADDR_INT7  {
24

25
SREG_I_bit=0;
26
interrupt();
27
}

die Meldung:

14 364 Recursion or cross-calling of 'interrupt' Test Drehgeber.c
Gast
hab jeden Interrupt einfach in eine eigene Funktion ausgelagert, die 
jeweils die eigentliche Funktion aufrufen.

Vielen Dank für eure Hilfe!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 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.