Frage zum Empfang von Zeichenketten über UART

OP #1040837
Lesenswert?

Folgendes habe ich im AVR-GCC-Tutorial gefunden:
1
/* Zeichen empfangen */
2
uint8_t uart_getc(void)
3
{
4
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
5
        ;
6
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
7
}
8
 
9
void uart_gets( char* Buffer, uint8_t MaxLen )
10
{
11
  uint8_t NextChar;
12
  uint8_t StringLen = 0;
13
 
14
  NextChar = uart_getc();         // Warte auf und empfange das nächste Zeichen
15
 
16
                                  // Sammle solange Zeichen, bis:
17
                                  // * entweder das String Ende Zeichen kam
18
                                  // * oder das aufnehmende Array voll ist
19
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
20
    *Buffer++ = NextChar;
21
    StringLen++;
22
    NextChar = uart_getc();
23
  }
24
 
25
                                  // Noch ein '\0' anhängen um einen Standard
26
                                  // C-String daraus zu machen
27
  *Buffer = '\0';
28
}
1
  char Line[40];      // String mit maximal 39 zeichen
2
 
3
  uart_gets( Line, sizeof( Line ) );
leider ist mir das mit dem *Buffer++ nicht ganz klar.
"Buffer" ist ja nur ein Zeiger auf Line. Bedeutet das, dass mit 
"*Buffer++ = xx;" das nächste Elemend in Line aufgerufen bzw. gesetzt 
wird?
Wenn ja. Warum dann ganz zum Schluss noch das "*Buffer = '\0'"? damit 
überschreibe ich mir ja dann das letzte Zeichen welches vor '\n' 
empfangen wurde?

Und andere dumme Frage, aber hat grad mal jemad ein Codebeispiel wie ich 
Line wieder auslese?
#1040844
Lesenswert?

*Buffer++ = x bedeutet, dass x an die Stelle geschrieben wird, wo Buffer 
hinzeigt, und Buffer danach um 1 erhöht wird.

>Wenn ja. Warum dann ganz zum Schluss noch das "*Buffer = '\0'"? damit
>überschreibe ich mir ja dann das letzte Zeichen welches vor '\n'
>empfangen wurde?

Nein, Buffer zeigt immer auf die nächste freie Stelle im String;
Gast #1041221
Lesenswert?

Was der Operator ++ macht gehört doch zu den ersten Sachen, die man in C 
lernt!

Ich frage mich häufiger, wie die Leute, die hier ständig aufschlagen, 
erwarten können, ohne jegliches Grundlagenwissen programmieren zu 
können!
OP #1041421
Lesenswert?

Klaus wrote:
> Was der Operator ++ macht gehört doch zu den ersten Sachen, die man in C
> lernt!
>
> Ich frage mich häufiger, wie die Leute, die hier ständig aufschlagen,
> erwarten können, ohne jegliches Grundlagenwissen programmieren zu
> können!

Ich wills ja gerade lernen!

Deshalb hilft ja auch die 1. Antwort deutlich weiter. Danke.
was ++ macht weiß ich, nur dass es erst im nachhinein passiert, das 
wusste ich nicht.
Jetzt weiß ichs. Ich kann zwar immernoch nicht Programmieren, aber ich 
weiß deutlich mehr!
#1041497
Lesenswert?

Hans Wurst wrote:
> Klaus wrote:
>> Was der Operator ++ macht gehört doch zu den ersten Sachen, die man in C
>> lernt!
>>
>> Ich frage mich häufiger, wie die Leute, die hier ständig aufschlagen,
>> erwarten können, ohne jegliches Grundlagenwissen programmieren zu
>> können!
>
> Ich wills ja gerade lernen!
>
> Deshalb hilft ja auch die 1. Antwort deutlich weiter. Danke.
> was ++ macht weiß ich, nur dass es erst im nachhinein passiert, das
> wusste ich nicht.
> Jetzt weiß ichs. Ich kann zwar immernoch nicht Programmieren, aber ich
> weiß deutlich mehr!

Ja, ++ NACH einer Variable ist ein sogenannter Postfix Operator. Die 
Operation wird nach der Zuweisung ausgeführt.
Im Gegensatz dazu gibt es aber auch noch den Prefix Operator. Bei diesem 
ist das "++" vor der Variablen "++i". Dies bewirkt, dass das Inkrement 
VOR der Zuweisung ausgeführt wird.

Das ganze führt zu schmälerem Code, aber nach meiner persönlichen 
Meinung erhöht es die Lesbarkeit nicht wirklich, besonders für Anfänger.

Gute Nacht.

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