Problem mit volatile im USART Interrupt

Gast #1419936
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.