타이머로 인터럽트 하나 잡아서 jiff 값을 1ms 정도에 한 번씩 증가시킨 후 정한 시간 내에 수신이 발생하지 않으면 탈출하도록 한다.
펌웨어상에서 프로그래밍할 때는 흔하게 고려해야 하는 부분.
unsigned char getb(int *timeout_err)
{
int start;
start = jiff;
*timeout_err = uart_time_out;
while (!(rUS1_SR & USART_RXRDY)) {
if ((jiff - start) >= *timeout_err) {
*timeout_err = -1; // 타임아웃은 -1 이다.
return 0; // 의미없는 리턴
}
continue;
} *timeout_err = 0; // 타임아웃이 아니다.
return (unsigned char)rUS1_RHR;
}