Problem mit volatile im USART Interrupt

Gast #1419936
Lesenswert?

Hallo,

ich bekomme per UART einmal pro Sekunde eine Nachricht. Die Nachticht 
beginnt mit "GGA", in mode{0...2} wird auf "GGA" gewartet. Die 14 
nächsten zu empfangenden Zeichen sollen im vektor str_gga abgespeichert 
werden.


Wenn ich die Zeichen in der main Funkion abfrage sind sie nicht so 
enthalten. Ich tippe zu 90%, dass es etwas mit dem volatile zu tun hat.


Wäre sehr erfreut wenn mir jemand helfen kann.
1
volatile int8_t counter=0;    // Zählt die Zeichen nach dem Header
2
volatile int8_t mode=0;      // 0: Suche nach GGA protocol header
3
volatile unsigned char str_gga[]={"                                                 "};
4

5
ISR(USART_RXC_vect)
6
{
7
  int8_t i;
8
  if(mode<4)          // Wenn auf den Protocolheader "GGA" gewartet wird
9
  {
10
    switch(mode)
11
    {
12
      case 0:
13
        if(UDR=='G')    // 1. Buchstabe des GGA Protocolheader gefunden
14
          mode=1;      // 2. Untersuche nächstes Byte auf 2. Buchstaben von GGA
15
      break;
16
      case 1:
17
        if(UDR=='G')
18
          mode=2;      // 2. Buchstabe des GGA Protocolheader
19
        else
20
          mode=0;
21
      break;
22
      case 2:
23
        if(UDR=='A')
24
          mode=3;
25
        else
26
          mode=0;
27
      break;
28
      case 3:
29
        str_gga[counter];
30
        counter++;
31
        if(counter==14)
32
        {
33
          counter=0;
34
          mode=0;
35
          lcd_home();
36
        }
37
      break;
38
    }
39
  }
40
}
Gast #1419945
Lesenswert?

Da
1
        str_gga[counter];

fehlt was.

Ansonsten der gutgemeinte Rat in der ISR sowas nicht zu machen. Auf 
jeden Fall nicht lcd_home (), bei dem ich davon ausgehe, das es selbst 
delays oder ISRs verursacht.

Wie auch immer: volatile ist nicht Dein Problem, wenn es auch hier nicht 
wirklich sinnvoll verwendet wird. Lass es so.

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