yzai的个人空间 https://passport2.21ic.com/?1197968 [收藏] [复制] [RSS] 我想永生,精神或者肉体最终接受不了时间的洗礼

日志

ucosii邮箱机制的简单快速记忆理解

已有 282 次阅读2018-6-19 13:38 |个人分类:ucosii|系统分类:兴趣爱好

ucosii邮箱机制的简单快速记忆理解

邮箱(消息邮箱):在多任务操作系统中,任务与任务之间常常需要通过传递一个数据的方式来进行通信。为了传递数据,可以在内存中创建一个存储空间作为该数据的
缓冲区。A任务向该缓冲区发数据,即向邮箱发送消息;B任务向该缓冲区请求数据,即从邮箱取得消息。这样就能使A任务和B任务之间实现简单通信。

UCOSII 中,与消息邮箱相关的几个函数。
1) 创建邮箱函数
创建邮箱通过函数 OSMboxCreate 实现,该函数原型为:
OS_EVENT *OSMboxCreate (void *msg);
函数中的参数 msg 为消息的指针,函数的返回值为消息邮箱的指针。
调用函数 OSMboxCreate 需先定义 msg 的初始值。在一般的情况下,这个初始值为NULL;例如:msg_key=OSMboxCreate((void*)0);//创建消息邮箱

2) 向邮箱发送消息函数
任务可以通过调用函数 OSMboxPost 向消息邮箱发送消息,这个函数的原型为:
INT8U OSMboxPost (OS_EVENT *pevent,void *msg);
其中 pevent 为消息邮箱的指针, msg 为消息指针。例如在A任务中发送消息:OSMboxPost(msg_key,(void*)key1);/将key1中的值发送到消息邮箱msg_key中

3) 请求邮箱函数
当一个任务请求邮箱时需要调用函数 OSMboxPend,这个函数的主要作用就是查看邮箱指针 OSEventPtr 是否为 NULL,如果不是 NULL 就把邮箱中的消息指针返回给调用函数的任务,同时用 OS_NO_ERR 通过函数的参数 err 通知任务获取消息成功;如果邮箱指针OSEventPtr 是 NULL,则使任务进入等待状态,并引发一次任务调度。
函数 OSMboxPend 的原型为:
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err);
其中 pevent 为请求邮箱指针, timeout 为等待时限, err 为错误信息。例如在B任务中请求消息:key2=(u32)OSMboxPend(msg_key,10,&err);//请求邮箱消息,把邮箱msg_key中的数据赋给key2,以上就相当于key2=key1语句。

例程见原子103zet6开发板中的ucosii实验例程

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)