第6章 基于嵌入式操作系统的应用开发3

第6章 基于嵌入式操作系统的应用开发3

ID:43739403

大小:2.38 MB

页数:44页

时间:2019-10-13

第6章  基于嵌入式操作系统的应用开发3_第1页
第6章  基于嵌入式操作系统的应用开发3_第2页
第6章  基于嵌入式操作系统的应用开发3_第3页
第6章  基于嵌入式操作系统的应用开发3_第4页
第6章  基于嵌入式操作系统的应用开发3_第5页
资源描述:

《第6章 基于嵌入式操作系统的应用开发3》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、操作系统应用开发目标:本章向学员介绍任务的同步机制及通信方式,通过本课的学习,学员应该掌握如下知识:事件控制块的概念信号量及其使用消息邮箱及其使用消息队列及其使用学时:3.59.1任务间的同步和事件控制块嵌入式系统中的各个任务都是以并发的方式运行,为同一个大任务服务。不可避免地要共同使用一些共享资源。多任务协作处理,需要相互的支持和限制。所以,系统必须具有完备的同步和通信机制。9.1.1任务间的同步为了实现各任务之间的合作和无冲突的运行,在各任务之间必须建立一些制约关系。直接制约关系:源于任务之间的合作。间接制约关系:源于对资源的共享。在多任务合作工作的过程中,操作系统应该解决的两个问题:各

2、任务之间的互斥关系。相关的任务在执行上要有先后次序。任务之间这种制约性的合作运行机制叫做任务间的同步。任务的同步是依靠任务之间互相发送消息来保证同步的。9.1.2事件事件任务1任务2发送事件请求事件图两个任务使用事件进行通信示意图任务间的同步依赖于任务间的通信。在uC/OS-II中,使用信号量、邮箱和消息队列这些被称作事件的中间环节来实现任务间的通信。任务1的责任是把信息发送到事件上,这项操作叫做发送事件。任务2的责任是通过事件操作对事件进行查询:如果有信息,则读取信息,如果没有,则等待。uC/OS-II把任务发送事件、请求事件以及其他对事件的操作都定义为全局函数,以供应用程序的所有任务来调

3、用。9.1.2.1信号量使用信号量的目的:为共享资源设立一个表示该共享资源被占用情况的标志。日常生活中的共享资源---列车卫生间、公共停车场的使用规则。互斥型信号量、计数式信号量。信号量任务1任务2先请求信号量图两个任务使用信号量进行通信示意图后请求信号量1->0共享资源信号量任务1任务2发送信号量请求信号量0->1->0共享资源例程9-1:本例的应用程序中有2个用户任务:MyTask和YouTask。这两个任务都要访问同一个共享资源s,但YouTask访问s需要的时间长一些(本例中使用了一个循环来模拟访问的时间),而MyTask访问s的时间要短一些,这样就不可避免的出现了在任务YouTas

4、k访问s期间,任务MyTask也来访问s,从而出现了干扰。在例4-1的应用程序中定义一个全局变量ac_key来作为信号量,并根据该信号量的状态来访问共享资源s,以解决冲突问题。例程9-2:如果把任务YouTask代码中的发信号语句ac_key=TRUE删掉,什么样结果?9.1.2.2消息邮箱在多任务系统中,常常需要在任务之间通过传递一个数据(这个数据叫做“消息”)的方式来进行通信。为达到这个目的,可在内存中创建一个存储空间作为该数据的缓冲区。如果把这个缓冲区叫做消息缓冲区,那么在任务间传递数据(消息)的一个最简单方法就是传递消息缓冲区的指针。用来传递消息缓冲区指针的数据结构就叫做消息邮箱。消

5、息邮箱任务1任务2发送消息(发送消息缓冲区指针)图两个任务使用消息邮箱进行通信示意图请求消息(读取消息缓冲区指针)指针消息缓冲区例程9-3:下面是一个利用消息邮箱进行通信的例子:本例中有两个任务MyTask和YouTask。由于任务YouTask要向任务MyTask发送消息,因此定义了一个全局的指针变量msg_p作为邮箱来传递消息的指针。9.1.2.3消息对列消息邮箱不仅可以用来传递一个消息,而且也可定义一个指针数组。让数组的每个元素都存放一个消息缓冲区指针,那么任务就可通过传递这个指针数组指针的方法来传递多个消息。用来传递多个消息的数据结构就叫做消息队列。消息队列任务1任务2发送消息队列(

6、发送消息缓冲区指针数组的指针)图两个任务使用消息对列进行通信示意图请求消息队列(读取消息缓冲区指针数组的指针)指针消息缓冲区1……消息缓冲区n消息缓冲区指针数组9.1.2.4等待任务列表对等待任务需要具有管理功能,包括2个方面:要对等待事件的所有任务进行记录并排序;应该允许任务有一定的等待时限。OSEventGrp1/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/0

7、1/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/0图事件的等待任务表任务等待表OSEventTbl[]在多任务系统中,当一个事件被占用时,其他请求该事件的任务在暂时得不到事件的服务时应该处于等待状态。因此作为功能完善的事件,应该有对这些等待任务有一定的管理功能。对于等待任务事件的记录,采用与任务就绪表类似的方法,数组OSEventTbl[]作为记录等待事件任

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。