美工素材网站,网站服务器放置地 网站接入服务提供单位怎么填,wordpress 获取当前文章的id,网站热力图工具1.队列管理 #xff08;1#xff09;数据存储 队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下#xff0c;队列被作为FIFO
(先进先出)使用#xff0c;即数据由队列尾…1.队列管理 1数据存储 队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下队列被作为FIFO
(先进先出)使用即数据由队列尾写入从队列首读出。当然由队列首写入也是可能的。 往队列写入数据是通过字节拷贝把数据复制存储到队列中从队列读出数据使得把队列中的数据拷贝删除。 2可被多任务存取 队列是具有自己独立权限的内核对象并不属于或赋予任何任务。所有任务都可以向同一队列写入和读出。一个队列由多方写入是经常的事但由多方读出倒是很少遇到。 3读队列时阻塞 当某个任务试图读一个队列时其可以指定一个阻塞超时时间。在这段时间中如果队列为空该任务将保持阻塞状态以等待队列数据有效。当其它任务或中断服务例程往其等待的队列中写入了数据该任务将自动由阻塞态转移为就绪态。当等待的时间超过了指定的阻塞时间即使队列中尚无有效数据任务也会自动从阻塞态转移为就绪态。由于队列可以被多个任务读取所以对单个队列而言也可能有多个任务处于阻塞 状态以等待队列数据有效。这种情况下一旦队列数据有效只会有一个任务会被解除阻塞这个任务就是所有等待任务中优先级最高的任务。而如果所有等待任务的优先级相同那么被解除阻塞的任务将是等待最久的任务。 4写队列时阻塞 同读队列一样任务也可以在写队列时指定一个阻塞超时时间。这个时间是当被写队列已满时任务进入阻塞态以等待队列空间有效的最长时间。 由于队列可以被多个任务写入所以对单个队列而言也可能有多个任务处于阻塞状态以等待队列空间有效。这种情况下一旦队列空间有效只会有一个任务会被解除阻塞这个任务就是所有等待任务中优先级最高的任务。而如果所有等待任务的优先级相同那么被解除阻塞的任务将是等待最久的任务。 5使用队列 xQueueCreate() API 函数
#define xQueueCreate( uxQueueLength, uxItemSize )
uxQueueLength 描述 队列能够存储的最大单元数目即队列深度。
uxItemSize 队列中数据单元的长度以字节为单位。
返回值 NULL表示没有足够的堆空间分配给队列而导致创建失败。非NULL值表示队列创建成功。此返回值应当保存下来以作为操作此队列的句柄。 队列在使用前必须先被创建。队列由声明为 xQueueHandle 的变量进行引用。xQueueCreate()用于创建一个队列并返回一个xQueueHandle句柄以便于对其创建的队列进行引用。当创建队列时FreeRTOS从堆空间中分配内存空间。分配的空间用于存储队列数 据结构本身以及队列中包含的数据单元。如果内存堆中没有足够的空间来创建队列xQueueCreate()将返回NULL。 xQueueSendToBack() 与 xQueueSendToFront() API 函数
如同函数名字面意思所期望的一样xQueueSendToBack()用于将数据发送到队列尾
而xQueueSendToFront()用于将数据发送到队列首。
xQueueSend()完全等同于xQueueSendToBack()。 但切记不要在中断服务例程中调用xQueueSendToFront()或xQueueSendToBack()。系统提供中断安全版本的 xQueueSendToFrontFromISR()与xQueueSendToBackFromISR()用于在中断服务中实现相同的功能。 xQueueReceive()与 xQueuePeek() API 函数
xQueueReceive()用于从队列中接收(读取数据单元。接收到的单元同时会从队列中删除。
xQueuePeek()也是从从队列中接收数据单元不同的是并不从队列中删出接收到的单元。xQueuePeek()从队列首接收到数据后不会修改队列中的数据也不会改变数据在队列中的存储序顺。
切记不要在中断服务例程中调用xQueueRceive()和xQueuePeek()。中断安全版本的替代API函数xQueueReceiveFromISR()。 uxQueueMessagesWaiting() API 函数
uxQueueMessagesWaiting()用于查询队列中当前有效数据单元个数。
切记不要在中断服务例程中调用uxQueueMessagesWaiting()。应当在中断服务中使用其中断安全版本uxQueueMessagesWaitingFromISR()。