문제 설명
UART를 통해 최대 4자리까지의 숫자 문자열을 입력받고, 이를 정수로 변환하여 반환하는 함수를 작성하라.
- 입력 문자는 한 글자씩 UART 수신 레지스터에서 읽음
- 수신된 문자는 즉시 에코(되돌려 출력) 처리
- 입력이 \r (Enter)일 경우 즉시 입력 종료 후 정수 반환
- 숫자 이외 문자는 처리하지 않으며, 최대 4자리까지만 입력 가능
정답 코드
int Uart_Get_Int_Num(void)
{
char s[10];
int i;
int num = 0;
for (i=0;i<4;i++)
{
while (!Macro_Check_Bit_Set(USART1->SR, 5));
s[i] = USART1->DR;
while (!Macro_Check_Bit_Set(USART1->SR, 7));
USART1->DR = s[i];
if (s[i] == '\r')
{
return num;
}
num = num * 10 + (s[i] - '0');
}
}
메모
printf 내부의 \n 습관화 필요