Forum: Compiler & IDEs globale Variable in Interruptroutine ansprechen


von Dietmar (Gast)


Lesenswert?

Ich verstehs nicht...
Ich versuche eine globale Variable in der ISR anzusprechen.
Der CodeVision-Compiler meldet mir immer nur: "undefined symbol 'tick'"
Was mache ich falsch??

Hier der Code:
1
#include <mega128.h>
2
3
// Timer 1 overflow interrupt service routine
4
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
5
{
6
// Place your code here
7
tick++;
8
}
9
10
// Declare your global variables here
11
volatile unsigned char tick;
12
13
void main(void)
14
{
15
16
//[....] Initialisierung der Hardware
17
18
while (1)
19
     {
20
     // Place your code here
21
   #asm("nop");
22
   #asm("nop");
23
     };
24
}

von Sepp (Gast)


Lesenswert?

Definier doch einfach tick...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bevor du etwas benutzen kannst, musst du es erstmal haben.  Bei dir
ist die Reihenfolge umgekehrt...

Wäre dir übrigens auch mit dem GCC so gegangen, um's mal on-topic
zu machen. ;-)

von Lightlancer (Gast)


Lesenswert?

1
#include <mega128.h>
2
3
uint16_t tick = 0;
4
5
// Timer 1 overflow interrupt service routine
6
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
7
{
8
// Place your code here
9
tick++;
10
}
11
12
// Declare your global variables here
13
volatile unsigned char tick;
14
15
void main(void)
16
{
17
18
//[....] Initialisierung der Hardware
19
20
while (1)
21
     {
22
     // Place your code here
23
   #asm("nop");
24
   #asm("nop");
25
     };
26
}

oder alternativ

#include <mega128.h>
1
// Timer 1 overflow interrupt service routine
2
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
3
{
4
static uint16_t tick = 0;
5
// Place your code here
6
tick++;
7
}
8
9
// Declare your global variables here
10
volatile unsigned char tick;
11
12
void main(void)
13
{
14
15
//[....] Initialisierung der Hardware
16
17
while (1)
18
     {
19
     // Place your code here
20
   #asm("nop");
21
   #asm("nop");
22
     };
23
}

von Lightlancer (Gast)


Lesenswert?

ups das volatile unsigned char tick; muss da natürlich weg dann

von Lightlancer (Gast)


Lesenswert?

oder dein volatile unsigned char tick; muss VOR der Tiemrroutine stehen

von Dietmar (Gast)


Lesenswert?

Aua.
Jetzt sehe ichs auch...
Da hab ich mich zu sehr auf den Codegenerator von CodeVision verlassen 
und gar nicht darüber nachgedacht, dass die globalen Variablen am 
sinnvollsten am Anfang der Datei stehen sollten...

von Hamburgs Mannheimer (Gast)


Lesenswert?

Macht sowas Sinn?  Globale Variablen sind doch deshalb global, weil sie 
in verschiedenen Prozessen beschrieben werden. Ein ISR kann aber 
jederzeit auftreten - du hast also keine HandlungsKontrolle über den 
Ablauf! (?)

von Falk (Gast)


Lesenswert?

@Hamburgs Mannheimer

>Macht sowas Sinn?  Globale Variablen sind doch deshalb global, weil sie
>in verschiedenen Prozessen beschrieben werden. Ein ISR kann aber

Ja eben. Der ISR beschreibt sie, ein oder mehrere Prozesse lesen sie. 
Das ist ein Standardvorgehensweise.

MFG
Falk

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
Noch kein Account? Hier anmelden.