Frage zum Empfang von Zeichenketten über UART

OP #1040837
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?
*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
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
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!
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

Eine eigene Frage? Dieser Thread ist über 18 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.