首页 > 其他 > 详细

队列管理

时间:2020-08-10 19:52:34      阅读:71      评论:0      收藏:0      [点我收藏+]

FreeRTOS中的任务之间会通信以实现某些功能,通信功能是基于队列实现的。队列可以保存有限个确定长度(称为深度)的数据的单元,通常队列作为FIFO使用

队列可以被多个任务写入(经常)和读出(少见),

任务读取队列超时,任务保持阻塞,等待队列有效数据的出现。多个任务处于阻塞等待队列有效数据时,只有最高优先级任务被解除阻塞。

任务写入队列超时,则不再写入。和读取一样,多个任务阻塞等待写入队列,只有最高优先级任务会被准许写入。

1.如何创建一个队列

 

xQueueCreate() API

函数队列由声明为xQueueHandle 的变量进行引用。xQueueCreate()用于创建一个队列,并返回一个xQueueHandle 句柄以便于对其创建的队列进行引用。

FreeRTOS创建队列从堆空间中分配空间,堆内存不够时返回NULL。

 

xQueueSendToBack() 与 xQueueSendToFront() API 函数

xQueueSendToBack()用于将数据发送到队列

尾;而xQueueSendToFront()用于将数据发送到队列首。

 

xQueueReceive()与xQueuePeek() API 函数

xQueueReceive()用于从队列中接收(读取)数据单元。接收到的单元同时会从队列中删除。

xQueuePeek()也是从从队列中接收数据单元,不同的是并不从队列中删出接收到的单元。xQueuePeek()从队列首接收到数据后,不会修改队列中的数据,也不会改变数据在队列中的存储序顺。

 

uxQueueMessagesWaiting() API 函数

uxQueueMessagesWaiting()用于查询队列中当前有效数据单元个数。

 

可以用队列传递复合数据类型

一个简单的方式就是结构体,

技术分享图片

 

2.队列如何管理其数据

写一般有较高优先级,写满队列之后,写入任务进入阻塞态,而后最低优先级读任务开始,读出队列数据之后,队列清空。写任务检测到队列清空,又开始写入。
3.如何向队列发送数据

正常发送
4.如何从队列接收数据

正常接收
5.队列阻塞是什么意思

暂时让CPU进行优先级更高的任务
6.往队列发送和从队列接收时,任务优先级会有什么样的影响

发送给队列的优先级一般比接受队列信息的优先级更高。

7.如果工作于大型主数据单元

最好用队列来传递数据的指针,而不是完整的数据。

指针指向的内存空间必须有效。及时释放。

 

队列管理

原文:https://www.cnblogs.com/easterncabbage/p/13442940.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!