队列管理

摘要:
可以保存的最大队列数称为队列深度。创建队列时,需要确定队列的长度和每个单元的大小。xQueueHandlexQueueCreate;//单个元素的大小RETURNVALUE:NULL:如果没有空间。xQueueHandle:队列的句柄。读取队列时,如果队列为空,则读取队列函数将阻塞。XQueuePeek()通过xQueueReceive()从队列中获取元素。portBASE_TYPExQueueReceive(xQueueHandlexQueue,//队列句柄constvoid*pvBuffer,//接收缓存指针指向一个内存区域,以接收从队列复制的数据。
1.队列的特性

队列可以保存有限个具有确定长度的数据单元。队列可以保存最大数目被称为队列的深度。在创建队列时需要确定队列的长度和每个单元的大小。

xQueueHandle xQueueCreate(unsigned portBASE_TYPE uxQueueLength,//the depth of the queue

unsigend portBASE_TYPE uxItemSzie);//the size of a single element

RETURN VALUE :

NULL :there if not enougth space .

xQueueHandle :the handle of the queue .            

当读队列时,队列为空,那么读队列函数将会阻塞。通过xQueueReceive(),xQueuePeek()从队列中获取元素(中断中调用xQueueReceiveFromISR())。可以通过函数第三个参数设置超时,若在超时时间内没有读取到数据,则函数返回NULL.当多个任务同时等待读取同一个队列时,优先级最高的,和等待时间最长的任务会优先读取到队列。

portBASE_TYPE xQueueReceive (xQueueHandlle xQueue,//队列句柄

const void * pvBuffer,//接收缓存指针,指向一段内存区域,用来接收从队列中拷贝来的数据。

portTickType xTicksToWait);//设置超时时间,单位是心跳。

写队列和读队列的阻塞情况相同。

2.工作于大型数据单元

如果队列存储数据单元较大,那么最好是利用队列来传递数据指针,而不是队列数据本身在队列上一字节一字节拷贝。传递指针注意以下两点

1.指针指向的内存空间的所有权必须明确。(原则上,共享内存在其指针发送到队列之前,内容只允许被发送任务访问:共享内存指针指针从队列读出后,其内容也之循序被接收任务访问)。

2.指正指向的内存空间必须有效(如果指针指向的内存是动态分配的,只应该有一个任务负责对其进行内存释放)。

免责声明:文章转载自《队列管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇友元vue+webpack+npm搭建的纯前端项目下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

寒假作业3:抓老鼠啊~亏了还是赚了?(指针法)

7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X)。捕鼠夹可重复利用,不计成本,奶酪每块3元。聪明的老鼠呢?它们每天可能会派出一只老鼠到墙角,看看墙角有啥: 若什么也没有(X...

澄清VB调用API时字符串参数的困惑

声明:本文部分内容来源于网络! 首先,我认为这样花费精力去研究VB调用API字符串的种种猫腻是很有必要的。本着严谨和发现问题与解决问题的原则,和为了能更好的认识问题的本质,我特写了这篇冗长的讨论。网上有很多关于此的讨论,但比较杂乱,目的不明确,也很难懂。在此也就是做个总结吧!让大家能有一个清楚认识。 我的问题是从调用内存API时参数的ByVal VarPt...

Delphi 关于指针Pointers 和@操作符

Delphi 关于指针Pointers 和@操作符 1、指针Pointers 指针是如何工作的,例如: 1 var 2 X, Y: Integer; // X和Y是整数变量 3 P: ^Integer; // P指向一个整数 4 begin 5 X := 17; // 给X赋值 6...

Android指针管理:RefBase,SP,WP (二)

(1)在Android中,RefBase结合了sp和wp,实现了一套通过引用计数的方法来控制对象声明周期的方法。 RefBase的定义在/frameworks/base/include/utils/RefBase.h,实现在/frameworks/base/libs/utils/RefBase.cpp。wp的定义在/frameworks/base/incl...

Java虚拟机14:Java对象大小、对象内存布局及锁状态变化

一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法。不过还好,在JDK1.5之后引入了Instrumentation类,这个类提供了计算对象内存占用量的方法。至于具体Instrumentation类怎么用就不说了,可以参看这篇文章如何精确地测量java对象的大小。 不过有一点不同的...

delphi中nil、null、UnAssigned区别

nil:空指针,空地址,对象也是指针,所以可以object:=nil;null:null是一个未定义值的变量,既不是0也不代表空字符串,它是未定义的。http://www.delphibasics.co.uk/RTL.asp?Name=Null判断对象为不为空用ifassigned(object)then和ifobject=nilthen都一样可以。 ni...