Freertos使用指南(2)队列

第二章 队列

1. 如何创建一个队列

xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize );

 

uxQueueLength 

队列深度。

uxItemSize

数据单元的长度,以字节为单位。

返回值

NULL :创建失败。 非 NULL :创建成功,作为操作此队列的句柄。

 

2.队列如何管理其数据

1.FIFO

        先写入的数据先被读出来

2.一般从队尾写入数据从队首读出数据

3.查询队列

unsigned portBASE_TYPE uxQueueMessagesWaiting( xQueueHandle xQueue );

xQueue

被查询队列的句柄。

返回值

数据个数。0:数据个数为空

3.如何向队列发送数据

1.发送数据到队尾

portBASE_TYPE xQueueSendToBack( xQueueHandle xQueue, const void * pvItemToQueue, portTickType xTicksToWait );

2.发送数据到队首

portBASE_TYPE xQueueSendToFront( xQueueHandle xQueue, const void * pvItemToQueue, portTickType xTicksToWait );

xQueue

目标队列的句柄

pvItemToQueue

发送数据的指针

xTicksToWait

阻塞超时时间

返回值

pdPASS :数据发送成功。errQUEUE_FULL :队列满/阻塞超时

 

3.中断中发送数据到队尾

xQueueSendToBackFromISR()

4.中断中发送数据到队首

xQueueSendToFrontFromISR()

4.如何从队列接收数据

1.接收数据同时删除数据

portBASE_TYPE xQueueReceive( xQueueHandle xQueue, const void * pvBuffer, portTickType xTicksToWait );

2.接收数据不删除数据

portBASE_TYPE xQueuePeek( xQueueHandle xQueue, const void * pvBuffer, portTickType xTicksToWait );

xQueue

被读队列的句柄。

pvBuffer

接收缓存指针

xTicksToWait

阻塞超时时间。

返回值

pdPASS:成功读取到数据。errQUEUE_FULL :队列无数据/阻塞超时

 

3.中断中接收数据同时删除数据

xQueueRceiveFromISR()

4.中断中接收数据不删除数据

xQueuePeekFromISR()

 

5. 队列阻塞是什么意思

队列阻塞分为读队列堵塞和写队列堵塞

1.读队列堵塞:一个任务读取队列时,队列为空,则任务进入阻塞态,当队列被写入数据后,该任务可从阻塞态进入就绪态。当等待队列数据时间超过设置等待时间,任务也会自动进入就绪态

2.写队列堵塞:一个任务写入队列时,队列全满,则任务进入阻塞态,当队列被读取数据后,该任务可从阻塞态进入就绪态。当等待队列数据时间超过设置等待时间,任务也会自动进入就绪态

 

6. 往队列发送和从队列接收时,任务优先级会有什么样的影响

1.写队列Task优先级大于读队列task优先级,队列被写满,写任务进入阻塞态,读队列任务,读取数据后,写队列任务进入就绪态继续写入数据到队列

2.读队列Task优先级大于写队列task优先级,队列被读空,读任务进入阻塞态,写队列任务,写入数据后,读队列任务进入就绪态继续从队列读出数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值