Forum: Mikrocontroller und Digitale Elektronik AVR Problem beim Zugriff auf Variable


von Steffen (Gast)


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

von Lars (Gast)


Lesenswert?

Wie siehts mit der unterschiedlichen Schreibweise VAR und Var aus ??

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Steffen schrieb:
> switch(Var)
>                     VAR = 3;
Das sind 2 unterschiedliche Variablen, denn C ist Case-sensitiv...

> Ich habe eine Datei config.h . In dieser habe ich die Variable
> definiert:
> static volatile unsigned char VAR= 3;
Lies dir mal Wissen zum Schlüsselwort extern an...

von Karl H. (kbuchegg)


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
...

von Steffen (Gast)


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

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.