本文介绍了FreeRTOS队列的创建、发送和阻塞接收的过程和原理,以及基于队列实现的其它系统功能。
由于FreeRTOS很多API其实是通过宏定义,不同的FreeRTOS版本,宏的实际函数可能不相同,所以,本文并不区分是宏还是函数。
队列的创建
- 创建队列管理结构体Queue_t,包括申请内存
- 申请队列内容所需内存,填充Queue_t
创建队列接口:
xQueueCreate( uxQueueLength, uxItemSize )
返回QueueHandle_t,其实是void *.
申请队列管理结构体内存:
pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) );
申请队列内容所需内存,并填充Queue_t:
pxNewQueue->pcHead = ( int8_t * ) pvPortMalloc( xQueueSizeInBytes );
pxNewQueue->uxLength = uxQueueLength;
pxNewQueue->uxItemSize = uxItemSize;
返回Queue_t:
以void *的形式返回,使用时需要转换为Queue_t *.
队列发送
为了简便,以下使用“发送队列消息”代表“往队列中发送内容”。
任务可以使用创建队列时获得的全局变量QueueHandle_t,虽然它属于系统的变量,但是任务也可以访问。<