- 1、本文档共209页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 消 息 6.1 消息邮箱管理6.1.1 概述 消息邮箱是一种通信机制,它能使任务或中断服务向另一个任务发送一个指针型的变量,这个指针指向一个包含指定“消息”的数据结构。消息邮箱发送的不是消息本身,而是消息的地址指针。 使用消息邮箱之前,必须先建立消息邮箱,并且要指定指针的初始值。一般情况下,这个初始值是NULL,但也可以在初始化时,就使其在最开始就包含一条消息。 消息邮箱主要用于两种目的:① 通知一个事件的发生;② 作二值信号量用。 1. 消息邮箱初始值的设置方法 消息邮箱初始值的设置方法如下: (1) 如果使用消息邮箱是用于通知一个事件的发生(发送一条消息),那么就要初始化该消息邮箱为NULL,因为在开始时,事件还没有发生。 (2) 如果作二值信号量用,即用于共享某些资源,那么就要初始化该消息邮箱为一个非NULL的指针。 2. 消息邮箱的特点 消息邮箱具有如下特点: (1) 消息邮箱中的内容是一个指向消息的指针,指针指向的内容即是消息; (2) 消息邮箱为满时,消息邮箱只包含一个指向消息的指针;消息邮箱为空时,消息邮箱的指针指向NULL; (3) 消息邮箱只能接收和发送一则消息,消息邮箱为满时,将丢弃新消息,保留旧消息。 3. 消息邮箱管理函数 如表6.1所示,μC/OS-Ⅱ提供了七种对消息邮箱的操作,消息邮箱函数所属文件是OS_MBOX.C。 4. 消息邮箱的配置常量 在使用消息邮箱函数之前,必须将OS_CFG.H文件中相应的配置常量设置为0或1,以确定是编译还是裁剪该函数,其配置常量如表6.2所示。 5. 任务、中断服务子程序与消息邮箱之间的关系 任务、中断服务子程序与消息邮箱之间的关系如图6.1所示。 图6.1 任务、中断服务子程序与消息邮箱之间的关系 6.1.2 建立消息邮箱——OSMboxCreate() 1. 函数原型 函数原型如下: OS_EVENT *OSMboxCreate(void *msg) 在使用消息邮箱之前,必须建立消息邮箱。OSMbox Create()函数用于建立并初始化消息邮箱。消息邮箱允许任务或中断向其它一个或几个任务发送消息。 OSMboxCreate()函数只有一个参数msg,指向消息的指针。该参数的设置方法如前一节所述,可以为空,也可以为非空。如果该指针不为空,建立的消息邮箱将含有消息。 函数的返回值是:指向分配给所建立的消息邮箱的事件控制块的指针。如果没有可用的事件控制块,则返回空指针。该函数所属文件为OS_MBOX.C,调用者为任务或启动代码,开关量为OS_MBOX_EN。 2. 程序流程及源代码 OSMboxCreate()函数程序流程及源代码如图6.2所示,说明如下: 图6.2 OSMboxCreate()函数程序流程与源代码 (1) 定义开关中断的方法。 (2) 中断服务子程序不能调用OSMboxCreate()函数。 (3) 从空余事件控制块链表中获得一个事件控制块ECB,OSEventFreeList指针指向的是第一个空余事件控制块。 (4) 检查事件控制块是否可用。 (5) 如果获取的事件控制块可用,则需要调整OSEvent FreeList指针,使其继续指向剩余的第一个空事件控制块。 (6) 如果事件控制块不可用,则返回。 (7) 如果事件控制块可用,则需设置事件控制块类型,其它消息邮箱函数可以通过检验该变量来确保操作的正确性。例如,可以防止OSMboxPost()函数对用于消息队列的控制块进行操作。 (8) 因为消息邮箱不使用该变量,所以赋值为0。该变量只有信号量才使用。 (9) 存入消息邮箱消息的初始值。 (10) 对等待任务列表进行初始化,因为此时消息邮箱正在建立中,一定没有任务在等待该消息,所以将?.OSEvent Grp和?.OSEventTbl[]清零。 (11) 返回一个指向事件控制块的指针,其它函数对消息邮箱的操作将通过这个指针进行,该指针就是消息邮箱的句柄。OSMboxCreate()函数返回前,事件控制块的内容如图6.3所示。 图6.3 OSMboxCreate()函数返回前,事件控制块的内容 3. 范例 OSMboxCreate()函数的使用范例如下:OS_EVENT *RxMbox; /*定义消息邮箱指针 */void main(void){ . OSInit(); /*初始化μC/OS-Ⅱ */ .
您可能关注的文档
- (AutoCAD2008精编基础教程)第7章尺寸标注.ppt
- (AutoCAD2008精编基础教程)第8章块操作.ppt
- (AutoCAD2008精编基础教程)第9章实体绘图.ppt
- (AutoCAD2008精编基础教程)第10章图形输出.ppt
- (嵌入式Linux开发入门)第1章系统概述.ppt
- (嵌入式Linux开发入门)第2章基于ARM9的开发平台硬件介绍.ppt
- (嵌入式Linux开发入门)第3章ADS下的硬件电路调试.ppt
- (嵌入式Linux开发入门)第4章EP9315的启动代码——Redboot.ppt
- (嵌入式Linux开发入门)第5章内核移植与编译.ppt
- (嵌入式Linux开发入门)第6章嵌入式Linux设备驱动程序的设计与实现.ppt
文档评论(0)