Ucosii消息邮箱使用

//设置任务优先级

#define LED_TASK_Prio 6
#define LED1_TASK_Prio 5

 

用到的UCOSII函数
消息邮箱创建函数:
OS_EVENT *OSMboxCreate (void *msg)
请求消息邮箱函数:
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
向邮箱发送消息函数:
INT8U OSMboxPost (OS_EVENT *pevent, void *msg)//向等待任务表中高优先级的任务发送消息
广播邮箱消息函数:
INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)//向等待任务表中所有任务发送消息

 

按键扫描任务中,如果KEY0被按下,那么将向消息邮箱Str_Box发送消息1,
i=1;
OSMboxPost(Str_Box,&i); //发送消息1
如果KEY1被按下,那么将发送消息2,
i=2;
OSMboxPost(Str_Box,&i); //发送消息2
如果KEY2(WK_UP)被按下,将向所有等待任务表中所有任务发送消息3,
i=3;
OSMboxPostOpt(Str_Box,&i,OS_POST_OPT_BROADCAST); //向所有任务广播消息3

 

实验现象:

我们可以看到,如果我们按下KEY0,因为TaskLed1的优先级别高于TaskLed,所以当两个任务都在等待的时候,只有TaskLed1可以收到消息1,所以两个LED都不反转。
如果按下KEY1,那么TaskLed1收到消息2,状态反转。
如果按下KEY2,那么TaskLed1和TaskLed都会收到消息,这个时候两个LED状态都会反转。

OSMboxPostOpt()OSMboxPost()的区别在于前者是广播消息,所有等待任务都可以收到,后者只会高优先级的任务收到。

下面给出消息邮箱的使用例程

[objc] view plain copy print?更多关于云服务器域名注册虚拟主机的问题,请访问西部数码官网:www.west.cn

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » Ucosii消息邮箱使用

登录

找回密码

注册