Ich habe einen Treiber für einen UART, der eine Datenfolge für die serielle Konsole liest, bis der Benutzer 'l' eingibt. Ich möchte jedoch nur ein einziges Zeichen lesen. Es ist für ein Menü, wo der Benutzer 1-9 oder a-z eingibt. Ich versuche, ein Äquivalent des Standards C getchar()
zu schaffen. Wie könnte ich das generell machen?Ein UART-Treiber emuliert getchar()
Dies ist die Registerkarte für den UART.
void getstring(char *str) {
volatile uint32_t *uart = (volatile uint32_t*) UART;
char c = 0;
do {
while ((uart[2] & (1<<7)) == 0);
c = uart[0];
*str++ = c;
}
while (c!='l');
}
Wir sind keine Codierung/Nachhilfe-Service. Was ist dein ** spezifisches ** Problem? Stellen Sie eine [mcve] bereit. – Olaf
Refactor einfach diese Funktion, bewegen Sie den Code innerhalb der Schleife in eine getchar() -Funktion. Die 'uart'-Deklaration ist fehlerhaft, sie muss' uint16_t' sein, um der Registergröße zu entsprechen. –
Diese 'getstring()' Implementierung ist unsicher und schlecht beraten. Es hat keine Begrenzung für die Anzahl der Zeichen, die in 'str' geschrieben werden, beendet die Zeichenfolge nicht und enthält das Zeichen' l', das zum Beenden des Eintrags verwendet wird. – Clifford