globale Variable in Interruptroutine ansprechen

Gast #515742
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
}
Gast #515754
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
}
Gast #515759
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...
Gast #517325
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! (?)
Gast #517329
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

Antwort schreiben

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.

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.