假设我有这种事件循环:
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/