FreeRTOS的所有的通信和同步机制都通过队列来实现。 队列可以保存有限长度的数据单元,通常情况下,作为FIFO使用。
队列可以多任务访问。
1.读取阻塞
队列为空的阻塞,等到队列内有数据或者超过了阻塞时间,任务会切换到ready状态。
2.写入阻塞
队列为满的阻塞,
3.哪个任务优先解除阻塞的任务?
优先级最高,或者同优先级的等待时间最长的任务
4.大型数据队列
如果队列中数据单元的大小很大,建议使用指针来访问。
函数 | 功能 | 描述 |
---|---|---|
xQueueCreate | 创建队列 | 创建指定大小的队列,并返回队列句柄 |
xQueueSendToFront | 发送到队首 | 这是一个宏定义,由xQueueGenericSend实现 |
xQueueSendToBack | 发送到队尾 | 这是一个宏定义,由xQueueGenericSend实现 |
xQueueCRReceive | 读取 | 从队列接收数据,并将其从队列中删除 |
xQueuePeek | 接收 | 从队列接收数据,但是不删除接收的单元 |
uxQueueMessagesWaiting | 查询个数 | 查询有效数据单元个数(有中断安全版本 ISR) |