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