1µC/OS-II操作系统中进程调度模块分析2背景1、课程任务:分析µC/OS-II操作系统中的进程调度模块的源代码2、任务说明:结合课堂上讲授的进程的定义、进程控制块、进程的创建以及处理机调度算法等知识点,分析µC/OS-II操作系统中的进程调度模块的源码实现。进而理解进程控制块的结构,理解进程运行的并发性,掌握进程调度的方法。3、任务要求:(1)熟悉相关的理论知识;(2)分析µC/OS-II操作系统中的进程调度模块的代码实现,并辅以图表的形式描述实现流程;(3)对核心代码作注释说明。(4)按照模板撰写分析报告,以小组为单位参加答辩。31、uC/OS的任务控制块---0.8(25页2.3)2、任务就绪表的结构---0.9(29页2.4.1)3、对任务就绪表的操作(将就绪任务状态填入就绪表)--0.9(31页2.4.2)4、根据就绪表确定最高优先级(采用查表法确定高优先级任务)--1(31页2.4.2)5、任务调度器实现流程图表述--1(43页2.4.3)6、任务调度器实现及源代码分析--1(43页2.4.3)7、任务切换的过程描述--0.8(可选)(43页2.4.3)8、用户任务的实现(编写一个示例程序验证调度算法)--1(43页例2-7)9、任务状态切换(挂起和恢复任务)示例程序演示--0.9(可选)(48页例2-8)10、用信号量实现任务间同步和互斥示例程序演示--0.9(可选)(119页例4-4,122页例4-5)11、用消息邮箱实现任务间通信示例程序演示--0.9(可选)(136页例4-8)任务4实时操作系统C/OS-II111133332222C/OS-II概述任务概念任务调度核心问题分析5C/OS简介美国人JeanLabrosse1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等1998年C/OS-II,目前的版本C/OS-IIV2.61,2.722000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中网站www.ucos-II.com(www.micrium.com)6数据类型typedefunsignedcharINT8U;typedefsignedcharINT8S;typedefunsignedintINT16U;typedefsignedintINT16S;typedefunsignedlongINT32U;typedefsignedlongINT32S;typedeffloatFP32;typedefdoubleFP64;7实时操作系统C/OS-II111133332222C/OS-II概述任务概念任务调度核心问题分析8任务调度概念任务控制块任务代码结构任务优先级一个任务的实现9任务控制块TCB一旦任务建立,一个任务控制块OS_TCB就被赋值。任务控制块是一个数据结构,保存该任务的相关参数,包括任务堆栈指针,任务的当前状态,任务的优先级等。任务CPU使用权被剥夺时,TCB保存该时刻任务状态;任务重新得到CPU控制权时,TCB确保任务从当时被中断的那一点丝毫不差地继续执行。OS_TCB全部驻留在RAM中。任务控制块就相当于一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理的。PCB:标识符、父进程标识符、程序计数器、栈指针、进程状态、优先级10任务控制块TCBuCOS_II.H第370行typedefstructos_tcb{OS_STK*OSTCBStkPtr;//指向任务堆栈栈顶的指针……structos_tcb*OSTCBNext;//指向后一个任务控制块的指针structos_tcb*OSTCBPrev;//指向前一个任务控制块的指针……INT16UOSTCBDly;//任务等待的时限(节拍数)INT8UOSTCBStat;//任务的当前状态标志INT8UOSTCBPrio;//任务的优先级别……}OS_TCB;11任务控制块链表空任务块链表OSTCBNextOSTCBPrevOSTCBPrioOSTCBNextOSTCBPrevOSTCBPrioOSTCBNextOSTCBPrevOSTCBPrioOSTCBNextOSTCBPrevOSTCBPrioOSTCBTbl[0]OSTCBTbl[1]OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-2]OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-1]OSTCBFreeList系统在调用函数OSInit()对uC/OS-II系统进行初始化时,先在RAM中建立一个OS_TCB结构类型的数组OSTCBTbl[],每个数组元素就是一个任务控制块,然后把这些控制块链接成一个如图所示的链表。由于链表中的这些控制块还没有与具体任务相关联,因此这个链表叫做空任务块链表。每当应用程序调用系统函数OSTaskCreate()创建一个任务时,系统就会将任务控制块链表头指针OSTCBFreeList指向的任务控制块分配给该任务。在给任务控制块中的各成员赋值后,就按任务控制块链表的头指针OSTCBList将其加入到任务控制块链表中。……1...