Нужено изобрести какой-ндь таймаут для UARTа.
Пользую CodeVisionAVR, читаю байты из сериального порта библиотечной рутиной getchar() - всё нормально пока этот байт есть, а если источник (ПК) вдруг отключен - микрокод вешается на getchar-е намертво.
Пробовал читать в цикле приёмный регистр проверяя флажок RXC0:
for (i=0; i < timeout; i++)
{
if (UCSR0A > 127) return UDR0;
}
return 0;
работает иногда, чаще когда timeout очень большой - секунд на 10, но мне это слишком уж. Надо меньше секунды.
Как это правильно сделать?
Виталий