- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
等待一个邮箱中的消息OSMboxPend() OSMboxPend()用于任务等待消息。消息通过中断或另外的任务发送给需要的任务。消息是一个以指针定义的变量,在不同的程序中消息的使用也可能不同。如果调用OSMboxPend()函数时消息邮箱已经存在需要的消息,那么该消息被返回给OSMboxPend()的调用者,消息邮箱中清除该消息。如果调用OSMboxPend()函数时消息邮箱中没有需要的消息,OSMboxPend()函数挂起当前任务直到得到需要的消息或超出定义等待超时的时间。如果同时有多个任务等待同一个消息,μC/OS-Ⅱ默认最高优先级的任务取得消息并且任务恢复执行。一个由OSTaskSuspend()函数挂起的任务也可以接受消息,但这个任务将一直保持挂起状态直到通过调用OSTaskResume()函数恢复任务的运行。参数pevent是指向即将接受消息的消息邮箱的指针。该指针的值在建立该消息邮箱时可以得到;Timeout允许一个任务在经过了指定数目的时钟节拍后还没有得到需要的消息时恢复运行。如果该值为零表示任务将持续的等待消息;Err是指向包含错误码的变量的指针;返回值OSMboxPend()函数返回接受的消息并将*err置为OS_NO_ERR;如果在指定数目的时钟节拍内没有接受到需要的消息,OSMboxPend()函数返回空指针并且将*err设置为OS_TIMEOUT。发送一个消息到邮箱中OSMboxPost()OSMboxPost()函数通过消息邮箱向任务发送消息。如果消息邮箱中已经存在消息,返回错误码说明消息邮箱已满。OSMboxPost()函数立即返回调用者,消息也没有能够发到消息邮箱。如果有多个任务在等待消息邮箱的消息,最高优先级的任务将得到这个消息。参数pevent是指向即将接受消息的消息邮箱的指针。Msg是即将实际发送给任务的消息。消息是一个指针长度的变量,在不同的程序中消息的使用也可能不同。不允许传递一个空指针,因为这意味着消息邮箱为空。返回值OS_NO_ERR:消息成功的放到消息邮箱中。OS_MBOX_FULL:消息邮箱已经包含了其他消息,不空。OS_ERR_EVENT_TYPE:pevent不是指向消息邮箱的指针。无等待地从邮箱中得到一个消息OSMboxAccept()OSMboxAccept()函数查看指定的消息邮箱是否有需要的消息。不同于OSMboxPend()函数,如果没有需要的消息,OSMboxAccept()函数并不挂起任务。如果消息已经到达,该消息被传递到用户任务并且从消息邮箱中清除。参数pevent是指向需要查看的消息邮箱的指针。返回值如果消息已经到达,返回指向该消息的指针;如果消息邮箱没有消息,返回空指针。查询一个邮箱的状态OSMboxQuery()OS_MBOX.C任务或中断OS_MBOX_ENOSMboxQuery()函数用来取得消息邮箱的信息。用户程序必须分配一个OS_MBOX_DATA的数据结构,该结构用来从消息邮箱的事件控制块接受数据。通过调用OSMboxQuery()函数可以知道任务是否在等待消息以及有多少个任务在等待消息,还可以检查消息邮箱现在的消息。参数pevent是指向即将接受消息的消息邮箱的指针。Pdata是指向OS_MBOX_DATA数据结构的指针,该数据结构包含下述成员: Void*OSMsg; /*消息邮箱中消息的复制*/ INT8UOSEventTbl[OS_EVENT_TBL_SIZE]; /*消息邮箱等待队列的复制*/ INT8UOSEventGrp;返回值OS_NO_ERR:调用成功OS_ERR_EVENT_TYPE:pevent不是指向消息邮箱的指针。初始化ECB块的等待任务列表:OSSemAccept()函数查看设备是否就绪或事件是否发生;不同于OSSemPend()函数,如果设备没有就绪,OSSemAccept()函数并不挂起任务;图F6.8是实现消息队列所需要的各种数据结构。这里也需要事件控制块来记录等待任务列表[F6.8(1)],而且,事件控制块可以使多个消息队列的操作和信号量操作、邮箱操作相同的代码。当建立了一个消息队列时,一个队列控制块(OS_Q结构,见OS_Q.C文件)也同时被建立,并通过OS_EVENT中的.OSEventPtr域链接到对应的事件控制块[F6.8(2)]。在建立一个消息队列之前,必须先定义一个含有与消息队列最大消息数相同个数的指针数组[F6.8(3)]。数组的起始地址以及数组中的元素数作为参数传递给OSQCreate()函数。**第八讲(4)任务同步与通信授
您可能关注的文档
最近下载
- “产业襄阳”发展战略规划.doc VIP
- 2013款东风雪铁龙C5_汽车使用手册用户操作图解驾驶指南车主车辆说明书电子版.pdf
- 运动营养学(第三版)课件全套 第1--10章 运动营养学基础、 健身运动的合理膳食营养---运动.pptx
- 《门诊院感》课件.pptx VIP
- 2024-2025学年上海市奉贤区高三上学期高考一模物理试卷含详解.docx
- DB45_T618-2009:建筑施工模板及作业平台钢管支架构造安全技术规范.pdf VIP
- 2023年河北省衡水中学自主招生数学模拟试卷及答案解析.pdf
- 2024驾校学员管理制度 .pdf VIP
- 2024年四川省中考语文试卷十六套合卷含答案.pptx VIP
- 程家惠《洋话汉音》(升级版).doc
文档评论(0)