第6章 基于嵌入式操作系统的应用开发3.ppt_第1页
第6章 基于嵌入式操作系统的应用开发3.ppt_第2页
第6章 基于嵌入式操作系统的应用开发3.ppt_第3页
第6章 基于嵌入式操作系统的应用开发3.ppt_第4页
第6章 基于嵌入式操作系统的应用开发3.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统的应用开发,目标:本章向学生介绍了任务的同步机制和通信方式,通过本课的学习,学生应该掌握以下知识:事件控制块的概念信号量及其使用邮箱及其使用消息队列及其9.1任务之间的同步和事件控制块不可避免地共享了一些共享资源。 多任务协作处理需要相互支持和限制。 因此,系统必须具有完全的同步和通信机制。 9.1.1任务之间的同步需要在各任务之间建立一些约束关系,以实现各任务之间的协作和无冲突的执行。 直接制约关系:来源于任务间的合作。 间接制约关系:来源于资源的共享。 中的组合图层性质变更选项。 在多任务协作过程中,操作系统需要解决的两个问题是任务之间的互斥关系。 相关任务必须具有执行优先级。 任

2、务间这种制约性的协调动作机制称为任务间的同步。 任务的同步通过在任务之间相互发送信息来保证同步。 9.1.2事件、事件、任务1、任务2、发送事件、请求事件、图2的任务使用事件来进行通信映像,任务间的同步依赖于任务间的通信。 在uC/OS-II中,使用信号量、邮箱、消息队列等事件这样的中间步骤来实现任务间的通信。 任务1的责任是将信息发送到事件,该操作被称为发送事件。 任务2的责任是通过事件操作查询事件。 有信息就读取信息,没有信息就等待。 uC/OS-II将对任务提交事件、请求事件和其他事件的操作定义为全局函数,以便应用程序中的所有任务都可以调用。 9.1.2.1信号量和使用信号量的目的:设置

3、用于指示该共享资源被共享资源占用的标志。 日常生活中的共享资源列车厕所公共停车场的使用规则。互斥型信号量、计数式信号量。信号量、任务1、任务2、先请求信号量、图2的任务使用信号量进行通信映像,后请求信号量、1 - 0、共享资源、信号量、任务1、任务2、发送中的任一个任务都访问相同的共享资源s, 由于YouTask访问s需要较长的时间(在此示例中,一个周期用于模拟访问时间)且MyTask访问s的时间较短,所以任务YouTask在访问s时也访问s并干扰任务MyTask 然后在示例41的应用程序中将全局变量ac_key定义为信号量,并根据信号量的状态来访问共享资源s以解决冲突问题。 例行程序9-2

4、:删除任务YouTask代码的发送语句ac_key=TRUE会产生什么结果? 9.1.2.2消息邮箱在多任务系统中通常需要通过在任务之间传递数据(将该数据称为“消息”)来进行通信。 为此,请在内存中创建作为数据缓冲区的存储空间。 将此缓冲区称为消息缓冲区时,在任务之间传递数据(消息)的最简单方法之一是将指针传递到消息缓冲区。 用于传递消息缓冲区指针的数据结构称为消息邮箱。 消息邮箱、任务1、任务2、发送消息(发送消息缓冲指针),图2的任务使用消息邮箱进行通信消息,请求消息(读取消息缓冲指针)、指针、消息缓冲例程9-任务YouTask定义全局指针变量msg_p,该变量将消息的指针作为邮箱传递,因

5、为它将消息发送到任务MyTask。 9.1.2.3消息对列、消息邮箱不仅可以传递消息,还可以定义指针数组。如果在数组的每个元素中存储消息缓冲区指针,则任务可以通过传递该指针数组指针来传递多条消息。 用于传递多条消息的数据结构称为消息队列。 消息队列、任务1、任务2、发送消息队列(发送消息缓冲区指针排列的指针),图2的任务是消息对列通信图像、请求消息队列(读取消息缓冲区指针排列的指针)、指针、消息任务应该允许有一定的等待时间。 在图示事件的等待任务表、任务等待表、OSEventTbl、多任务系统中,如果有一个事件被占用,那么请求该事件的其他任务在临时没有得到事件的服务的时候,应该是等待状态。 因

6、此,作为功能完备的事件,对于这些待机任务应该有一定的管理功能。 中的组合图层性质变更选项。 关于等待事件的记录,使用与任务准备表同样的方法,将数组OSEventTbl作为记录等待事件任务的记录表。 另外,在该待机任务表中依然按照任务的优先顺序排列,表示系统中的各任务在表中占据1位,与该1位对应的任务是事件的待机任务。 同样,为了加快对此表的访问速度,定义了表示等待任务表中任务组的变量OSEventGrp。 另外,关于任务等待时间,记录在等待任务的任务控制块TCB的成员OSTCBDly中,按每个时钟间隔中断服务程序维护该数据。 任务每经过一段等待时间,就从等待任务表中删除该任务,使其处于准备完毕

7、状态。 为了统一描述9.1.3事件控制块、事件的数据构造,uC/OS-II使用被称为事件控制块(ECB )的数据构造描述信号量、邮箱、消息队列等事件。 ECB包含所有事件的数据,包括等待任务表。 在文件uC/OS-II.H中定义的ECB的数量如下:类型指令事件类型; /事件的类型INT16U OSEventCnt; /信号量计数器void *OSEventPtr; /指向消息或消息队列的指针INT8U OSEventGrp; /等待事件的任务组int8uoseventtblos _ event _ TBL _ size; /任务等待列表OS_EVENT;9.1.3事件控制块(续)、图事件控制块

8、ECB的构成、任务等待表、osEventTbl、OS_EVENT、pevent、表OS、9.1.5空事件控制块0、校正SO_MAX_EVENTS个事件控制块、图空事件控制块链表、初始化时链表中的所有控制块都没有与特定事件相关联,因此该链表是空的事件控制块如果ECB成员的OS事件类型设置为OS_EVENT_SEM,则9.2信号量及其操作将描述信号量。 信号量由信号量计数器和任务等待表两部分组成。 有任务申请信号量,如果是OSEventCnt0,则OSEventCnt减OSEventCnt=0时,将任务放入OSEventTbl,使任务处于待机状态。 如果有任务释放信号量,任务等待表中有等待任务,则

9、在OSEventTbl表中找到优先级最高的等待任务,准备好后开始调度。 如果存在任务释放信号量,并且任务等待表中没有任务等待,则信号量计数器将简单地加1。将图1信号量的事件控制块、任务等待表、OSEventTbl、pevent、事件控制块成员OSEventCnt用作计数器,具有4个等待任务的信号量, 信号量是不使用事件控制块成员OSEventPtr的OS_EVENT *OSSemCreate (/上限值是创建的信号量的指针INT16U cnt/信号量计数器初始值); 9.2.1信号量的操作(继续)、信号量OSSemPend ()、void OSSemPend (OS_EVENT *pevent

10、; /信号量的指针int 16 u超时; 等待时间INT8U *err/错误信息); int 16使用机会(操作系统事件*事件)。 /按一下信号量指针。 当一个任务请求信号量时,如果希望在信号量无效时允许任务继续运行而不等待,请调用OSSemAccept ()而不是调用OSSemPend ()来请求信号量。 如果残奥仪表timeout设置为0,则表示任务的等待时间是无限长的。 另外,在任务需要存取共享资源时,如果信号量无效(即OSEventCnt=0),则在任务等待表中将与该任务对应的位置1设为等待状态,将等待时间timeout保存到任务控制块TCB的成员OSTCBDly中。 中断服务子程序要

11、求信号量时,仅使用OSSemAccept (),不能使用OSSemPend ()。 因为中断服务子程序不能等待。9.2.1信号量的操作(续)、信号量OSSemPost ()、INT8U OSSemPost (OS_EVENT *pevent; /信号量的指针、任务获取信号量,访问共享资源完成后需要释放信号量。释放信号量也称为发送信号量。 函数OSSemPost ()在操作信号量的计数器之前,首先检查是否存在等待信号量的任务,否则将信号量计数器OSEventCnt加1,在存在的情况下准备该任务,并调用调度器OS_Sched ()来开始调度例程9-4 :试制包含函数Fun ()和两个任务MyTas

12、k和YouTask的应用程序。 应用程序中的两个任务都可以调用函数Fun (),但不能同时调用。 练习9-1 :应用程序中有函数Fun ()。 任务MyTask ()必须在任务YouTask ()中允许,才能一次调用此函数。 请试着写出这两个任务的示意图代码。 如代码所示,使用事件控制块描述的信号量在使用方面和信号量的完整性方面远比简单形式的信号量便利。 9.2.1信号量的操作(继续)、信号量OSSemDel ()、OS _ event * ossemdel (OS _ event * pevent; /信号量的指针INT8U opt; /删除条件选项INT8U *err/错误消息); opt

13、有两种残奥仪表选择。 如果选择OS_DEL_NO_PEND,则在等待任务表中没有等待任务时将删除信号量。 如果选择OS_DEL_ALLWAYS,则无论等待任务表中有无等待任务,信号量都会立即被删除。 注意:信号量的建立、等待期限、删除只能在任务中操作,不能在中断服务程序中操作,操作9.2.1信号量(续),信号量状态OSSemQuery (),int8uossemquery (OS _ event * pevent; /存储信号量的指针OS_SEM_DATA *pdata/信号量状态的结构; 另外,关残奥计量器pdata是OS_SEM_DATA结构的指针,而OS_SEM_DATA结构是类型构造点

14、16 u操作系统CNT; int 8用户事件_事件_大小。 英特8 u事件组; 操作系统数据; 调用此函数时,有关信号量的信息存储在类型为OS_SEM_DATA的变量中。 因此,在调用OSSemQuery ()之前,必须为结构化OS_SEM_DATA定义变量。9.3互斥信号量和优先级反转、任务a (高)、任务b (中)、任务c (低)、t1、t2、t3、任务a由于任务c释放信号量而执行,任务b由于优先级高于任务c而执行,任务c获得信号量,任务c使用共享资源, 任务c由任务a获得CPU并等待,任务c由任务b获得CPU并执行,任务c由任务b释放CPU并执行。 图示的任务优先级反转图像中,由于当获得

15、信号量并且使用共享资源时,由于具有高优先级的任务中断而不解除信号量,等待该信号量的上位任务不能获得信号量,所以上述优先级反转现象发生,变为待机状态,并且在该待机期间中先执行了超过信号量的任务显然,如果这样的优先顺序处于使用信号量的两个任务优先顺序之间的中优先顺序任务较多,则高优先顺序任务的执行环境大幅恶化,在实时系统中不能容忍。 一种解决问题的方法是通过将获得信号量的任务的优先级提升为共享资源使用期间所有任务的最高优先级之一,从而避免被其他任务中断,从而尽快使用共享资源来释放信号量,释放信号量,然后恢复该任务的原始优先级实例9-5 :使用信号量独占地访问共享资源,任务优先顺序反转的应用实例如下所示。 请运行程序并分析其执行结果。 此外,对于图4-10中的优先反转现象,Task3获得信号量来执行,Task1获得信号量来不能执行,Task2执行,Task1获得信号量来执行,并且使用信号量的任务能否执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论