FreeRTOS学习(5)

队列管理

队列的工作机制

队列通过FIFO的机制在任务间传递数据,主要有两种传输手段,而:

FreeRTOS uses the queue by copy method.

内存的读写都会产生任务的阻塞.

队列的使用
创建队列
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );
/*创建队列,接受两个参数
*uxQueueLength:创建队列的长度
*uxItemSize:队列中单个存储单元的大小(详情参考前几篇文章内容中提到的内存对齐)
*return:一个队列handle,用于标识身份
*/
在队列中添加内容
BaseType_t xQueueSendToFront( QueueHandle_t xQueue,
 const void * pvItemToQueue,
 TickType_t xTicksToWait );
 /*向队列头传送消息,接受三个参数
 *xQueue:传送消息队列handle
 *pvItemToQueue:传送消息的地址
 *xTicksToWait:任务等待队列所阻塞的最长时间
 *return:pdPASS和errQUEUE_FULL
 */
 BaseType_t xQueueSendToBack( QueueHandle_t xQueue,
 const void * pvItemToQueue,
 TickType_t xTicksToWait );
 /*
 *向队列尾传送消息,接受三个参数
 *和上面的几乎没区别,不赘述
 */
接收队列
BaseType_t xQueueReceive( QueueHandle_t xQueue,
 void * const pvBuffer,
 TickType_t xTicksToWait );
 /*
 *接收队列,接受三个参数
 *xQueue
 *pvBuffer:Queue所带着的数据包
 *xTicksToWait
 *return:pdPASS 和 errQUEUE_EMPTY
 */
队列状态查询
UBaseType_t uxQueueMessagesWaiting( QueueHandle_t xQueue );
/*
*查询有多少个在队列中等待传递
*xQueue
*return:剩余数目
*/
多资源的队列工作机制(重要)

虽然简单,但是涉及到两个内容蛮有意思

第一个是数据包定义的事情,节选自官方文档

/* Define an enumerated type used to identify the source of the data. */
typedef enum
{
 eSender1,
 eSender2
} DataSource_t;
/* Define the structure type that will be passed on the queue. */
typedef struct
{
 uint8_t ucValue;
 DataSource_t eDataSource;
} Data_t;
/* Declare two variables of type Data_t that will be passed on the queue. */
static const Data_t xStructsToSend[ 2 ] =
{
 { 100, eSender1 }, /* Used by Sender1. */
 { 200, eSender2 } /* Used by Sender2. */
};

第二个是由于receive的优先级低,导致了队列充满,因而send函数被阻塞,使得receive能够运行

用队列传输指针

思路没有变化,要注意的内容不来源于FreeRTOS中,来源于内存的使用是否合法.

有个有意思的事情是,由于FreeRTOS队列传输的办法用的是copy,所以表面上有种在传引用的感觉,和前文内容相违背,实际上并没有.

队列组

掌握几个给出的api,参数和返回值和前面提到的没有太大区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值