从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(九)消息队列 NO.2 消息队列常用函数讲解

从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(九)消息队列 NO.2 消息队列常用函数讲解

目录

一、消息队列创建函数 xQueueCreate():

二、消息队列静态创建函数 xQueueCreateStatic():

三、消息队列删除函数 vQueueDelete():

四、向消息队列发送消息函数:

五、从消息队列读取消息函数:


使用队列模块的典型流程如下:
 创建消息队列。
 写队列操作。
 读队列操作。
 删除队列。

一、消息队列创建函数 xQueueCreate():

       xQueueCreate()用于创建一个新的队列并返回可用于访问这个队列的队列句柄。队列句柄其实就是一个指向队列数据结构类型的指针

       每创建一个新的队列都需要为其分配内存空间一部分用于存储队列基本信息剩下的作为队列消息的存储区域

函数

QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,

 

                                                    UBaseType_t uxItemSize );

功能

用于创建一个新的队列。

参数

uxQueueLength

队列能够存储的最大消息单元数目,即队列长度。

uxItemSize

队列中消息单元的大小,以字节为单位。

返回值

如果创建成功则返回一个队列句柄,用于访问创建的队列。如果创建不成功则返回

 

NULL,可能原因是创建队列需要的RAM无法分配成功。

 

初始化消息队列:

初始化队列的成员变量,pcTail指向存储消息内存空间的结束地址

pcWriteTo指向队列消息存储区下一个可用消息空间,也就是pcHead指向的空间

pcReadFrom指向消息队列最后一个消息空间

初始化入队/出队阻塞列表。

 

QueueHandle_t Test_Queue =NULL;
#define QUEUE_LEN 4 /* 队列的长度,最大可包含多少个消息 */
#define QUEUE_SIZE 4 /* 队列中每个消息大小(字节) */
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
taskENTER_CRITICAL(); //进入临界区
/* 创建 Test_Queue */
Test_Queue = xQueueCreate((UBaseType_t ) QUEUE_LEN,/* 消息队列的长度 */
(UBaseType_t ) QUEUE_SIZE);/* 消息的大小 */
if (NULL != Test_Queue)
printf("创建 Test_Queue 消息队列成功!\r\n");
taskEXIT_CRITICAL(); //退出临界区

        在创建消息队列的时候,是需要用户自己定义消息队列的句柄指针

        创建完成会返回消息队列的句柄,用户通过句柄就可使用消息队列进行发送与读取消息队列的操作,如果返回的是NULL则表示创建失败

二、消息队列静态创建函数 xQueueCreateStatic():

不常用,略。

三、消息队列删除函数 vQueueDelete():

        队列删除函数是根据消息队列句柄直接删除的,删除之后这个消息队列的所有信息都会被系统回收清空,而且不能再次使用这个消息队列了

        xQueue是vQueueDelete()函数的形参,是消息队列句柄,表示的是要删除哪个想队列

        注意: 在消息队列有消息的时候、有任务阻塞在消息队列上等待消息的时候,尽量不要删除它,虽然源码并没有禁止删除的操作,但是为了代码健壮性,还是需要注意的

#define QUEUE_LENGTH 5
#define QUEUE_ITEM_SIZE 4
int main( void )
{
QueueHandle_t xQueue;
/* 创建消息队列 */
xQueue = xQueueCreate( QUEUE_LENGTH, QUEUE_ITEM_SIZE );
if ( xQueue == NULL ) {
/* 消息队列创建失败 */
} else {
/* 删除已创建的消息队列 */
vQueueDelete( xQueue );
}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值