FreeRTOS队列
1、简介
FreeRTOS发送到队列的消息是通过拷贝实现的,这意味着队列存储的数据时原数据,而不是原数据的引用。
2、FreeRTOS队列基本用法
1)、定义一个队列句柄变量,保存创建的队列,如: QueueHandle_t Message_Queue;
2)、使用API函数xQueueCreate创建一个队列。
3)、如果希望使用先进先出队列,使用API函数xQueueSend()或xQueueSendToBack()向队列投递队列项。如果希望使用后进先出队列,使用API函数xQueueSendToFront()向队列投递队列项。如果在中断服务程序中,使用它们的带中断保护版本。
4)、使用API函数xQueueReceive()从队列读取队列项,如果在中断服务程序中,使用它们的带中断保护版本。
3、队列创建函数
3.1、函数描述
xQueueCreate( uxQueueLength, uxItemSize )
创建新队列。为新队列分配指定的存储空间并返回队列句柄。
3.2、参数描述
uxQueueLength—队列项数目。
uxItemSize—每个队列项大小,单位是字节。
3.2、返回值
成功创建队列返回队列句柄,否自返回0。
4、向队列投递队列项
4.1、函数描述
xQueueSend( xQueue, pvItemToQueue, xTicksToWait )
这是一个宏,这个宏向队列尾部投递一个队列项,项目以拷贝的形式入队,而不是引用形式入队。
4.2、参数描述
xQueue—队列句柄。
pvItemToQueue—指针,指向要入队的项目。要保存到队列中的项目字节数在队列创建时已由参数uxItemSize确定。
xTicksToWait—如果队列满,任务等待队列空闲的最大时间。
4.3、返回值
队列项入队成功返回pdTRUE,否则返回errQUEUE_FULL。
5、读取并移除队列项
5.1、函数描述
xQueueReceive( xQueue, pvBuffer, xTicksToWait )
从队列中读取一个队列项并把该队列项从队列中删除。读取队列项是以拷贝的形式完成,而不是以引用的形式,因此必须提供足够大的缓冲区以便容纳队列项。参数pvBuffer指向这个缓冲
区。
5.2、参数描述
xQueue—队列句柄。
pvBuffer—指向一个缓冲区,用于拷贝接收到的列表项。
xTicksToWait—要接收的项目队列为空时,允许任务最大阻塞时间。
5.3、返回值
成功接收到列表项返回pdTRUE,否则返回pdFALSE。