0
사용자가 'l'을 입력 할 때까지 직렬 콘솔에 대한 데이터 문자열을 읽는 UART 용 드라이버가 있습니다. 그러나, 나는 단지 하나의 문자를 읽고 싶다. 이것은 사용자가 1-9 또는 a-z를 입력하는 메뉴입니다. 표준 C getchar()
에 해당하는 것을 만들려고합니다. 나는 이것을 어떻게 일반적으로 할 수 있을까?getchar()을 에뮬레이트하는 UART 드라이버
이것은 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');
}
우리는 코딩/개인지도 서비스가 없습니다. 귀하의 ** 특정 ** 문제는 무엇입니까? [mcve]를 제공하십시오. – Olaf
이 함수를 리팩토링하면 루프 내부의 코드를 getchar() 함수로 옮길 수 있습니다. 'uart' 선언은 버그가 있습니다. 레지스터 크기를 맞추려면'uint16_t'가 필요합니다. –
이'getstring()'구현은 안전하지 않으므로주의해야합니다. 그것은'str'에 쓰여지는 문자의 수에 제한이없고, 문자열을 종료하지 않으며,'l' 문자를 포함하여 엔트리를 종료합니다. – Clifford