- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章消息管理讲述
第7章 消息管理 7.1 消息邮箱管理 7.1.1 概述 概念:邮箱是一种通信机制,它能使任务或中断服务向另一个任务发送一个指针型的变量,这个指针指向一个包含指定“消息”的数据结构。邮箱发送的不是消息本身,而是消息的地址指针。 使用邮箱之前,必须先建立邮箱,并且要指定指针的初始值。一般情况下,这个初始值是NULL,但也可以在初始化时,就使其在最开始就包含一条消息。 邮箱主要用于两种目的: 通知一个事件的发生; 作二值信号量用。 7.1.1.2 消息邮箱的特点 邮箱中的内容是一个指向消息的指针,指针指向的内容即是消息; 邮箱为满时,邮箱只包含一个指向消息的指针;邮箱为空时,邮箱消息的指针指向NULL; 邮箱只能接收和发送一则消息,邮箱为满时,将丢弃新消息,保留旧消息。 7.1.1.3 消息邮箱管理函数 如表7.1所示,μC/OS-II提供了7种对邮箱的操作,邮箱函数所属文件是OS_MBOX.C。 7.1.1.4 消息邮箱的配置常量 在使用邮箱函数之前,必须将 OS_CFG.H文件中相应的配置常量设置为0或1,以确定是编译还是裁剪该函数,其配置常量如表7.2所示。 7.1.1.5 任务、中断服务子程序与邮箱之间的关系 图7.1任务、中断服务子程序与邮箱之间的关系 7.1.2 建立邮箱,OSMboxCreate() 7.1.2.1 函数原型 OS_EVENT *OSMboxCreate(void *msg)reentrant 在使用邮箱之前,必须建立一个邮箱,OSMboxCreate()函数用于建立并初始化一个消息邮箱。消息邮箱允许任务或中断向其它一个或几个任务发送消息。 参数:msg,指向消息的指针。该参数的设置方法如前一节所述,可以为空,也可以不为空。如果该指针不为空,建立的消息邮箱将含有消息。 函数所属文件:OS_MBOX.C。 调用者:任务或启动代码。 配置常量:OS_MBOX_EN。 7.1.2.2 返回值 如果建立成功,函数返回指向分配给所建立的消息邮箱的事件控制块的指针。如果没有可用的事件控制块,则返回空指针。 图7.2 OSMboxCreate()流程与源代码 OS_EVENT 7.1.3 删除邮箱, OSMboxDel() 7.1.3.1 函数原型 OS_EVENT *OSMboxDel( OS_EVENT *pevent,INT8U opt,INT8U *err) reentrant 功能:用于删除邮箱。 所属文件:OS_MBOX.C。 调用者:任务。 配置常量:OS_MBOX_DEL_EN。 函数参数: pevent 指向邮箱的指针,该指针是邮箱建立时,返回给应用程序的指针; opt 用于定义邮箱删除条件的选项,可供选择的值如下: OS_DEL_NO_PEND 选择只能是没有任何任务在等待该邮箱的消息时,才能删除邮箱; OS_DEL_ALWAYS 不管有没有任务在等待邮箱的消息,都立即删除邮箱。删除后,所有等待邮箱消息的任务都立即进入就绪状态。 err 指向出错代码的指针,返回的出错代码可以是以下几种之一: OS_NO_ERR 调用成功,表明邮箱已被删除; OS_ERR_DEL_ISR 试图在中断服务子程序中删除邮箱; OS_ERR_INVALID_OPT 无效的opt参数; OS_ERR_EVENT_TYPE pevent不是指向邮箱的指针; OS_ERR_PEVENT_NULL 没有可以使用的OS_EVENT数据结构。 7.1.3.2 返回值 返回空指针NULL,表示邮箱已被删除; 返回pevent,表示邮箱没有删除,在这种情况下,应该进一步查看出错代码,找到出错原因。 7.1.3.3 应用要点 调用这个函数时,应该注意是否有其它任务还要使用这个邮箱; 当挂起的任务转入就绪时,中断是关闭的,这就使得中断延迟时间与等待邮箱的消息的任务数有关; 调用OSMboxAccpet()函数不能判断邮箱是否已经被删除。 7.1.4 等待邮箱中的消息, OSMboxPend() 7.1.4.1 函数原型 void *OSMboxPend( OS_EVNNT *pevent, INT16U timeout, INT8U*err ) reentrant 功能:用于任务等待消息。任务或者中断发出的消息是一个指针型的变量,在不同的应用中消息的使用也可能不同。该函数具有如下特点: 如果调用时邮箱中已有消息,那么该消息被返回给调用者,并从邮箱中清除该消息; 调用时,如果邮箱中没有消息,OSMboxPend()函数挂起当前任务直到得到需要的消息或等待超时期满; 如果同时有多个
您可能关注的文档
最近下载
- 园长研修总结(3篇).docx VIP
- 东证期货-商品基本面量化框架系列-二-:黄金择时因子及多周期合成.pdf VIP
- 2024年9月8日贵州省黔西南州州直遴选(事业单位考聘)笔试真题及答案解析.doc VIP
- 安徽省综合评标评审专家入库、续聘考试试题(含答案).docx VIP
- 第2章金属材料组织-4-清华大学-工程材料.ppt VIP
- 第2章金属材料组织-3-清华大学-工程材料.ppt VIP
- 2025政治理论时政热点知识试题库(含+答案).docx VIP
- 2025人民防空防护设备产品选型目录.docx VIP
- 第2章金属材料组织-1-清华大学-工程材料.ppt VIP
- Unit 4 Plants around us课件(63张PPT)三年级上册(2024版).pptx VIP
文档评论(0)