mikrocontroller.net

Forum: Compiler & IDEs globale Variable in Interruptroutine ansprechen


Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <mega128.h>

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
tick++;
}

// Declare your global variables here
volatile unsigned char tick;

void main(void)
{

//[....] Initialisierung der Hardware

while (1)
     {
     // Place your code here
   #asm("nop");
   #asm("nop");
     };
}

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definier doch einfach tick...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Lightlancer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <mega128.h>

uint16_t tick = 0;

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
tick++;
}

// Declare your global variables here
volatile unsigned char tick;

void main(void)
{

//[....] Initialisierung der Hardware

while (1)
     {
     // Place your code here
   #asm("nop");
   #asm("nop");
     };
}

oder alternativ

#include <mega128.h>
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
static uint16_t tick = 0;
// Place your code here
tick++;
}

// Declare your global variables here
volatile unsigned char tick;

void main(void)
{

//[....] Initialisierung der Hardware

while (1)
     {
     // Place your code here
   #asm("nop");
   #asm("nop");
     };
}

Autor: Lightlancer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups das volatile unsigned char tick; muss da natürlich weg dann

Autor: Lightlancer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder dein volatile unsigned char tick; muss VOR der Tiemrroutine stehen

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Hamburgs Mannheimer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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! (?)

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.