esp32队列Queue的操作
FreeRTOS 队列的xQueueSend和xQueueReceive操作FreeRTOS 队列是标准先进先出FIFOxQueueSend 尾部 Push入队xQueueReceive 头部 Pop出队一、xQueueSend尾部入队Push函数原型BaseType_t xQueueSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait );形参xQueue目标队列句柄pvItemToQueue待入队数据指针xTicksToWait队列满时的阻塞超时时间执行过程校验队列合法性队列未满将数据拷贝到队列尾部入队成功返回pdPASS队列已满超时时间 0 → 立即返回errQUEUE_FULL超时时间 0 → 任务阻塞等待空位超时前有空位 → 入队成功超时仍无空位 → 入队失败返回值pdPASS入队成功errQUEUE_FULL入队失败二、xQueueReceive () 头部出队Pop函数原型BaseType_t xQueueReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait );形参xQueue目标队列句柄pvBuffer接收数据的缓存指针xTicksToWait队列空时的阻塞超时时间执行过程校验队列 / 缓存合法性队列非空从队列头部拷贝数据到缓存删除头部数据出队成功返回pdPASS队列为空超时时间 0 → 立即返回errQUEUE_EMPTY超时时间 0 → 任务阻塞等待数据超时前有数据 → 出队成功超时仍无数据 → 出队失败返回值pdPASS出队成功errQUEUE_EMPTY出队失败三、总结队列FIFO 先进先出xQueueSend尾部 Push满则阻塞xQueueReceive头部 Pop空则阻塞数据拷贝式传递线程安全队列 管道只能从头出、从尾进无法随机读取无法保留头部读取中间想拿中间元素必须先移除前面所有元素