一. 消息邮箱的操作
OS_EVENT *OSMboxCreate (void *msg);
调用此函数须先定义msg的初始值,在一般的情况下,这个初始值为NULL;但也可以事先定义一个邮箱,然后把邮箱指针做为参数。
2. 向消息邮箱发送消息
INT8U OSMboxPost (OS_EVENT *pevent, void *msg); //该函数可以以广播的方式向事件等待任务表中的所有任务发送消息 //OS_POST_OPT_BROADCAST 把消息向所有等待任务发送 //OS_POST_OPT_NONE 只向优先级最高的等待任务发送 INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt);3. 请求消息邮箱
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err);
它的主要作用是查看邮箱指针OSEventPtr是否为NULL。如果不是NULL,则把邮箱中的消息指针返回给调用函数的任务;如果为NULL时,则使任务进行等待状态,并引发一次任务高度。
4. 查询邮箱的状态
INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata);
把相关信息存放在一个结构OS_MBOX_DATA中。
5. 删除邮箱
OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *err);
二. 例子:
/* 创建邮箱 */ Str_Box = OSMboxCreate((void*)0); /* MyTask 任务 */ void MyTask(void *pdata) { for (;;) { sprintf(s, "%d", Times); OSMboxPost(Str_Box, s); Times++; OSTimeDlyHMSM(0,0,1,0); /* 等待1s */ } } /* YouTask 任务 */ void YouTask(void *pdata) { for (;;) { ss = OSMboxPend(Str_Box, 10, &err); PC_DispStr(10,++y, /* 字符的显示位置 */ ss, /* 被显示的字符 */ DISP_BGND_BLACK+DISP_FGND_WHITE); OSTimeDlyHMSM(0,0,1,0); /* 等待1s */ } }当然例子是有问题的,首先如果任务不是交替调度的话,显示的内容就可能不是顺序的0,1,2,3.4...