当UART缓冲区非空时,我有一个从UART设备获取字符的函数。
uint8_t getByte(void) {
while(!uartCharsAvail(uartBase)) {
// Wait for a character to become available
}
return uartGetChar(uartBase);
}
问题是现在我想引入一个超时,以便在等待时间过长时函数将返回失败。
uint32_t replyTimeout;
uint8_t getByte(void) {
replyTimeout = 0;
while(!uartCharsAvail(uartBase)) {
// Wait for a character to become available
if (replyTimeout++ > MAX_REPLY_TIME) {
return -1;
}
delay(1);
}
return uartGetChar(uartBase);
}
这里的问题当然是我从uint8_t函数返回一个负数。
有没有一种简单的方法来解决这个问题?我能想到的唯一方法是使函数boolean并将uint8_t指针作为参数传递。
答案 0 :(得分:2)
与int fgetc()
一样,使用负值EOF
表示文件结尾(串口不再可用)或IO错误(例如超时)。
使用数据返回时,使用0到255,它不会与EOF
冲突。
关键是getByte()
需要返回257个不同的东西(256个不同的字节和超时)。 uint8_t
缺乏这个范围。