指定された時間後にタイムアウトするようなgetc()は作れますか?
GETCは常にキャラクタを取得するまで待ちます。
キャラクタの準備ができるまで、getc()をコールしないことが賢明です。kbhit()によりキャラクタの準備が完了したことを調べることができます。以下は、RS232からキャラクタを受信するときのタイムアウト処理例です。ハードウェアUARTを使わない場合は、delay_usは1bit分のパルス幅の1/10より小さくしてください(9600ボーで10us)。ハードウェアUARTを使う場合は1bit分のパルス幅の10倍まで設定することが可能です(9600ボーで1000us)。
もし、65535以上のタイムアウト値が必要な場合は、2つのカウンタを使用します。
short timeout_error;
char timed_getc() {
long timeout;
timeout_error=FALSE;
timeout=0;
while(!kbhit&&(++timeout<50000)) // 1/2 second
delay_us(10);
if(kbhit())
return(getc());
else {
timeout_error=TRUE;
return(0);
}
}