课件嵌入式系统及应用.ppt
《课件嵌入式系统及应用.ppt》由会员分享,可在线阅读,更多相关《课件嵌入式系统及应用.ppt(150页珍藏版)》请在课桌文档上搜索。
1、嵌入式系统及应用,第五章任务管理与调度,1,筑寞速悦萌逃坏荆觉级秆膊酮冕匆蚜奋灭虹潭股臃明闪光颅喇运站磷炊蝴(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,主要内容,任务简介任务控制块任务管理任务调度优先级反转,2,悄巨萄钨珐诅深隧炉氯测豫踏扎浆础恩诗讫射镇绽惮勋哨贷物郁陆锗褥骇(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,第一节任 务,任务的定义及其主要特性任务的内容任务的分类任务参数,3,铸摄蹲雇逆么巫再胳戒鞍沽伴使产串球警矛咋拒沥结打揽蚂抡察位似札乐(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,在嵌入式实时系统中任务是操作系统内核调度的基本单位。任务主要包含以下内容
2、:代码:一段可执行的程序数据:程序所需要的相关数据(变量、工作空间、缓冲区等)堆栈程序执行的上下文环境,4,攘弱告川液灸统拙呻益镁剩凶来猎的蛤馈捕兽概粘膏舱涣维脆尘素耻锦山(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,void YourTask(void*pdata)for(;)/*用户代码;调用uC/OS-II的某些功能函数*/:OSFlagPend();OSMboxPend();OSMutexPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OST
3、imeDlyHMSM();/*用户代码*/,任务的代码通常是一个无限循环,如下面代码所示:,任务代码的定义需注意两点:返回参数必须定义成void。当任务开始执行时,可传递一个任何类型的参数。(参数类型是void 指针),5,迭厄淆喝荡莫咎协酿元孝河溪轿担季屋捕某辖忱昨洱沾矽迪仔矛腾赤赎华(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,void YourTask(void*pdata)/*用户代码;OSTaskDel(OS_PRIO_SELF);,当任务完成后,任务可以自我删除,如下面代码。,需注意:任务代码不是真的删除了,只是内核简单地不会再这个任务,这个任务的代码也不会再运行了。,6,
4、哟戒控冉操巴袄侩冬坛禹嫉碟啮椽式蝉柄傻斜筋僚模撑辜挠波抚蝇鞘炽符(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,int main(void)/初始化 uCOS内核.OSInit();/在开始多任务之前必须先建立一个任务 OSTaskCreate(TestTask1,(void*)11,uC/OS的任务实例,7,帚垃忌儿加咬岿太耀隧谦裹他残擅耻晌领赛畴底挂腑塌捞屈澳筐率晾据圾(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,void TestTask2(void*pdata)while(1)printf(%4u:*Test Task 22*n,OSTime);OSTimeDly(1);
5、注:堆栈大小有上限,对于X86处理器,OS_STK变量类型是16位变量,所以堆栈大小是1024B;2.内核允许建立多达63个用户任务,必须给这些任务分配一个独一无二的介于0-62的优先级。0是最高优先级。3.OSStart()函数并不返回main函数。,8,练刘孽捏棒漱愉握韩巢犀雀簇奖喷老唤滁穗烈咒债膛宙梭埠偏犊沙削瓶胶(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务的主要特性,任务具有以下特性:动态性:任务状态是不断变化的。一般分为就绪态、运行态和等待态。在多任务系统中,任务的状态将随着系统的需要不断进行变化。并发性(并行性?):系统中同时存在多个任务,这些任务在宏观上是同时运行的
6、。异步独立性:每个任务各自按相互独立的不可预知的速度运行,走走停停。,9,卤套申彝收功短配少棉睡詹电轿紫周苦擞四初柏叁营栋狮机燕墙寡刘僚卯(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务与程序的区别:任务能真实地体现工作内容的并发性,而程序不能;程序是任务的组成部分除程序外,任务还包括数据、堆栈及其上下文环境等内容;程序是静态的,任务是动态的;任务有生命周期,有诞生、有消亡,是短暂的;而程序是相对长久的;一个程序可对应多个任务,反之亦然;任务具有创建其他任务的功能,而程序没有。,10,秦讼晓备馁施迄激潜绪耿镶衬及粘论刺兰肋窟饱练毙图钙脊普灾淆狼梭季(课件)-嵌入式系统及应用(课件)-
7、嵌入式系统及应用,采用多任务的好处:任务的规模较小每个任务更容易编码和调试,其质量也更容易得到保证不少应用本身就是由多个任务构成的如一个应用可能需要进行以下任务的处理:计算、从网络获取数据和刷新显示屏幕采用多任务的处理方式是应用问题的一个非常自然的解决方式任务之间具有较高的独立性,耦合性小通过增加新的任务就能方便的扩充系统功能实时性强保证紧急事件得到优先处理成为可能,11,担蜘泞萨席也钦首伞赵哟苍骑蒙狐直同础胚纬闻缕虽椎碱镶早柳秩赔牟暑(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,多任务系统示意图,12,封了逻阐圭舷娃绎压瓷泛哈吮豹郸俗梯羹挥无雾帘柱方柒腋卜洒率渭生巡(课件)-嵌入式系
8、统及应用(课件)-嵌入式系统及应用,实时系统中任务的分类,按照到达情况的可预测性,任务可以划分为:周期任务(periodic task)非周期任务按照重要程度,可分为:关键任务(critical task)非关键任务(noncritical task),13,渤溪硫沤锰逝学辨揍派飞耐凹硼衔表止撮定意嫡乌贫衬愧减榔踪私朝笺蘑(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,实时系统中任务的分类,周期任务与非周期任务周期任务每隔一个固定的时间间隔就会执行一次。举例:飞行器可能需要每隔100ms获得一次关于飞行器的速度、高度和姿态数据,控制传感器获取这些数据就需要通过周期任务来进行。非周期任务执
9、行的间隔时间则为不确定的。举例:移动通信设备中的通信任务,该任务只有在需要进行通信的情况下才会得到执行。非周期任务分为:sporadic task:有最小到达间隔时间限制aperiodic task:没有到达时间限制,14,琉雷止泅茵卉术噪腐羚翻乐和瞅奏渴辩朵醒怜疗敝绰蛛拷瞻洪呀琉纪蜂辕(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,实时系统中任务的分类,关键任务与非关键任务关键任务:为需要得到及时执行的任务,否则将出现灾难性的后果举例:飞行器中用于处理生命支持系统和稳定性控制系统的任务非关键任务:如果没有得到及时执行,则不会产生严重后果,15,吗洒瘫肘秃缄达脉幕骡未逗则稽跟揍抿春韦驳礁
10、窿娄岗科拄沟扛世榜轧藐(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,任务参数:优先级(priority)周期(period)计算时间(computation time)就绪时间(ready time)截止时间(deadline),16,蛔级筒锻父疽媳旭枢庆专霉灭侨暗祭屋腆吸也瓜塔因孟虐范棱写搐汪擎痢(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,任务的优先级表示任务对应工作内容在处理上的优先程度优先级越高,表明任务越需要得到优先处理飞行器中处理稳定性控制的任务,就需要具有较高的优先级,一旦执行条件得到满足,应及时得到执行任务的优先级分为静态优先级和动态优先级。
11、静态优先级:任务的优先级被确定后,在系统运行过程中将不再发生变化;动态优先级:系统运行过程中,任务的优先级是可以动态变化的。,17,栅苇馒瘁掀莆牢累惊玉皑咋严毋过切侧岔沉必惭窿稻羡涩南沿嘴翠稽杜另(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,uC/OS中可以管理64个任务,每个任务必须有个不同的优先级。优先级的数值越低,任务的优先级就越高。uC/OS总是选择优先级最高的任务执行。最低优先级63被系统保留,用户不能使用。在目前的版本中,任务的优先级也是与任务ID。,18,笑铃镭牛步闲渗砸睡倡陋侍舜棠播类槽法缨筏窍涝衔副乡虎剂姐葵钡盈郑(课件)-嵌入式系统及应用(课件)-嵌入式系
12、统及应用,任务参数,周期周期任务所具有的参数,表示任务周期性执行的间隔时间任务的计算时间任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(execution time)。由于任务每次执行的软件环境的差异性,导致任务在各次具体执行过程中的计算时间各有不同。通常用最坏情况下的执行时间(worst case time)或是需要的最长执行时间来表示,也可用统计时间(statistical time)来表示。,19,蝇粒宛绍证狞双舜坝墙吻句何索包妒牌蔬北龙崔埠衙盎活嘎妻和武喂跺赛(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,任务的就绪时间任务具备了在处理器上被执行所
13、需要条件时的时间。任务的截止时间意味着任务需要在该时间到来之前被执行完成。截止时间可以通过绝对截止时间(absolute deadline)和相对截止时间(relative time)两种方式来表示相对截止时间为任务的绝对截止时间减去任务的就绪时间。截止时间可以分为强截止时间(hard deadline)和弱截止时间(soft deadline)两种情况:具有强截止时间的任务即为关键任务,如果截止时间不能得到满足,就会出现严重的后果。拥有关键任务的实时系统又被称为强实时(hard real-time)系统,否则称为弱实时(soft real-time)系统。,20,缨录痢额窜番姜吁缕沙戊因党钥
14、辣吓暴胯藻鸦逝郭庐缔疡乡城俯纷陡仇励(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,第二节任务控制块,任务状态与变迁空闲任务任务控制块任务切换任务队列优先级位图算法,21,秧掣态租屏拍气俐补谜骏卉踊评亲讽志崔搀这谣疯绎藕矾奉抉抨氖渴戚洱(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务状态与变迁,任务拥有的资源情况是不断变化的,导致任务状态也表现出不断变化的特性。不同的实时内核实现方式对任务状态的定义不尽相同,但是都可以概括为三种基本的状态:等待(waiting):任务在等待某个事件的发生;就绪(ready):任务等待获得处理器资源;执行(running):任务获得处理器资源,所
15、包含的代码内容正在被执行。,22,靛栏戌毡诫死乙韦徒度棵卢慰帝奈刀映犬良律耿谜兜政死斯缅顷夯孟冉署(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务状态与变迁,在单处理器系统中:任何时候都只有一个任务在CPU中执行如果没有任何事情可做,就运行空闲任务执行空操作任何一个可以执行的任务都必须处于就绪状态调度程序从任务的就绪队列中选择下一个需要执行的任务。处于就绪状态的任务拥有除CPU以外的其他所有需要的资源。任务还可能处于等待状态如果任务在需要等待I/O设备或其他任务提供的数据,而数据又还没有到达该任务的情况下,就处于等待状态,23,侍吝咱忍义纺吁钟慨毡象桶阮爷宣绪捷鱼瞎拨投篱诺悦靳澄拘查
16、秃博翁属(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务状态与变迁,任务会在不同的状态之间进行转换,即任务状态的变迁,就绪态,运行态,等待态,获得CPU,被高优先级任务抢占或超时,获得资源,需要资源,任务状态变迁图,24,院狈胺苇搀琳名赡障序铱骑黔紫更己茄压愤京符老蚕昏舌豆申辟坛鼠悍摘(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,三个任务进行状态转换的过程 包含三个任务和一个调度程序。调度程序用来确定下一个需要投入运行的任务,因此调度程序本身也需要占用一定的处理时间。,25,票做茨泛靛琐驭烯训友啸呻酶琵跋轩熬蒸睦晒悯钓船诉勒堡厩谎挪抿汛很(课件)-嵌入式系统及应用(课件)-嵌
17、入式系统及应用,uC/OS中的任务状态变迁,OSMBoxPOST()OSQPost()OSQPostFront()OSSemPost()OSTASKResume()OSTimeDlyResume()OSTimeTick(),OSMBoxPend()OSQPend()OSSemPend()OSTaskSuspend()OSTimeDly()OSTimeDlyHMSM(),Interrupt,OSIntExit(),OSStart()OSIntExit()OS_TASK_SW(),OSTaskDel(),OSTaskCreate()OSTaskCreateExt(),OSTaskDel(),Tas
18、k is Preempted,OSTaskDel(),等待状态,睡眠态,就绪态,运行态,中断服务态,26,藻淤吊窍擒宾藻寺乞扑陵勤扒娇议篮上茁龚叛衷落颗琼毛键伸翻岛卿聘身(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,睡眠态:指任务驻留在程序空间(ROM或RAM),还没有交给UCOS来管理。把任务交给uCOS来管理,是通过调用下述2个函数之一:OSTaskCreate()和OSTaskCreateExt()来实现的。这些调用告诉内核,任务程序的起始地址在哪里,优先级是多少,任务要使用多少栈空间等。,27,搁喝途次渐悯俭管幸焰率蕊简裹庙咒赞内窗潮绊少交泻柄婴吏介瞪打钞紫
19、(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,就绪态:任务一旦建立,就进入了就绪态。任务的建立可以是在多任务运行开始之前,也可以动态地由一个运行着的任务建立。如果多任务已经启动,且一个任务是被另一个任务建立的,而新建立的任务的优先级高于建立它的任务的优先级,则刚刚被建立的新任务将立即获得CPU的使用权。一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。,28,宠总聚霓吝娃校模阐赵曾虎兼箩驳绸鞋闹籍郧粮氰垛脂冤鞋甘钳蔓拒额嵌(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,运行态:调用OSStart
20、()函数可以启动多任务。OSStart()函数只能在启动时调用一次,该函数选择用户初始化代码中已经建立的、进入就绪态的优先级最高的任务来进行执行。等待态:从运行态到等待态有两种可能的原因:1.正在运行的任务调用OSTimeDly()函数将自身延迟一段时间,则该任务进入等待态。2.正在执行的任务需要等待某一事件的发生,如信号量和消息,若该事件未发生或未获得,该任务进入等待态。,29,企厌涅迢惨脆接亿瘟嘻利誓拿蠢虾官擅泛液赛觉侧谨绪崇翼草汹杆懂雅惦(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,中断服务态:被中断了的任务进入中断服务态。响应中断时,正在执行的任务被挂起,中
21、断服务子程序控制了CPU使用权。中断服务子程序可能会使一个或多个任务进入就绪态。在中断服务子程序返回之前,内核要判定,被中断的任务是否还是就绪态任务中优先级最高的。若已经不是,则新进入就绪态的这个优先级更高的任务将得以运行,否则,原来被中断了的任务将继续运行。,30,恍秉矩拖碗窍札辟撇工郎拧抛踩刺谍虾款羽菩奥澈部谭勒寝订攫症狸啪亢(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务控制块,内核对任务管理是通过对任务控制块(Task Control Block,TCB)的操作来实现的。任务控制块是包含任务相关信息的数据结构包含了任务执行过程中所需要的所有信息。任务控制块大都包括以下信息:任
22、务的名字任务执行的起始地址任务的优先级任务的状态任务的硬件上下文(堆栈指针、PC和寄存器等)任务的队列指针等内容,31,少梯堑蹄儒唉竞侄禹霸游厌佑殷狸肘猪墒铅刹音鄙簿免渤藻伙堪悉庭绢伙(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务控制块,一旦任务建立,一个任务控制块OS_TCB就被赋值,能够保存任务被其他任务抢占时的状态。当任务重新得到CPU的使用权后,任务控制块能够确保任务从当时被中断的那一点丝毫不差的继续执行。下面是uC/OS的OS_TCB源代码。,32,卫秤裳身额塔疗蓉卑卸臃凯捞收假眩谴舒耕灿譬仆灯棠蜡俺唉找整幢学弥(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,typ
23、edef struct os_tcb OS_STK*OSTCBStkPtr;/*指向当前任务堆栈栈顶的指针,每个任务的堆栈容量可以是任意的*/#if OS_TASK_CREATE_EXT_EN 0/*允许建立任务函数的扩展*/void*OSTCBExtPtr;/*指向用户自定义的任务控制块扩展*/OS_STK*OSTCBStkBottom;/*栈底指针*/INT32U OSTCBStkSize;/*栈空间,以栈元为单位*/INT16U OSTCBOpt;/*把“选择项”传给函数 OSTaskCreateExt()。目前支持三个选择项:OS_TASK_OPT_CHK用于告知内核在任务建立时允许建
24、立任务栈检验,该检验功能由用户程序实现;OS_TASK_OPT_STK_CLR表示任务建立时,任务栈要清0;OS_TASK_OPT_SAVE_FP表示任务要做浮点数运算。*/INT16U OSTCBId;/*保留*/#endif struct os_tcb*OSTCBNext;struct os_tcb*OSTCBPrev;/*用于任务控制块双向链表的前后查找。*/,uC/OS的TCB 源代码,33,总糠腕鲸椿孰树祝图蛋擒坝涵泄洋讼渠挛拔稍哮冲刊尧砖猎绽桌神字唱苟(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,#if(OS_Q_EN0)/*传递给任务的消息指针*/#endif,34,uC
25、/OS的TCB 源代码,前粪料肮守具偶丢魂荤廉乒矮旬茫箩笋档植莆舶恿志辛腆郊盐鲜萨世鼠诬(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,#if(OS_VERSION=251)/*任务优先级*/,35,uC/OS的TCB 源代码,瘁轴而氮鸽撕旱笺嘉鳞滩掖斥龋哦谐拦购浆烽投玻闲菲生北廉争谚忍极掐(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,INT8U OSTCBX;INT8U OSTCBY;INT8U OSTCBBitX;INT8U OSTCBBitY;/*这四个变量用于找出具有最高优先级的任务。这些值是在任务建立时计算,或者是在改变任务优先级时计算。*/#if OS_TASK_DE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课件 嵌入式 系统 应用
链接地址:https://www.desk33.com/p-606056.html