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?
'\r' in C-Code beschreibt das Zeichen "carriage return", hex 0x0D, dezimal 13.
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.
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.