C - 从uint8_t函数返回失败

时间:2014-10-09 20:21:58

标签: c return-value

当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指针作为参数传递。

1 个答案:

答案 0 :(得分:2)

int fgetc()一样,使用负值EOF表示文件结尾(串口不再可用)或IO错误(例如超时)。

使用数据返回时,使用0到255,它不会与EOF冲突。

关键是getByte()需要返回257个不同的东西(256个不同的字节和超时)。 uint8_t缺乏这个范围。