第5章消息管理.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章消息管理

嵌入式操作系统 与程序设计 第5章 消息管理 5.1 消息邮箱 5.1.1 建立消息邮箱 5.1.2等消息 5.1.3 发消息 5.1.4 删除消息邮箱 5.1.5放弃邮箱等待 5.1.6 无等待请求消息 5.1.7查询邮箱状态 5.1.8 消息邮箱的例子 5.2 消息队列 5.2.1 消息队列数据结构 5.2.2 初始化消息队列 5.2.3 建立消息队列 5.2.4发消息到消息队列 5.2.5等待消息队列中的消息 5.2.6删除消息队列 5.2.7取得消息队列的状态 5.2.8消息队列应用举例 习题 在信号量、互斥信号量和事件标志组的内容结束后,读者对事件之间如何同步,如何根据不同需要设计同步程序,应该有了深入的理解和提高。本章的消息管理中包括消息邮箱和消息队列两方面的内容,适用于任务之间的信息交流和同步。从原理上讲,消息管理也应该属于事件管理的范畴 。 习题 1. 比较消息管理和信号量管理,指出他们的区别和共同点。 2. 消息队列管理使用了哪些数据结构,请描述他们之间的关系。 3. 请分析等待消息的过程都涉及了哪些数据结构,画出消息等待的流程。 4. 请分析发消息的过程都涉及了哪些数据结构,画出发消息的流程。 5. 请分析删除消息队列的过程都涉及了哪些数据结构,画出删除消息队列的流程。 6. 请分析提取消息队列信息的过程都涉及了哪些数据结构,画出提取消息队列信息的流程。 7. 有任务A、任务B。任务A接收屏幕上输入的数据,然后将该数据送给任务B,任务B能立刻打印出该数据。请采用消息管理编程实现任务A和任务B并上机实践。 8. 有任务A、任务B。任务A接收屏幕上输入的数据,然后将该数据送给任务B,任务B每20秒打印一次这20秒内接收到的数据。请采用消息队列管理编程实现任务A和任务B并上机实践。 5.1.4 删除消息邮箱 当消息邮箱不再使用了,就应该尽快归还给系统,即将消息占用的ECB归还给ECB空闲链表以备它用。消息邮箱的删除函数是OSMboxDel。删除一个消息也要涉及方方面面,因为可能有任务正在等待这个邮箱中的消息。 表5.5删除消息邮箱的函数OSMboxDel解析 5.1.5放弃邮箱等待 同放弃对信号量的等待类似,放弃等待邮箱也绝对不会是放弃本任务对邮箱的等待。放弃等待邮箱函数将放弃的是所有等待某邮箱的任务对该邮箱的等待或等待某邮箱的优先级最高的任务对邮箱的等待。 表5.6放弃等待邮箱函数OSMboxPendAbort解析 流程如下: 1.检查事件控制块指针是否有效及事件控制块类型是否有效。 2.如果pevent-OSEventGrp为0说明没有任务等待消息邮箱,取消等待的任务数是0,返回0。 3.否则根据参数opt(选项)进行分支转移,如为OS_PEND_OPT_BROADCAST,使用while语句循环地将等待该邮箱的每个任务用OS_EventTaskRdy来取消等待并使其就绪(除非任务还被挂起);如果为其他值则只将最高优先级的任务取消等待并就绪之。 4.返回取消等待信号量的任务数。 5.1.6 无等待请求消息 在中断服务程序和有些用户任务中,需要无等待的请求消息邮箱。也就是说,到邮箱中取邮件,如果有邮件就获得邮件,如果没有并不阻塞自己,而是继续执行其他代码。 OSMboxAccept就是无等待的请求消息邮箱函数,参数是请求的消息邮箱的ECB指针。该函数的返回值是指向邮箱的指针,如果没有取得消息,那么就返回空指针。 表5.7无等待地请求消息邮箱函数OSMboxAccept解析 首先参数检查ECB是否有效,如果有效,将消息邮箱中邮件的地址OSEventPtr赋值给pmsg,然后清邮箱内容,返回获得的邮件的地址pmsg。这样,如果邮箱中有邮件,那么返回邮件的地址,如果没有,返回值就是空地址。 5.1.7查询邮箱状态 消息邮箱状态查询函数OSMboxQuery的参数是ECB地址和一个指向OS_MBOX_DATA类型的地址。ECB地址指向邮箱,OS_MBOX_DATA类型的地址指向返回结果的一个S_MBOX_DATA类型的对象。 表5.9查询消息邮箱状态函数OSMboxQuery解析 Example5_1: task1任务每1秒记录运行次数,发送到消息邮箱; task2任务每1秒从消息邮箱接收消息并打印。 消息邮箱例程 5.1.8 消息邮箱的例子 假设有任务TaskMessageSen和TaskMessageRec, TaskMessageSen在事件片1创建一个邮箱,如果邮箱中已没有邮件,每秒向邮箱发送一个消息,消息内容为从0开始的计数值,该计数值每秒加1。任务TaskMessageRec从时间1开始,做的事情就是查看邮

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档