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 |