打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
消息邮箱OSMboxCreate ((void*)0);

消息邮箱OSMboxCreate ((void*)0);  

2008-05-20 10:22:54|  分类: 嵌入式面试 |字号 订阅

举例:

OS_EVENT *Str_Box;

................

Str_Box = OSMboxCreate ((void*)0);   //创建

................

void  MyTask (void *pdata)
{
    for (;;)
    {
      sprintf(s,"%d" ,Times);
      OSMboxPost(Str_Box,s);  //发送消息
      Times++;      
        OSTimeDlyHMSM(0, 0, 1, 0); //等待1秒
    }
}

....................

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);  //等待1秒
    }
}

建立一个邮箱,OSMboxCreate()

1) 使用邮箱之前,必须先建立邮箱。该操作可以通过OSMboxCreate()函数来完成,并且须定义指针的初始值。

2) 一般,这个初始值是NULL,但也可以初始化一个邮箱,使其在最开始就包含一条消息。

&8226;     如果使用邮箱的目的是通知一个事件的发生(发送一条消息),那么就要初始化该邮箱为空,即NULL。因为在开始时(很有可能)事件还没有发生。

&8226;     如果用邮箱共享某些资源,那么就要初始化该邮箱为一个非NULL的指针。在这种情况下,邮箱被当成一个二值信号量使用。

等待邮箱中的消息,OSMboxPend()

1) 如果邮箱中有消息(非NULL指针):

&8226;     那么,从邮箱中取出该消息,返回给调用函数,并将NULL指针存入邮箱中。

&8226;   同时,OSMboxPend()函数将“无错”代码(OS_NO_ERR)返回给它的调用函数。这个返回结果表示,已由另一个任务或者中断服务子程序将消息发送到邮箱中,这也是运行OSMboxPend()函数最快的情况。

2)    如果邮箱为空:

&8226;   则,调用OSMboxPend()函数的任务要进入睡眠状态,等待另一个任务(或者中断服务子程序)通过邮箱发送消息。

&8226;   OSMboxPend()允许定义一个最长等待时间作为它的参数(超时时限),这样可以避免该任务无限期地等待邮箱的消息。

3)

&8226;   如果该参数值是一个大于0的值,那么OSMboxPend()函数挂起该任务,该任务将一直等到邮箱获得消息或者等待超时。

&8226;   如果该参数值为0,则该任务将无限期地等待下去。

向邮箱发送一则消息,OSMboxPost()

    如果从中断服务子程序中调用OSMboxPost()函数,那么,这时并不发生任务的切换。因为,中断服务子程序引起的任务切换只发生在中断嵌套的最外层和中断服务子程序调用OSIntExit()函数时。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ucos II 任务间 通信之四:邮箱
CoOS使用教程--消息队列
第十二章 对话框和对话框类CDialog
*a and *&a作为参数的区别
CFormView
聊一聊Android的消息机制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服