二嵌入式实时操作系统分析ppt课件

上传人:M****1 文档编号:568034076 上传时间:2024-07-23 格式:PPT 页数:33 大小:180KB
返回 下载 相关 举报
二嵌入式实时操作系统分析ppt课件_第1页
第1页 / 共33页
二嵌入式实时操作系统分析ppt课件_第2页
第2页 / 共33页
二嵌入式实时操作系统分析ppt课件_第3页
第3页 / 共33页
二嵌入式实时操作系统分析ppt课件_第4页
第4页 / 共33页
二嵌入式实时操作系统分析ppt课件_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《二嵌入式实时操作系统分析ppt课件》由会员分享,可在线阅读,更多相关《二嵌入式实时操作系统分析ppt课件(33页珍藏版)》请在金锄头文库上搜索。

1、1 C/OS内核结构内核结构刘立刘立帛蹦古溃桔盐鲤邯戮燃练瓷宦寅腊同赊脂耕稚诱钓鲜蹲垒筛晴表壁丑乃劝二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件2本章给出本章给出C/OS-的主要结构概貌的主要结构概貌ll lC/OS是怎样处理临界段代码的是怎样处理临界段代码的;ll l什么是任务,怎样把用户的任务交给什么是任务,怎样把用户的任务交给C/OS;ll l任务是怎样调度的任务是怎样调度的;ll l应应用用程程序序CPU的的利利用用率率是是多多少少,C/OS是是怎怎样样知知道道的的;ll l怎样写中断服务子程序怎样写中断服务子程序;ll l什么是时钟节拍,什么是时钟节拍,C/O

2、S是怎样处理时钟节拍的是怎样处理时钟节拍的;ll lC/OS是怎样初始化的,以及是怎样初始化的,以及怎样启动多任务怎样启动多任务; 愉议迎酉奖眶吵娠芳盆盼鹏犬糙药帐正哀瞧思萎忧蒋婉止说择善伏舵埠晒二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件3临界段临界段(Critical Sections)l和其它内核一样,和其它内核一样,C/OS-为了处理临界段代码需要关中断,处理完毕后再为了处理临界段代码需要关中断,处理完毕后再开中断。这使得开中断。这使得C/OS-能够避免同时有其它任务或中断服务进入临界段代能够避免同时有其它任务或中断服务进入临界段代码。关中断的时间是实时内核开发

3、商应提供的最重要的指标之一,因为这个指码。关中断的时间是实时内核开发商应提供的最重要的指标之一,因为这个指标影响用户系统对实时事件的响应性。标影响用户系统对实时事件的响应性。C/OS-努力使关中断时间降至最短,努力使关中断时间降至最短,但就使用但就使用C/OS-而言,关中断的时间很大程度上取决于微处理器的架构以而言,关中断的时间很大程度上取决于微处理器的架构以及编译器所生成的代码质量。及编译器所生成的代码质量。l微处理器一般都有关中断微处理器一般都有关中断/开中断指令,用户使用的开中断指令,用户使用的C语言编译器必须有某种机语言编译器必须有某种机制能够在制能够在C中直接实现关中断中直接实现关中

4、断/开中断地操作。某些开中断地操作。某些C编译器允许在用户的编译器允许在用户的C源源代码中插入汇编语言的语句。这使得插入微处理器指令来关中断代码中插入汇编语言的语句。这使得插入微处理器指令来关中断/开中断很容开中断很容易实现。而有的编译器把从易实现。而有的编译器把从C语言中关中断语言中关中断/开中断放在语言的扩展部分。开中断放在语言的扩展部分。C/OS-定义两个宏定义两个宏(macros)来关中断和开中断,以便避开不同来关中断和开中断,以便避开不同C编译器厂商编译器厂商选择不同的方法来处理关中断和开中断。选择不同的方法来处理关中断和开中断。C/OS-中的这两个宏调用分别是:中的这两个宏调用分别

5、是:OS_ENTER_CRITICAL()和和OS_EXIT_CRITICAL()。因为这两个宏的定义取决于所用的微处理器,故。因为这两个宏的定义取决于所用的微处理器,故在文件在文件OS_CPU.H中可以找到相应宏定义。每种微处理器都有自己的中可以找到相应宏定义。每种微处理器都有自己的OS_CPU.H文件。文件。 胡斋吨闺欠茁乾盘赖少楞末杰盂果赶能镀岗似棒舌夜效菱捡桑以硫卧僳栖二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件4任务任务 l一一个个任任务务通通常常是是一一个个无无限限的的循循环环,如如程程序序清清单单所所示示。一一个个任任务务看看起起来来像像其其它它C的的函函

6、数数一一样样,有有函函数数返返回回类类型型,有有形形式式参参数数变变量量,但但是是任任务务是是绝绝不不会会返返回回的的。故故返返回回参参数数必必须定义成须定义成void。l void YourTask (void *pdata) (1)l l for (;) (2)l /* 用户代码用户代码 */ 调用调用uC/OS-II的某种系统服务的某种系统服务:l OSMboxPend();l OSQPend();l OSSemPend();l OSTaskDel(OS_PRIO_SELF);l OSTaskSuspend(OS_PRIO_SELF);l OSTimeDly();l OSTimeDlyH

7、MSM();l /* 用户代码用户代码 */l l 靶饮之喉欧茄仇龚许酚拭椅乌至旬膛浸柿筐醇列计亮仑舍腆立综誓妨扶峙二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件5l当当任任务务完完成成以以后后,任任务务可可以以自自我我删删除除,注注意意任任务务代代码码并并非非真真的的删删除除了了,C/OS-C/OS-只只是是简简单单地地不不再再理理会会这这个个任任务务了了,这这个个任任务务的的代代码码也也不不会会再再运运行行,如如果果任任务务调调用用了了OSTaskDel()OSTaskDel(),这这个个任任务务绝绝不不会会返返回回什什么么。任任务务完完成成后自我删除后自我删除l v

8、oid YourTask (void *pdata)l l /* 用户代码用户代码 */l OSTaskDel(OS_PRIO_SELF);l l形式参数变量是由用户代码在第一次执行的时候带入的。请注意,该变量形式参数变量是由用户代码在第一次执行的时候带入的。请注意,该变量的类型是一个指向的类型是一个指向voidvoid的指针。这是为了允许用户应用程序传递任何类型的指针。这是为了允许用户应用程序传递任何类型的数据给任务。这个指针好比一辆万能的车子,如果需要的话,可以运载的数据给任务。这个指针好比一辆万能的车子,如果需要的话,可以运载一个变量的地址,或一个结构,甚至是一个函数的地址。也可以建立许

9、多一个变量的地址,或一个结构,甚至是一个函数的地址。也可以建立许多相同的任务,所有任务都使用同一个函数(或者说是同一个任务代码程序)相同的任务,所有任务都使用同一个函数(或者说是同一个任务代码程序)。例如,用户可以将四个串行口安排成每个串行口都是一个单独的任务。例如,用户可以将四个串行口安排成每个串行口都是一个单独的任务, ,而每个任务的代码实际上是相同的。并不需要将代码复制四次,用户可以而每个任务的代码实际上是相同的。并不需要将代码复制四次,用户可以建立一个任务,向这个任务传入一个指向某数据结构的指针变量,这个数建立一个任务,向这个任务传入一个指向某数据结构的指针变量,这个数据结构定义串行口

10、的参数(波特率、据结构定义串行口的参数(波特率、I/OI/O口地址、中断向量号等)。口地址、中断向量号等)。 拇法肤它缩钞彼采得摊李志剥刷疏匆砒佣赌挎版酚燥却借疙疙肘贵渤膏鉴二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件6任务状态任务状态 现全祁洪贮掂汕坎课缩平戒植缀即趴粮温赶尚蒙讯始憋皿袖着疚辊杜妖麻二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件l睡睡眠眠态态(DORMANTDORMANT)指指任任务务驻驻留留在在程程序序空空间间之之中中,还还没没有有交交给给C/OS-C/OS-管管理理,把把任任务务交交给给C/OS-C/OS-是是通通过过调调用用

11、下下述述两两个个函函数数之之一一:OSTaskCreate()OSTaskCreate()或或OSTaskCreateExt()OSTaskCreateExt()。当当任任务务一一旦旦建建立立,这这个个任任务务就就进进入入就就绪绪态态准准备备运运行行。任任务务的的建建立立可可以以是是在在多多任任务务运运行行开开始始之之前前,也也可可以以是是动动态态地地被被一一个个运运行行着着的的任任务务建建立立。如如果果一一个个任任务务是是被被另另一一个个任任务务建建立立的的,而而这这个个任任务务的的优优先先级级高高于于建建立立它它的的那那个个任任务务,则则这这个个刚刚刚刚建建立立的的任任务务将将立立即即得得

12、到到CPUCPU的的控控制制权权。一一个个任任务务可可以以通通过过调调用用OSTaskDel()OSTaskDel()返返回回到到睡睡眠眠态态,或或通通过过调调用用该该函函数让另一个任务进入睡眠态。数让另一个任务进入睡眠态。l调调用用OSStart()OSStart()可可以以启启动动多多任任务务。OSStart()OSStart()函函数数运运行行进进入入就就绪绪态态的的优优先先级级最最高高的的任任务务。就就绪绪的的任任务务只只有有当当所所有有优优先先级级高高于于这这个个任务的任务转为等待状态,或者是被删除了,才能进入运行态。任务的任务转为等待状态,或者是被删除了,才能进入运行态。l正在运行

13、的任务可以通过调用两个函数之一将自身延迟一段时间,正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是这两个函数是OSTimeDly()OSTimeDly()或或OSTimeDlyHMSM()OSTimeDlyHMSM()。这个任务于是进。这个任务于是进入等待状态,等待这段时间过去,下一个优先级最高的、并进入入等待状态,等待这段时间过去,下一个优先级最高的、并进入了就绪态的任务立刻被赋予了了就绪态的任务立刻被赋予了CPUCPU的控制权。等待的时间过去以后,的控制权。等待的时间过去以后,系统服务函数系统服务函数OSTimeTick()OSTimeTick()使延迟了的任务进入就

14、绪态使延迟了的任务进入就绪态令浩剩拄驯拉陋鞭诞鲜款舰雍纯礁市拽橡鞭诽憎异胺杯研衡发沮梅呐赞瀑二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件l正正在在运运行行的的任任务务期期待待某某一一事事件件的的发发生生时时也也要要等等待待,手手段段是是调调用用以以下下3 3个个函函数数之之一一:OSSemPend()OSSemPend(),OSMboxPend()OSMboxPend(),或或OSQPend()OSQPend()。调调用用后后任任务务进进入入了了等等待待状状态态(WAITINGWAITING)。当当任任务务因因等等待待事事件件被被挂挂起起(PendPend),下下一一个

15、个优优先先级级最最高高的的任任务务立立即即得得到到了了CPUCPU的的控控制制权权。当当事事件件发发生生了了,被被挂挂起起的的任任务务进进入入就就绪绪态态。事事件件发发生生的的报报告告可可能能来来自自另另一一个个任任务务,也也可能来自中断服务子程序。可能来自中断服务子程序。l正正在在运运行行的的任任务务是是可可以以被被中中断断的的,除除非非该该任任务务将将中中断断关关了了,或或者者C/OS-C/OS-将将中中断断关关了了。被被中中断断了了的的任任务务就就进进入入了了中中断断服服务务态态(ISRISR)。响响应应中中断断时时,正正在在执执行行的的任任务务被被挂挂起起,中中断断服服务务子子程程序序

16、控控制制了了CPUCPU的的使使用用权权。中中断断服服务务子子程程序序可可能能会会报报告告一一个个或或多多个个事事件件的的发发生生,而而使使一一个个或或多多个个任任务务进进入入就就绪绪态态。在在这这种种情情况况下下,从从中中断断服服务务子子程程序序返返回回之之前前,C/OS-C/OS-要要判判定定,被被中中断断的的任任务务是是否否还还是是就就绪绪态态任任务务中中优优先先级级最最高高的的。如如果果中中断断服服务务子子程程序序使使一一个个优优先先级级更更高高的的任任务务进进入入了了就就绪绪态态,则则新新进进入入就就绪绪态态的的这这个个优优先先级级更更高高的的任任务务将将得得以以运运行行,否否则则原

17、原来来被被中中断了的任务才能继续运行。断了的任务才能继续运行。l当所有的任务都在等待事件发生或等待延迟时间结束,当所有的任务都在等待事件发生或等待延迟时间结束,C/OS-C/OS-执行空闲任务(执行空闲任务(idle taskidle task),执行),执行OSTaskIdle()OSTaskIdle()函数。函数。 啮杜汲任挚磐忠败哈嘛作见顺眷店聘竟哗齿演娱舔悯竖刽饿蜂扔炔双鸯讲二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件9任务控制块任务控制块 l一旦任务建立了,任务控制块一旦任务建立了,任务控制块OSOS_TCBs_TCBs将被赋值。任务控制块是一个数据结将被赋值

18、。任务控制块是一个数据结构,当任务的构,当任务的CPUCPU使用权被剥夺时,使用权被剥夺时,C/OS-C/OS-用它来保存该任务的状态。当任用它来保存该任务的状态。当任务重新得到务重新得到CPUCPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。不差地继续执行。OSOS_TCBs_TCBs全部驻留在全部驻留在RAMRAM中。任务建立的时候,中。任务建立的时候,OSOS_TCBs_TCBs就被初始化了就被初始化了 所有的任务控制块分为两条链表,空闲链表和使用链表所有的任务控制块分为两条链表,空闲链表和使用链表。位瘁棍刨

19、额盏菏秒徘欠奢侈疏悯皱楔烙炒宣叹秸瘟纹话挑迫躬片甘蔽淋缮二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件任务控制块结构任务控制块结构lStruct os_tcb OS_STK *OSTCBStkPtr; struct os_tcb *OSTCBNext; struct os_tcb *OSTCBprev; OS_EVENT *OSTCBEventPtr; void *OSTCBMsg; INT16U OSTCBDly;当需要把任务延时若干时钟节拍时要用到这个当需要把任务延时若干时钟节拍时要用到这个变量变量 INT8U OSTCBStat; INT8U OSTCBPrio;任

20、务优先级。任务优先级。 INT8U OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY; OS_TCB加速任务进入就绪态的过程事件控制块的指针任务的状态字膀箱胶子斯缨渝庸戮乏镀铱作奥辗鱼钥仅戎猩誉帖肝雇脐矮磷悔巴湍狠商二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件11空任务列表空任务列表系统初始化时,所有任务控制块被链接成空任务控制块的单向链表系统初始化时,所有任务控制块被链接成空任务控制块的单向链表坎吨魁术描动唆聪鸵席归嚎卞迎兴陡竟牵歼匙椽柔垃斋靖涉盐冠燥倪骋长二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件12l为为确确定定下

21、下次次该该哪哪个个优优先先级级的的任任务务运运行行了了,内内核核调调度度器器总总是是将将OS_LOWEST_PR1OOS_LOWEST_PR1O在在就就绪绪表表中中相相应应字字节节的的相相应应位位置置1 1。是是按按以以下下规规则则给出的:给出的:l当当OSRdyTbl0OSRdyTbl0中的任何一位是中的任何一位是1 1时,时,OSRdyGrpOSRdyGrp的第的第0 0位置位置1 1,l 当当OSRdyTbl1OSRdyTbl1中的任何一位是中的任何一位是1 1时,时,OSRdyGrpOSRdyGrp的第的第1 1位置位置1 1,l当当OSRdyTbl2OSRdyTbl2中的任何一位是中

22、的任何一位是1 1时,时,OSRdyGrpOSRdyGrp的第的第2 2位置位置1 1,l当当OSRdyTbl3OSRdyTbl3中的任何一位是中的任何一位是1 1时,时,OSRdyGrpOSRdyGrp的第的第3 3位置位置1 1,l当当OSRdyTbl4OSRdyTbl4中的任何一位是中的任何一位是1 1时,时,OSRdyGrpOSRdyGrp的第的第4 4位置位置1 1,l 当当OSRdyTbl5OSRdyTbl5中的任何一位是中的任何一位是1 1时,时,OSRdyGrpOSRdyGrp的第的第5 5位置位置1 1,l当当OSRdyTbl6OSRdyTbl6中的任何一位是中的任何一位是1

23、 1时,时,OSRdyGrpOSRdyGrp的第的第6 6位置位置1 1,l 当当OSRdyTbl7OSRdyTbl7中的任何一位是中的任何一位是1 1时,时,OSRdyGrpOSRdyGrp的第的第7 7位置位置1 1 泅锨绩锭链爆底曾详沃腥荔丙次等馁白承家谢持卉陋吕载壹窝贡镊苛轴裕二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件13就绪表就绪表 l每每个个任任务务被被赋赋予予不不同同的的优优先先级级等等级级,从从0 0级级到到最最低低优优先先级级OS_LOWEST_PR1OOS_LOWEST_PR1O,包包括括0 0和和OS_LOWEST_PR1OOS_LOWEST_P

24、R1O在在内内(见见文文件件OS_CFG.HOS_CFG.H)。当当C/OS-C/OS-初初始始化化的的时时候候,最最低低优优先先级级OS_LOWEST_PR1OOS_LOWEST_PR1O总总是是被被赋赋给给空空闲闲任任务务idle idle tasktask。注注意意,最最多多任任务务数数目目OS_MAX_TASKSOS_MAX_TASKS和和最最低低优优先先级级数数是是没没有有关关系系的的。用用户户应应用用程程序序可可以以只只有有1010个个任任务务,而而仍仍然然可可以以有有3232个个优优先先级级的的级级别别(如如果果用用户户将将最最低低优优先先级级数数设设为为3131的的话话)。l每

25、个任务的就绪态标志都放入就绪表中的,就绪表中有两个变量每个任务的就绪态标志都放入就绪表中的,就绪表中有两个变量OSRedyGrpOSRedyGrp和和OSRdyTblOSRdyTbl。在。在OSRdyGrpOSRdyGrp中,任务按优先级分组,中,任务按优先级分组,8 8个任务为一组。个任务为一组。OSRdyGrpOSRdyGrp中的每一位表示中的每一位表示8 8组任务中每一组中是否有进入就绪态的任务。任务组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表进入就绪态时,就绪表OSRdyTblOSRdyTbl中的相应元素的相应位也置位。就绪表中的相应元素的相应位也置位。就绪表OSR

26、dyTblOSRdyTbl数组的大小取决于数组的大小取决于OS_LOWEST_PR1O(OS_LOWEST_PR1O(见文件见文件OS_CFG.H)OS_CFG.H)。当用户的应用程序中。当用户的应用程序中任务数目比较少时,减少任务数目比较少时,减少OS_LOWEST_PR1OOS_LOWEST_PR1O的值可以降低的值可以降低C/OS-C/OS-对对RAMRAM(数据(数据空间)的需求量。空间)的需求量。 躺粗们群滋酶撮励瞄普拼蜒诀啄邓计珊眨遵已字己饼插乃殉绰滦秦刚赖狄二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件14根据优先级找到任务在就绪任务表中的位置根据优先级找到

27、任务在就绪任务表中的位置每个任务的就绪状态标志都放入就绪表中(每个任务的就绪状态标志都放入就绪表中(readylist)中,就绪表有)中,就绪表有两个变量:两个变量:OSRdyGrp、OSRdyTbl法丘哑召豫曲又媚夜逾全患猩燎思磋藐躇看荧母户窝娶答水缴鸳芯比忠咱二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件15根据优先级确定就绪表根据优先级确定就绪表l假假设设优优先先级级为为12的的任任务务进进入入就就绪绪状状态态,12=1 100b,则则OSRdyTbl1的的第第4位位置置1,且且OSRdyGrp的的第第1位位置置1,相相应的数学表达式为应的数学表达式为:OSRdyG

28、rp|=0x02;OSRdyTbl1|=0x10;l而而优优先先级级为为21的的任任务务就就绪绪21=10101b,则则OSRdyTbl2的的第第5位置位置1,且,且OSRdyGrp的第的第2位置位置1,相应的数学表达式为:相应的数学表达式为:OSRdyGrp|=0x04;OSRdyTbl2|=0x20;疹卢略总娟仿汛幕腥硷塞隶遥掸锻二竭碟蔽耪尧握赫官乡怯辅褒可菏厉孽二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件16根据优先级确定就绪表根据优先级确定就绪表l从从上上面面的的计计算算我我们们可可以以得得到到:若若第第n位位置置1,则则应应该该与与2n相相或或。uC/OS中中

29、,把把2n的的n=0-7的的8个个值值先先计计算算好好存存在在数数组组OSMapTbl7中中,也也就就是:是:OSMapTbl0=20=0x1;OSMapTbl1=21=0x2;OSMapTbl7=27=0x80;炔卑仓沽渔渍敷霞嫌磺盂喂莎炮釜而尿乍浓哦母饰成弦甥黍瑟剥篱镊佰搓二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件17根据优先级确定就绪表根据优先级确定就绪表l利利用用OSMapTbl,通通过过任任务务的的识识别别号号-优优先先级级prio来来设设置置任任务务在在就就绪绪组和就绪表数组中相应位置的数学式为:组和就绪表数组中相应位置的数学式为:OSRdyGrp|=OS

30、MapTblprio3;OSRdyTblprio3|=OSMapTblprio&0x07;假设优先级为假设优先级为12,1100bOSRdyGrp|=0x02;OSRdyTbl1|=0x10;铅晨珍毋哎盂只兜荆追粱磺养设瀑隔凋预酵趋幅邑钙碑冉掐沈浇芜谩病肚二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件18根据就绪表确定最高优先级根据就绪表确定最高优先级两个关键两个关键:l优先级数分解为高三位和低三位优先级数分解为高三位和低三位分别确定;分别确定;l高优先级有高优先级有着小的优先级号 ;选锚凯音力蚕棱甘孕陡贝购刨横自巡纤统曾瓮拎谱旭应拢粗阴拒味崎也域二嵌入式实时操作系统分析

31、ppt课件二嵌入式实时操作系统分析ppt课件19根据就绪表确定最高优先级根据就绪表确定最高优先级l通过通过OSRdyGrp值确定高值确定高3位,假设为位,假设为0x24=100 100b, - OSRdyTbl2 和和OSRdyTbl5,高优先级为,高优先级为2l通过通过OSRdyTbl2的值来确定低的值来确定低3位,位,假设为假设为0x12=010 010b ,-第第2个和第个和第5个任务,取高优先级第个任务,取高优先级第2个个-17蛤厅帧劈袜新兽锣偷更潞紧超拎峻确厢均吊此卯斜尝肢熙陛主岿彭语乞如二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件20源代码中使用了查表法源代

32、码中使用了查表法查查表表法法具具有有确确定定的的时时间间,增增加加了了系系统统的的可可预预测测性性,uC/OS中中所所有有的的系系统统调调用时间都是确定的用时间都是确定的lHigh3=OSUnMapTblOSRdyGrp;lLow3=OSUnMapTblOSRdyTblHigh3;lPrio=(Hign33)+Low3;?为什么频繁的使用查表法?为什么频繁的使用查表法?请问?请问OSUnMapTbl的来历;的来历;沧汽谎蓬磋每掳效悼蕴贮惑蝗览昂盂浓聪隆泄镜懦璃妹邦烁之溪坚鼠闯酗二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件21INT8U const OSUnMapTbl

33、= 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 该处缺该处缺10排数

34、据,请补充(下次课不上,为查资料时间,解决本道题目)排数据,请补充(下次课不上,为查资料时间,解决本道题目);域夏本犬妮虫哩恋豫急擒逝虎疯靳侗库贾滑尖冈途拨识顾枝逸垢盖长答兄二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件22INT8U const OSUnMapTbl = 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1,

35、 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1,

36、 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1,

37、 0, 2, 0, 1, 0;摹殆缕磷批型亮盾咱条惦继菌乃吸丹俞梗爹肮长应炎星能垃帧揍宿茄狱凶二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件lC/OS-C/OS-总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优先级最高,总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优先级最高,下面该哪个任务运行了的工作是由调度器(下面该哪个任务运行了的工作是由调度器(SchedulerScheduler)完成的。任务级的调度是由函)完成的。任务级的调度是由函数数OSSched()OSSched()完成的。中断级的调度是由另一个函数完成的。中断级的调度是由另一个函数OS

38、IntExt()OSIntExt()完成的,这个函数将在完成的,这个函数将在以后描述。以后描述。OSSched()OSSched()的代码如程序清单。的代码如程序清单。 lvoid OSSched (void)ll INT8U y;l OS_ENTER_CRITICAL();l if (OSLockNesting | OSIntNesting) = 0) (1)l y = OSUnMapTblOSRdyGrp;(2)l OSPrioHighRdy = (INT8U)(y 3) + OSUnMapTblOSRdyTbly);(2)l if (OSPrioHighRdy != OSPrioCur)

39、 (3)l OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy;(4) OSTCBHighRdyOSTCBHighRdy必须必须指向优先级最高的那个任务控制块指向优先级最高的那个任务控制块OS_TCBOS_TCB ,通过将以通过将以OSPrioHighRdyOSPrioHighRdy为下标的为下标的OSTCBPrioTblOSTCBPrioTbl数组中的那个元素赋给数组中的那个元素赋给OSTCBHighRdyOSTCBHighRdy来实现的来实现的 l OSCtxSwCtr+; (5)l OS_TASK_SW();完成实际上的任务切换完成实际上的任务切换 (6)l

40、 l l OS_EXIT_CRITICAL();l闽藉悟侦誊芝恿降钧捏砖肩搂掘被泼桶挟跳履寞椒舜抉丑税进桥蓉烩抹问二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件24空闲任务空闲任务 lC/OS-C/OS-总是建立一个空闲任务,这个任务在没有其它任务进入就绪态时投入运总是建立一个空闲任务,这个任务在没有其它任务进入就绪态时投入运行。这个空闲任务行。这个空闲任务OSTaskIdle()OSTaskIdle()永远设为最低优先级,即永远设为最低优先级,即OS_LOWEST_PRI0OS_LOWEST_PRI0。空闲。空闲任务任务OSTaskIdle()OSTaskIdle()什

41、么也不做,只是在不停地给一个什么也不做,只是在不停地给一个3232位的名叫位的名叫OSIdleCtrOSIdleCtr的计数的计数器加器加1 1,统计任务使用这个计数器以确定现行应用软件实际消耗的,统计任务使用这个计数器以确定现行应用软件实际消耗的CPUCPU时间。程序清时间。程序清单是空闲任务的代码。在计数器加单是空闲任务的代码。在计数器加1 1前后,中断是先关掉再开启的,因为前后,中断是先关掉再开启的,因为8 8位以及大位以及大多数多数1616位微处理器的位微处理器的3232位加位加1 1需要多条指令,要防止高优先级的任务或中断服务子需要多条指令,要防止高优先级的任务或中断服务子程序从中打

42、入。空闲任务不可能被应用软件删除。程序从中打入。空闲任务不可能被应用软件删除。lvoid OSTaskIdle (void *pdata)ll pdata = pdata;l for (;) l OS_ENTER_CRITICAL();l OSIdleCtr+;l OS_EXIT_CRITICAL();l ll 操煎牟娜茂绢围哺绦席乔膘粕怒赎疑眶法盂紧竞时畦捎模座慧艳葡丢擅毋二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件25中断处理中断处理l中断服务子程序要用汇编语言来写。然而,如果用户使用的中断服务子程序要用汇编语言来写。然而,如果用户使用的C C语言编译器支持在线汇语

43、言编译器支持在线汇编语言的话,用户可以直接将中断服务子程序代码放在编语言的话,用户可以直接将中断服务子程序代码放在C C语言的程序文件中。中断服语言的程序文件中。中断服务子程序的示意码务子程序的示意码 l用户中断服务子程序用户中断服务子程序: l 保存全部保存全部CPU寄存器寄存器; (1) l调用调用OSIntEnter或或OSIntNesting直接加直接加1; (2) l 执行用户代码做中断服务执行用户代码做中断服务; (3) l 调用调用OSIntExit(); (4) l 恢复所有恢复所有CPU寄存器;寄存器; (5) l 执行中断返回指令;执行中断返回指令; (6)luC/OS中提

44、供了中提供了OSIntEnter() 和和OSIntExit() 告诉内核进入了中断状态告诉内核进入了中断状态圾馏育京孵侠万轨小熔象甸币牌路埂柠盂肩梢属衅蜒遭郝惠苇云相衙满声二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件l程序清单程序清单 通知通知C/OS-C/OS-,中断服务子程序开始了,中断服务子程序开始了.lvoid OSIntEnter (void)ll OS_ENTER_CRITICAL();l OSIntNesting+;l OS_EXIT_CRITICAL();ll砷殃舟忙鲸嘱茬沼蕊东遮姑毙演院蹭后艇谁蛙曳秽贰渐图诬醒驻盘吞巷旦二嵌入式实时操作系统分析ppt

45、课件二嵌入式实时操作系统分析ppt课件27时钟节拍时钟节拍 l时钟节拍是一种特殊的中断,操作系统的心脏。首先时钟节拍是一种特殊的中断,操作系统的心脏。首先32位的整数位的整数OSTime加一。对任务列表进行扫描,判断是否有延时任务应该处于准备就绪状态,加一。对任务列表进行扫描,判断是否有延时任务应该处于准备就绪状态,最后进行上下文切换。最后进行上下文切换。胺什榜淹匆光街筏冯咱氖枣鱼诺亢眩闯竖江濒良呕患帖烩弧昭谱槛技架诧二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件28多任务的启动多任务的启动l首先创建任务首先创建任务l最后调用最后调用OSStart开始多任务调度开始多任务

46、调度voidmain()OSInit();.OSTaskcreat().OSStart();说钱远摔廷返攒伦爸浙纂池醛缮宴祈糕铅陶播胺瑚搅枢洛荤嗣佯础捻枪羹二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件29任务的格式任务的格式l每个任务不能占用全部每个任务不能占用全部CPU的资源的资源l需要有等待,或延时等系统调用需要有等待,或延时等系统调用l典型的一个无限循环。典型的一个无限循环。voidmytask(void*pdata)for(;)dosomething;waiting;dosomething;侣暗逼邮聂嚏前汉历转马雕益这备骆惫慢剿丧佯轨施胡透枯华泡汞窘卤篮二嵌入式

47、实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件30任任务调度务调度lFor example1 创建创建2个任务,每个任务仅仅是进行延时,延时不同的个任务,每个任务仅仅是进行延时,延时不同的时间片,不同优先级时间片,不同优先级void Task1(void) void Task2(void) while(1) while(1) blinkled1(); blinkled2();Task1Data+; Task2Data+; OSTimeDly(25); OSTimeDly(50); 聋炭撕喳鉴痕瓶烽谬蛛异瞒填统忱沁聋俱均和缴铰仰馋重形冠儡渺闰佩引二嵌入式实时操作系统分析ppt课件二

48、嵌入式实时操作系统分析ppt课件31void main() sysinit(); OSInit (); OSTaskCreate ( Task1, (void *)&Task1Data, (void *)&Task1StkTASK_STK_SIZE,Task1prio); OSTaskCreate (Task2, (void *)&Task2Data, (void *)&Task2StkTASK_STK_SIZE,Task2prio); ticker_start(OS_TICKS_PER_SEC); OSStart();劫汾滞酪屯氯毛踌物剐墨溜沛刚脚召屏案吞治芳午叠的屉瘁妹露读泊吼妨二嵌入式实

49、时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件void OSStart (void) INT8U y, x; if (OSRunning = FALSE) 判断是否没有启动内核判断是否没有启动内核 y = OSUnMapTblOSRdyGrp; x = OSUnMapTblOSRdyTbly; OSPrioHighRdy = (INT8U)(y 3) + x); 找到优先级最高的准备就绪任务找到优先级最高的准备就绪任务 OSPrioCur = OSPrioHighRdy; 当前运行任务优先级当前运行任务优先级 OSTCBHighRdy = OSTCBPrioTblOSPrioHig

50、hRdy; 根据任务优先级找到任根据任务优先级找到任务务 OSTCBCur = OSTCBHighRdy; OSStartHighRdy(); 让优先级最高的任务运行起来让优先级最高的任务运行起来膨噎筹步渔降踞嗽秋言还闯雨撑犁缚辞富耽霍挽需备油市壬拜埠梧壕歪袁二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件voidOSSched(void)INT8Uy;OS_ENTER_CRITICAL();if(OSLockNesting|OSIntNesting)=0)调度锁,或者处于中断状态禁止调度调度锁,或者处于中断状态禁止调度y=OSUnMapTblOSRdyGrp;OSPrioHighRdy=(INT8U)(y3)+OSUnMapTblOSRdyTbly);获取准备就绪组里最高优先级的任务获取准备就绪组里最高优先级的任务if(OSPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;设置运行任务为最高优先级任务设置运行任务为最高优先级任务OSCtxSwCtr+;OS_TASK_SW();执行上下文切换执行上下文切换OS_EXIT_CRITICAL();嘘氰串名忍歇怨砷但宅疲臭搜轿疚揩附攻唉济邓男孵腥绊胯扁瓣酸操孝拳二嵌入式实时操作系统分析ppt课件二嵌入式实时操作系统分析ppt课件

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号