Implementieren Sie eine Funktion kread
im File kread.s
, die Daten von verschiedenen Eingabequellen einliest und in einem bereitgestellten Puffer speichert. Die Funktion soll sowohl Eingaben von der UART-Schnittstelle als auch von Dateien verarbeiten können, letzteres ist optional, da wir im Rahmen dieses Tutorials kein Dateisystem implementieren werden. Dabei sollen spezielle Eingaben wie Carriage Return (Enter-Taste), Backspace und die Anpassung der Tastatureingaben zwischen amerikanischer und deutscher Belegung berücksichtigt werden. Am Ende soll die Funktion die Länge des eingelesenen Strings zurückgeben oder einen Fehlercode, falls ein Fehler aufgetreten ist.
Funktionsprototyp:
kread:
@ Eingabe:
@ r0 - Eingabestream (0 für Datei, 1 für UART)
@ r1 - Zieladresse für den eingelesenen String
@ r2 - Maximale Anzahl der zu lesenden Bytes
@ Ausgabe:
@ r0 - Länge des eingelesenen Strings oder Fehlercode (0xFFFFFFFF bei Fehler)
Anforderungen:
r0
entscheiden, ob von einer Datei (0) oder von der UART-Schnittstelle (1) gelesen wird.k_uart_read_char
, um ein Zeichen von der UART-Schnittstelle zu lesen.k_uart_write_char
wieder aus (Echo-Funktion).kwrite
mit der Zeichenkette "/n"
aufrufen (siehe Hinweis).
- Backspace (ASCII 0x08):r1
übergeben wird.r2
angegeben ist.textmode_state
ungleich 0), verwenden Sie die Funktionen:text_printchar
zum Ausgeben von Zeichen im Textmodus.text_newline
zum Einfügen eines Zeilenvorschubs.text_del
zum Löschen von Zeichen.text_current_index
, um den aktuellen Cursor-Index zu erhalten.0xFFFFFFFF
zurück, wenn ein Fehler auftritt.Hinweise:
Da es bei der Ausgabe von QEMU über UART erfahrungsgemäß zu Problemen mit Zeilenumbrüchen kommt, wenn newline
verwendet wird, verwenden wir statt des üblichen \n
die Zeichenfolge /n
.
zurück | Hauptmenü | weiter |