Forum: Mikrocontroller und Digitale Elektronik Problem mit volatile im USART Interrupt


von Tim F. (Gast)


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
}

von Naja (Gast)


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.

von Tim F. (Gast)


Lesenswert?

Ja, du hast recht Jetzt gehts. Vielen Dank. ;)

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.