




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目报告书项目名称C/OS-II操作系统的进程调度模块源码分析项目组组长项目组成员及分工制定日期一、目的辅助理解课堂上讲授的进程的定义、进程控制块、进程的创建以及处理及调度算法等知识点。二、任务分析C/OS-II操作系统中的进程调度模块的源码实现。进而理解进程控制块的结构,理解进程运行的并发性,掌握进程调度的方法在C/OS-II操作系统中的具体实现。三、小组内任务完成情况撰写说明:小组各成员按照任务分工对任务完成情况进行说明,形式可以是文字描述、代码描述、流程图描述或屏幕截图等。1、uC/OS的任务控制块-0.8完成人:陈俊荣任务完成情况说明:任务控制块是一个结构体数据结构,用于记录各个任务的信息。当任务的CPU的使用权被剥夺时,uCOS-II用它来保存任务的当前状态。当任务重新获得CPU的使用权时,任务控制块能确保任务从当时被中断的哪一点丝毫不差的继续执行。任务控制块全部存放在RAN中。Typedef struct os_tcb OS_STK *OSTCBStkPtr; /*指向当前任务使用的堆栈的栈顶。Ucos-II允许每个任务堆栈的大小可以不同,这样用户可根据实际需要定义任务堆栈的大小,可以节省RAN的空间。另外,由于OSTCBStkPtr是该结构体中的第一个变量,所以可以使用汇编语言的访问,因为偏移量是0。当切换任务时,用户可以容易的知道就绪任务中优先级最高任务的 栈顶。*/#if OS_TASK_CREATE_EXT_ENOu Viod *OSTCBEXTPTR; /*指向用户定义的扩展任务控制块*/ OS_STK *OSTCBSTKBOTTOM; /*指向任务堆栈的栈底。需要考虑一下你使用的MCU的栈指针是按照从高到低还是从低到高变化的。这个变量在测试任务需要的栈空间的时候需要使用。*/ INT16U OSTCBOPT; /*传给函数OSTASKCREATEEXT()的选择项。目前有OS_TAKS_OPT_STK_CHK,OS_TASK_OPT_STK_CLR, OS_TASK_OPT_SAVE_EP */INT16U OSTCBID; /*task ID (0.65535),目前没有使用。*/#endifStruct os_tcb *OSTCBNext;Struct os_tcb *OSTCBPrew; /*指向TCB的双向链表的前后链接,在OSTimek()中使用,用来刷新各个任务的任务延迟变量。OSTCBDLY.*/#if (OS_EVENT_EN)II(OS_FLAG_ENOu)OS_EVENT *OSTCBEventptr; /*指向事件控制块的指针。*/#endif#if (OS-EVENT_EN)&(OS_EVENT_MULTI_ENOu)OS_EVENT *OSTCBEventMultiPtr; /*指向多重事件控制块的指针。*/#endif#if (OS_Q_ENOu)&(OS_MAX_QSOu)II(OS_MBOX_ENOU)Viod *OSTCBMsg; /*指向传递给任务的消息的指针。*/#endif#if(OS_FLAG_EN_Ou)&(OS_MAX_FLAGSOu)#if(OS_TASK_DEL_ENOu)OS_FLAG_NODE *OSTCBFlagNode; /*指向事件标志的节点的指针。*/OS_FLAGS OSTCBFLagsRdy; /*当任务等待事件标志组时,该变量是使任务进入就绪状态的时间标志。*/#endifINT32U OSTCBDly; /*记录事件延时或者挂起的时间。*/INT8U OSTCBStat; /*任务状态字。比如就绪状态*/INT8U OSTCBStatPend;/*任务挂起状态。*/INT8U OSTCBPrio; /*任务优先级。*/INT8U OSTCBX; /*计算优先级用。*/INT8U OSTCBY; /*计算优先级用.*/#if OS_LOWEST_PRIOOuINT8U OSTCBDelReq; /*表示任务是否需要删除。*/#endif#if OS_TASK_PROFILE_ENOuINT32U OSTCBCtxSwCtr; /*任务切换的次数。*/INT32U OSTCBCYCLESTOT; /*任务运行的时钟周期数。*/INT32U OSTCBCYCLESSTART; /*任务恢复开始的循环计数.*/OS_STK *OSTCBSTKBASE; /*指向任务栈开始的指针。*/INT32U OSTCBSTKUSED; /*使用的栈的字节数*/#endif#if OS_TASK_NAME_ENOuINT8U *OSTCBTASKNAME;#endif#if OS_TASK-REG_TBL_SIZEOuINT32U OSTCBREGTBLOS-TASK_REG_TBL_SIZE;#endif OS-TCB; 2、任务就绪表的结构-0.9完成人:朱兴涛任务完成情况说明:两个变量(OSRdyGrp,DSRdyTbl8),两个表格(OSMapTblIndex,INT8Uconst OSUnMapTb),三个程序组成。三个程序分别用于任务登记进入就绪态,任务脱离就绪态,找出最高优先级就绪任务三种就绪表操作。由于系统最多有64个任务,即优先级范围为063.只用了8个字节的第六位就可以了。这六位又分为高三位Y,第三位X。pio3即可求出Y,pio&OX3F即可求出x,而X,Y,又是针对OSRdyTb1而言的。Y是该数组的下标,X是数组每一个元素的第X位。OSRdyGrp是一个位操作变量。它的8个位中,如果哪一位为1,表明DSRdyTbl数组的哪一行有任务就绪。OSMapTbl数组系统已经定义好了。共8个元素,分别是OSMapTbl0=00000001OSMapTbl1=00000010OSMapTbl2=00000100OSMapTbl3=00001000OSMapTbl4=00010000OSMapTbl5=00100000OSMapTbl6=01000000OSMapTbl7=10000000(1) 将prio右移3位,去掉X坐标占用的后三位,只取Y坐标,填入OSMapTbl,返回值宇OSRdyGrp做位或将OSRdyGrp对应位置为1,表示该行有任务进入就绪态;假设prio3得到Y坐标=3,则OSMapTbl3=00001000,与OSRdyGrp做位或将第四位置1;(2) 将prio与Ox07=00000111做位与保留低三位,将其他位置0,得到X坐标,将X坐标填入OSMapTbl,返回值与OSMapTblY做位或将OSMapTblY对应位置1,表示该行的第X位有任务进入就绪态,注意第X位要从低端算起,也就是表格的右端开始算起;列如:刚才已经算出Y坐标=3,假设pio&OXO7=X坐标=4,OSMapTbl4=00010000,将该返回值与OSMapTbl3做位或将第五位置1,表示该位的任务进入就绪态;根据X和Y倒推算任务优先级prio:只需将以上运算倒过来即可:prio=Y3+x;列如:刚才上面的例子里,Y=3,X=4,则:Prio=Y3+x=33;OSRdyTblprio3 |=OSMapTblprio&0x07;2、 从就续表中删除一个任务(通过OSMapTbl来在就续表相应的行和列):If( (OSRdyTblprio3&=OSMapTblprio&0x07 )=0)OSRdyGrp&=OSMapTblprio3;注意: OSRdyTblprio3所有的位都是零时,OSRdyGrp的相应位才清零。所以要进行判断。4、根据就绪表确定最高优先级(采用查表法确定高优先级任务)-1完成人:叶文辉任务完成情况说明:两个关键:1.将优先级数分解为高三位和低三位分别确定;2.高优先级有着小的优先级号;实现的思路如下:根据上面的表格能找到每一个OSRdyGrp值对应的最高优先级号所在的行,同样依据上表能找到OSRdyTbli每一个值对应的最高优先级号所在的列。然后依据上面的等式TaskPrior = 8*i+j=(i3)+ j,分别确定i,和j。即:i = OSUnMapTblOSRdyGrp ;/ 找到行号j = OSUnMapTblOSRdyTbli;/找到列号TaskPrior(prio) = 8*i+j=(i3)+ j;/找到最高优先级号。 例如:OSRdyGrp的值为如果prio是00011001,即优先级是25。则OSRdyGrp中的第三位是被置一的,OSRdyTbl中的第一位是被置一的。)以上的位图和查表法的相结合就很好的解决了UC/OS-II的优先级管理问题。源代码中使用了查表法1.查表法具有确定的时间,增加了系统的可预测性,uC/OS中所有的系统调用时间都是确定的2.用空间来换时间。X=OSUnMapTblOSRdyGrp;Y=OSUnMapTblOSRdyTbly;Prio=(y3)+x;5、任务调度器实现流程图表述1 完成人:郭杰加任务完成情况说明:任务调度器分为两种,一种是任务级调度器,另一种是中断级调度器。任务级调度器的流程图判断任务是否为当前运行任务NooYesNoYes结束开中断调用任务切换函数任务切换计数器加1将准备就绪的最高优先级任务指向该任务的控制块找出准备就绪且优先级最高的任务是否中断嵌套或调度上锁开始:任务级调度的源代码: void OSSched(void)#if OS_CRITICAL_METHOD = 3OS_CPU_SR_cp_sr;#end ifINT8U y;OS_ENTER_CRITICAL; /关中断If(OSLockNesting|OSInitNesting)=0) /是否上锁了y=OSUnMapTblOSRdyGrp; /找到高三位OSPrioHighRdy=(INT8U)(y3)+UnMapTblOSRdyTbly); /找到最高优先级If(OSPrioHighRdy!=OSPrioCur) /判断优先级高的任务是否为当前正在执行的任务OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy; /得到任务控制块指针OSCtxSwCtr+; /统计任务切换次数的计数器加1OS_TASK_SW(); /任务切换OS_EXIT_CRITICAL(); /关中断中断任务调度:开中断进入中断YN把R15R4出栈调用OSIntCtxSw中断任务调度NY调用OSInExit()把sp指向系统中断堆栈保存当前sp到当前任务堆栈执行中断服务子程序判断是否为中断嵌套?Reti返回最高优先级就绪任务SP移动最高优先级任务栈顶找到最高优先级任务OSIntNesting+判断是否为中断嵌套?中断源保存R4-R12到当前任务堆栈PC/SR自动压栈6、任务调度器实现及源代码分析1完成人:彭传文任务完成情况说明:多任务操作系统的核心:任务调度。调度定义:就是通过一个算法在多个任务中确定哪个任务来运行。做这项工作的就是调度器。在uc/os中总是运行优先级最高的就绪任务,确定哪个任务优先级最高,该由哪个优先级人物运行了,这一工作是由任务调度器完成的,(而具体的任务切换,是任务调度器在调用其他函数来完成)。其中任务级的调度由函数OS_Sched()来完成,中断级的调度由OSIntExt()来完成的os_sched()所有代码都是临界段代码,在准找进入就绪态的优先级最高任务时,为了防止中断服务子程序把多个任务的就绪位置位,中断是关闭的。为了能使系统清楚地知道系统中哪些任务已经就绪,哪些还没有就绪,UC/OS-II在RAM中设立了一个记录表,系统中的每个任务都在这个表占据一个位置,并用这个位置的状态(1或者0)来表示任务是否处于就绪状态。这个表就叫做任务就绪表。0表示就绪,1表示中断void OSScher (void) INT8U y; /定义一个局部变量OS_ENTER_CRITICAL(); /进入临界区,屏蔽中断/判断是否满足调度条件,在uc/os中任务级调度的调用不允许来自中断服务子程序(OSIntNesting) = 0),且允许任务调度(OSLockNesting=0),此外当调度器上锁时(OSLockNesting=1),任务调度函数将直接退出,不做任务调度 if (OSLockNesting | OSIntNesting) = 0) /这两行代码是获得进入就绪态且优先级最高的任务 y = OSUnMapTblOSRdyGrp; /OSRdyGrp()就绪列表中的变量, OSMapTbl是uC/OS-II为加快运算速度定义的一个数组。获取就绪状态下最高优先级任务指针 OSPrioHighRdy = (INT8U)(y 3) + OSUnMapTblOSRdyTbly); / 计算最高任务优先级/检验优先级最高的任务是否是当前正在运行的任务。以避免不必要的的任务调度,毕竟任务调度是需要时间滴 if (OSPrioHighRdy != OSPrioCur) /通过当前最高优先级OSPrioHighRdy,从任务控制块优先级表中OSTCBPrioTbl获得当前最高优优先级任务控制块 OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy; OSCtxSwCtr+; /该全局变量(32位)用于记录任务切换的次数,任务切换计数器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村壁炉修造方案(3篇)
- DB23-T2975-2021-消费品召回风险评估-黑龙江省
- DB23-T2888-2021-杨树人工造林间作北苍术栽培技术规程-黑龙江省
- 公司总务后勤管理制度
- 厂内小件物流管理制度
- 光伏公司绩效管理制度
- 医疗机械设备管理制度
- 连排别墅重建方案(3篇)
- 会展比选方案(3篇)
- 公司检修小组管理制度
- 转让酒店经营权协议书
- 工程伦理-工程案例分析
- The-Art-of-War-孙子兵法-大学英语-学生讲课实践的课件
- 电线电缆产品生产许可证实施细则样本
- 设计管理策划书
- 事业部机构设置
- 小学体育篮球行进间运球说课稿
- 工业互联网体系架构介绍
- 危化品行业重大事故隐患判定标准全面解读
- 食品感官排列试验-排序检验法
- 英语大白超能陆战队
评论
0/150
提交评论