c - xTicksToWait = portMAX_DELAY时,xQueueReceive会失败吗?

标签 c error-handling real-time message-queue freertos

假设我有这种事件循环:

MyType_t object;
while(true) {
    xQueueReceive(QHandle, &object, portMAX_DELAY);
    doSomething(object);
}
文档(https://www.freertos.org/a00118.html)规定:

If INCLUDE_vTaskSuspend is set to ‘1’ then specifying the block time as portMAX_DELAY will cause the task to block indefinitely (without a timeout).


对我来说,这意味着它将一直等待直到可以接收到一个值,这意味着它永远不会失败来接收一个值,但是我可能是错的。
是否需要检查xQueueReceive失败?如果是,故障模式是什么?

最佳答案

暂停任务可以真正无限期地阻塞队列。否则,它会在portMAX_DELAY滴答之后返回超时,该超时通常非常长。
如果稍微增加代码大小将INCLUDE_vTaskSuspend设置为1没关系,我建议您这样做。
尽管从无限超时的队列中接收消息不会失败,但是检查返回码是一种很好的方式。

关于c - xTicksToWait = portMAX_DELAY时,xQueueReceive会失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62997521/

相关文章:

android - 使用 PebbleKit 将 bool 值发送到 Pebble

c - 如何编译一个带有两个txt文件作为命令行参数的c程序?

c++ - fscanf() 未获取 VSTS 中文件处理中的数据

java - 在 React Native Android 应用程序中通过 crashlytics 的堆栈跟踪找到崩溃是真的吗?

C# 到 Java 延迟敏感类转换,在我的情况下,TreeMap 会取代 SortedList 吗?

Python - 如何使用 ioctl 或 spidev 从设备读取输入?

java - 覆盖 Struts 2 消息

C# 如何在使用 getLastError 方法的全局错误处理程序中访问 DbEntityValidationException?

javascript - nodejs 的 express 和 socketio 之间的区别

JAVA实时控制台-控制线程