首页 > 程序开发 > 软件开发 > 其他 >

FreeRTOS初探——队列管理

2018-03-10

FreeRTOS初探——队列管理。

FreeRTOS初探——队列管理。

队列管理

FreeRTOS中,所有的通讯与同步机制都是基于队列实现的。

队列的特性

数据存储

队列可以保存有限个具有确定长度数据单元

在队列创建时,需要设定:

队列深度——队列可以保存的最大单元数目。 每个单元的大小

特性:
- FIFO(先进先出)——数据由队列尾部(Tail)写入,由队列头部(Head)读出
- 往队列写入数据——通过字节拷贝把数据复制存储到队列中。
- 从队列读出数据——把队列中的数据拷贝删除
- 队列是具有自己独立权限内核对象,并不属于或赋予任何任务所有任务都可以向同一个队列写入和读出
-

读队列时阻塞

某个任务试图读一个队列时,可以指定一个阻塞超时时间。 在阻塞超时时间内,若队列为空,该任务保持阻塞态等待数据有效。 当其他任务或中断往队列中写入数据,该任务自动由阻塞态转移为就绪态。 对单个队列而言,可能有多个任务处于阻塞态,以等待队列数据有效。这种情况下,一旦队列数据有效,只会有一个任务会被解除阻塞——这个任务是所有等待任务中优先级最高的任务。如果所有等待任务的优先级相同,则被接触阻塞的任务将是等待最久的任务。

写队列时阻塞

任务可在写队列时,指定一个阻塞超时时间。 阻塞超时时间是当被写队列已满时,任务进入阻塞态以等待队列空间有效的最长时间
2、如何创建一个队列?

创建队列 xQueueCreate()

函数功能:创建一个队列,并返回一个xQueueHandle具备以便对其创建的队列进行引用。 函数原型
xQueueHandle xQueueCreate( 
    unsigned portBASE_TYPE uxQueueLength,
    unsigned portBASE_TYPE uxItemSize );

3、队列如何管理器数据?

4、如何向队列发送数据?

5、如何从队列接收数据?

6、队列阻塞是什么?

7、往队列发送和从队列接收时,任务优先级有什么影响?

相关文章
最新文章
热点推荐