CMSIS-RTOS的消息队列使用备注

本文介绍了CMSIS-RTOS中消息队列和内存池的使用,包括内存池的宏定义和函数,消息队列的创建及操作。通过三个例程展示了消息队列的工作原理,如发送等待、接收等待以及不同发送周期的影响。
摘要由CSDN通过智能技术生成

今天做消息和邮箱部分的移植,移植时需要学习CMSIS-RTOS的消息队列使用方式,弄明白花了我不少时间和精力,因此想记录下来。

内存池

CMSIS-RTOS的消息队使用前首先要创建消息内容的结构体,需要用到内存分配。

内存池的宏:

//使能内存池
#define osFeature_Pool         1    //1:使能;0:失能

//定义内存池
#define osPoolDef(name, no, type)    //name:内存池名称;no:内存池大小;type:内存池类型


//获取内存池定义
#define osPool(name)

其他的都好理解,需要注意的是osPoolDef这个宏里的no和type,type是自定义的变量、结构体或数组,以后统称为block,而no则是创建时需要分配的block的数量。

内存池的函数:

//创建内存池
osPoolId osPoolCreate (const osPoolDef_t *pool_def);

//分配内存池
void *osPoolAlloc (osPoolId pool_id);

//分配内存池,并初始化为0
void *osPoolCAlloc (osPoolId pool_id);

//释放内存池
osStatus osPoolFree (osPoolId pool_id, void *block);

内存池的函数都很好理解,就不详细说了

 

消息队列

申请了内存池并分配了内存,就可以将内存的地址通过消息队列发出去。

消息队列的宏:

//使能消息队列
#define osFeature_MessageQ     1    //1:使能;0:失能

//定义消息队列
#define osMessageQDef(name, queue_sz, type)    //name:队列名称;no:队列大小;type:队列类型


//获取消息队列定义
#define osMessageQ(name)

这里的定义可以理解为是定义了一个邮箱,是邮箱就有容量。邮箱空的时候,从里面取邮件就需要等待;邮箱满的时候,向里面放邮件就需要等待。所以

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值