AVR Problem beim Zugriff auf Variable

Gast #2558157
Lesenswert?

Hallo zusammen,

ich habe Probleme beim Zugriff auf eine Variable, welche an mehreren 
Stellen verwendet wird.

Ich habe eine Datei config.h . In dieser habe ich die Variable 
definiert:
1
static volatile unsigned char VAR= 3;

Dann habe ich eine Datei isr.c, in der ich eben die Interrupts 
untergebracht habe. Als Beispiel:
1
ISR(INT6_vect)
2
{
3
  VAR= 1;
4
}

In der main.c steht Folgendes:
1
while(1)
2
    {
3
        switch(Var)               
4
        {
5
            case 0: LED_PORT_PORT ^= ( 1 << PA0 );    
6
                    VAR = 3;    
7
                    break;
8
          
9
            ...
10
            ...
11
        }
12
    }/* while(1) */

In der main.c und isr.c wird die config.h eingebunden:
1
#include  "config.h"

Allerdings tut sich da gar nix. Wenn ich die Zeile
1
LED_PORT_PORT ^= ( 1 << PA0 );
direkt in die ISR schreibe, funktioniert es. Irgendwas passt nicht bei 
der Übergabe der Variable VAR.

Blickt da jemand durch und sieht vielleicht, was ich da falsch mache?

Besten Dank!
Steffen
#2558171
Lesenswert?

Steffen schrieb:

> Ich habe eine Datei config.h . In dieser habe ich die Variable
> definiert:
>
>
1
static volatile unsigned char VAR= 3;

Aha.
Und warum ist die static?

Staic an dieser Stelle ist das genaue Gegenteil einer globalen Variable.

Deine isr.c verfügt somit über eine VAR und deine main.c verfügt über 
eine Variable VAR. Beides sind aber nicht dieselben Variablen

config.h
1
extern volatile unsigned char VAR;

isr.c
1
#include "config.h"
2

3
volatile unsigned char VAR = 3;
4

5
...

main.c
1
#include "config.h"
2

3
...
Gast #2558249
Lesenswert?

Hallo,

das mit der Schreibtweise tut mir leid. Das ist beim Übertragen ins 
Forum passiert. Die Schreibweise stimmt schon, ist immer VAR.

Die Version von Karl Heinz Buchegger funktioniert wunderbar. Vielen 
Dank!

Das mit den volatile, static, extern usw. werde ich mir nochmal 
reinziehen.

Vielen Dank.

Grüße
Steffen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren