今天做消息和邮箱部分的移植,移植时需要学习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)
这里的定义可以理解为是定义了一个邮箱,是邮箱就有容量。邮箱空的时候,从里面取邮件就需要等待;邮箱满的时候,向里面放邮件就需要等待。所以