Forum: Mikrocontroller und Digitale Elektronik Frage zu \r im UART


von Marco (Gast)


Lesenswert?

Hallo

ich habe in einem UART Beispielprogramm (bei dem Interrupt Kapitel hier 
auf der Seite) gesehen das \r als Stringenede Markierung verwendet wird. 
Das \r wird in eine uint8_t Variable kopiert. Aber \r sind doch zwei 
Zeichen, also einmal das "\" und einmal das "r" und somit 2 Byte?

Kann mir das jemand erklären?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

'\r' in C-Code beschreibt das Zeichen "carriage return", hex 0x0D,
dezimal 13.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Es gibt eine Vielzahl wichtiger solcher sog. ESCAPE-Controlsequenzen. 
Wichtig ist, dass diese im Programmcode in single-quotes (') verwendet 
werden, genau so, als würde man z.B. 'A' oder 65 zuweisen. Der Compiler 
erkennt dies und setzt den entsprechenden Zahlenwert dafür ein. Das 
Programm wird dadurch lesbarer.

Für das Ende einer Zeichenkette wird idR. '\0' (HEX 0x00) verwendet. 
'\r' steht für Carriage Return (Wagenrücklauf, zurück an den Anfang der 
Zeile), und '\n' steht für newline (eine zeile tiefer).
Andere sind z.B. '\t' für TAB.

In printf erzielt man mit '\n' meist ein CR + LF, das ist aber 
betriebssysteminterpretation. M$, Linux und MAC-OS benötigen alle 
verschiedene Kombinationen aus CR und LF für "Neue Zeile, Vursor an 
Anfang".

Für simples printf-retargeting (ARM) findet man daher häufig:
1
int fputc(int c, FILE *f)
2
{
3
  if(c=='\n')
4
  {
5
    wait_for_uart_ready();
6
    uart_data = '\r';
7
  }
8
  wait_for_uart_ready();
9
  uart_data = c;
10
}

Was das Problem auch dahingehend abfängt, dass ein zusätzliches CR nicht 
schadet :-)

Greetz,
/r.

von Karl H. (kbuchegg)


Lesenswert?

Marco wrote:

> Das \r wird in eine uint8_t Variable kopiert. Aber \r sind doch zwei
> Zeichen, also einmal das "\" und einmal das "r" und somit 2 Byte?


Da das noch nicht 100% klar und eindeutig herausgekommen ist:

'\r' ist genauso 1 Zeichen, so wie  'a' 1 Zeichen ist!

Die Schreibweise mit \ und einem zusätzlichen Buchstaben, wird
für Zeichen benutzt, für die es keinen Buchstaben gibt. Wie willst
du einen Tabulator symbolisieren. Oder das Zeichen, welches ein
Terminal zur Abgabe eines Beep bringt? Es gibt dafür kein
sichtbares, anzeigbares Zeichen. Also muss man sich was dafür
einfallen lassen.

   \r       carriage return   ( Wagenrücklauf )
   \n       line feed         ( Zeilenvorschub )
   \a       bell              ( Klingen )
   \t       tabulator
   \\       ein einzelner Backslash
   ...

von Marco (Gast)


Lesenswert?

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.