Gepollte Variable nicht variabel?

Gast #859850
Lesenswert?
• ▲
▼
Hallo,

ich habe das Problem: Ich habe in einem Programm eine globale Variable 
(in einer Headerdatei definiert). Diese Headerdatei binde ich in 2 
Modulen (main.c und UART.c) ein, damit ich aus beiden Modulen auf die 
Variable zugreifen kann.
Diese Variable wird in der while(1)-Schleife in der main()-Funktion 
abgefragt. Je nach Wert der Variablen soll dann eine LED leuchten oder 
nicht.
Wenn ich aber jetzt aus dem anderen Modul (UART.c) diese Variable 
ändere, hat dies keine Auswirkung auf den Wert der Variablen. Der Wert 
bleibt immer so, wie er am Anfang des Programms initialisiert wurde.

Kann mir da einer helfen?

Hier der Teil in dem die Variable gepollt wird:

main.c:
1
while(1)
2
  {
3
    _delay_ms(1000);  
4
    if (StatusPin_Aktiv != 0)
5
    {
6
      StatusPin = !StatusPin;
7
    }
8
    else
9
    {
10
      StatusPin = LED_AUS;
11
    }
12
  }
Gast #859872
Lesenswert?
• ▲
▼
Also ich hab die Variable jetzt so in der main.c definiert:

volatile char StatusPin_Aktiv;

In der UART.h hab ich jetzt stehen:

extern volatile char StatusPin_Aktiv;


So müsste es doch gehen oder? Geht aber nicht....
Gast #859946
Lesenswert?
• ▲
▼
Also bitteschön:

Datei uart.c
1
#include "uart.h" // <-- Hier ist die Variable deklariert ("extern volatile char StatusPin_Aktiv;")
2
[...]
3
void MsgAuswerten(void)
4
{
5
  unsigned char laenge;
6
  unsigned char Message[2];
7
  unsigned char i;
8

9
  laenge = RX_Buffer.Content;
10

11
  for (i = 0; i < laenge; i++)
12
  {
13
    Message[i] = GetByte(&RX_Buffer);
14
  }
15

16
  i = 0;
17

18
  switch (Message[i])
19
  {
20
    case 0x02:  // Status-LED: Wenn laenge = 1 dann Status zurücksenden, bei laenge = 2 ein/ausschalten und neuer Status zurücksenden
21
          if (laenge == 2)
22
          {
23
            if (Message[1] = 0x00)
24
            {
25
              StatusPin_Aktiv = 0;
26
            }
27
            if (Message[1] = 0x01)
28
            {
29
              StatusPin_Aktiv = 1;
30
            }
31
          }
32
          UART_send_char(StatusPin_Aktiv);
33
          break;
34

35
    default:  // Ungültiger Befehl
36
          ;
37
  }
38

39
}
Gast #859971
Lesenswert?
• ▲
▼
hab ich gemacht...

Aber es funktioniert jetzt, hab in der Windows-Anwendung etwas 
vergessen... (hab beim Ein- und Ausschaltebutton) beides mal die 
StatusLED eingeschaltet....

Fall erledigt.

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