Frage zu \r im UART

Gast #750638
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?
Persönliche Seite #750684
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.
#750703
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
   ...

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