嵌入式操作系统,嵌入式操作系统8

电脑 6
uC/OS-II简单分析 陈香兰(xlanchen@) 计算机应用教研室@计算机学院嵌入式系统实验室@苏州研究院 中国科学技术大学Fall2014 December9,2014 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)1/41 Outline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)2/41 O.utline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)3/41 µC/os−II 免费的公开源码实时操作系统内核提供任务调度和管理、时钟管理、任务间同步与通信、内存管理和中断服务等功能最多支持64个任务,分别对应优先级0~63,其中0为最高优先级可剥夺实时多任务内核 ▶调度工作的内容分为两部分:最高优先级任务的寻找和任务切换 内核是针对实时系统的要求来设计实现的,相对比较简单,可以满足较高的实时性要求但是没有网络功能和文件系统,对于像媒体播放、需要网络和图形界面支持的应用就比较差 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)4/41 O.utline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)5/41 目录分析 . t.reeSOFTWARE/uCOS-II/-L1 SOFTWARE/uCOS-II/├──DOC├──EX1_x86L├──EX2_x86L├──EX3_x86L├──EX4_x86L.FP├──Ix86L├──Ix86L-FP .└──SOURCE 序号 目录名 含义
1 DOC 一些文档,可以看看
2 EX1_x86L第一个基于x86的应用实例
3 EX2_x86L第二个基于x86的应用实例
4 EX3_x86L第三个基于x86的应用实例 5EX4_x86L.FP第四个基于x86的应用实例
6 Ix86L 嵌入式x86开发板 陈香兰(xlanchen@)
7 Ix86L-FP带浮点的嵌入式x86开发板 .................
8 SOURCE 核心源代..码.................................. (计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)
6 ....... /41 SOURCE目录 在SOURCE目录下一共有10个C文件和1个头文件 ▶其中,文件uCOS_II.C仅仅是对其他.C文件的包含,因此真正的内核代码仅仅9个C文件和1个头文件 . t.reeSOFTWARE/uCOS-II/SOURCE/-h SOFTWARE/uCOS-II/SOURCE/├──[49K]OS_CORE.C├──[43K]OS_FLAG.C├──[23K]OS_MBOX.C├──[14K]OS_MEM.C├──[27K]OS_MUTEX.C├──[34K]OS_
Q.C├──[19K]OS_SEM.C├──[35K]OS_TASK.C├──[9.7K]OS_TIME.C├──[1.2K]uCOS_II.C└──[46K]uCOS_II.H .0directories,11files .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)7/41 体系结构相关目录和板级支持包 以x86为例 ▶体系结构相关目录. treeSOFTWARE/uCOS-II/Ix86L-h . SOFTWARE/uCOS-II/Ix86L ├──[4.0K]BC45 │ ├──[14K]OS_CPU_
A.ASM │ ├──[15K]OS_CPU_
C.C │ └──[6.1K]OS_CPU.H └──[4.0K]DOC └──[31K]80x86L-ROM-RAM.xls .2directories,4files ▶板极支持包(PC上的模拟环境). treeSOFTWARE/BLOCKS/ . SOFTWARE/BLOCKS/ └──PC └──BC45 ├──PC.C └──PC.H .................... .................................. ...... 陈香2兰d(thoenr@iuestsc,i)les(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)
8/41 应用实例相关目录 以实例1为例 . t.reeSOFTWARE/uCOS-II/EX1_x86L/-h SOFTWARE/uCOS-II/EX1_x86L/ └──[4.0K]BC45 ├──[4.0K]SOURCE │ ├──[903]INCLUDES.H │ ├──[7.9K]OS_CFG.H │ ├──[13K]TEST.C │ └──[265]TEST.LNK └──[4.0K]TEST ├──[842]MAKETEST.BAT ├──[126K]TEST.EXE ├──[5.8K]TEST.MAK └──[48K]TEST.MAP 3.directories,8files .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科学De技ce术mb大er学9F,al2l0124014)9/41 O.utline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)10/41 在dosbox中运行uC/OS-II中的实例
I 我们直接运行uC/OS-II中已经编译好的实例,以实例1为例
1.安装dosbox sudoapt-getinstalldosbox▶运行 dosbox .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)11/41 在dosbox中运行uC/OS-II中的实例II ▶在dosbox中运行help以及intro命令,寻找你感兴趣的帮助信息 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)12/41 在dosbox中运行uC/OS-II中的实例III
2.建立dosbox与主机之间的共享文件夹,作为dosbox中的C盘
1.在主机上建立一个目录,作为给dosbox共享的文件夹,例如:mkdir~/workspace/dosdir2.在dosbox中运行mount命令,如下:mountc~/workspace/dosdir3.进入dosbox的C盘dosbox提示符Z:\>c: .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)13/41 在dosbox中运行uC/OS-II中的实例IV .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)14/41 准备源代码并运行实例
I 在主机端,将uC-OS_II.rar解压缩到dosdir目录中unrarxuC-OS_II.rar 或其他版本重新运行dosbox,挂载c盘到共享目录dosdir,并进入c盘在dosbox中,进入UC-OSII的实例1的相关目录并运行 dosbox提示符C:\>cdSOFTWARE\UCOS-II\EX1_X86L\BC45\TESTdosbox提示符C:\>TEST.EXE .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)15/41 准备源代码并运行实例II .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)16/41 准备编译环境并编译运行 准备编译环境?. 请.自行完成! 演示:编译并运行 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)17/41 uC/OS-II的编译过程
1.阅读MAKETEST.BAT2.阅读TEST.MAK ▶仔细阅读TEST.EXE的生成规则以及相关OBJ文件生成规则
3.阅读TEST.LNK. 思考1:如果要自己写一个运行在x86上的实例,如何进行?思考2:如果要移植到一个真实的x86上,如何进行?思.考3:如果要移植到另一个平台(例如ARM)上,如何进行? .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)18/41 O.utline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)19/41 uC/OS-II的功能解读 首先,请仔细阅读一下DOC目录下的文件QuickRefChartV252Color.PDF
1.信号量OS_SEM2.互斥信号量OS_MUTEX3.标志OS_FLAG4.信箱OS_MBOX5.消息队列OS_Q6.内存管理OS_MEM7.任务管理OS_TASK8.时间管理OS_TIME9.其他OS_CORE .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)20/41 信号量 信号量是基于event实现的一个信号量的主要包含两个部分 1.count值
2.等待队列提供6个接口函数对信号量进行操作
1.OSSemCreate():创建一个新的信号量
2.OSSemDel():销毁指定的信号量
3.OSSemPend():请求一个信号量(资源数
1,可能等待, 可以超时等待)4.ept():请求一个信号量(资源数
1,不等待)
5.OSSemPost():释放一个信号量(资源数1)
6.OSSemQuery():查询一个信号量的信息 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)21/41 互斥信号量 提供6个接口函数对信号量进行操作
1.OSMutexCreate():创建一个新的互斥信号量
2.OSMutexDel():销毁指定的互斥信号量
3.OSMutexPend():请求一个互斥信号量(可能等待,可以超时等待)4.ept():请求一个互斥信号量(不等待)
5.OSMutexPost():释放一个互斥信号量
6.OSMutexQuery():查询一个互斥信号量的信息 . 问题:在uC/OS-II中,信号量(二进制)和互斥信号量有.什么不一样? .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)22/41 事件标志 OSFlagCreate():创建OSFlagDel():销毁OSFlagPend():请求一个ept():请求一个OSFlagPost():发送OSFlagQuery():查询一个信号量的信息 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)23/41 邮箱 邮箱提供了一个消息指针提供7个接口函数对邮箱进行操作
1.OSMboxCreate():创建一个新的邮箱
2.OSMboxDel():销毁一个邮箱3.ept():从邮箱中接收一个消息(不等待)
4.OSMboxPend():从邮箱中接收一个消息(可能等待,可以超时等待)
5.OSMboxPost():发送一个消息到邮箱中
6.OSMboxPostOpt():发送一个消息到邮箱中(可以选择 是否广播给所有等待任务)
7.OSMboxQuery():查询一个邮箱的信息 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)24/41 消息队列 消息队列使用一个循环缓冲区来管理消息 提供7个接口函数对消息队列进行操作 ▶OSQCreate():创建一个新的消息队列▶OSQDel():销毁一个消息队列▶ept():从消息队列上接收一个消息(不等待)▶OSQFlush():清空一个消息队列▶OSQPend():从一个消息队列上接收一个消息(可能等待, 可以超时等待)▶OSQPost():发送一个消息到消息队列末尾▶OSQPostFront():发送一个消息到消息队列首部▶OSQPostOpt():发送一个消息到消息队列首部(可以 选择是末尾还是首部,是否广播)▶OSQQuery():查询一个消息队列的信息 . 问.题:邮箱和消息队列有什么不一样? .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)25/41 内存管理 提供按固定大小管理内存的管理机制提供7个接口函数对内存进行管理操作
1.OSMemCreate():按固定大小管理一个给定的内存区域
2.OSMemGet():分配一个固定大小的内存块
3.OSMemPut():释放一个固定大小的内存块
4.OSMemQuery():查询一个内存区的信息 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)26/41 任务管理 提供9个任务管理接口
1.OSTaskCreate():创建一个新的任务
2.OSTaskCreateExt():创建一个新的任务
3.OSTaskDel():销毁一个任务
4.OSTaskDelReq():请求一个任务自我销毁(仅通知)
5.OSTaskSuspend():暂停任务运行
6.OSTaskResume():恢复任务运行
7.OSTaskChangePrio():改变任务优先级
8.OSTaskStkChk():任务堆栈检查
9.OSTaskQuery():获得任务TCB中的信息 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)27/41 时间管理OS_TIME 系统时间:OSTime(滴答数) ▶系统初始化时设置为0;(OS_InitMisc())▶发生时钟中断时,加1;(OSTimeTick)▶可以设置系统时间(OSTimeSet) OSTimeDly():任务延迟n个滴答(0~65535)OSTimeDlyHMSM():任务延迟指定的时间长度(小时,分钟,秒,毫秒)OSTimeDlyResume():因任务延迟到期而恢复任务OSTimeGet():获得系统时间OSTimeSet():设置系统时间 .. OSTimeTick():时钟滴答函数(OS_CORE.C) .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)28/41 事件机制 事件的类型. /*********************************************************************************OS_EVENTtypes********************************************************************************/#defineOS_EVENT_TYPE_UNUSED0#defineOS_EVENT_TYPE_MBOX1#defineOS_EVENT_TYPE_Q2#defineOS_EVENT_TYPE_SEM3#defineOS_EVENT_TYPE_MUTEX4 .#defineOS_EVENT_TYPE_FLAG5 事件控制块OS_EVENT,参见uCOS_II.H 事件控制块数组 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)29/41 事件机制 事件机制提供给其他服务模块的内部接口:▶OS_EventTaskRdy():因事件到来,使等待任务就绪▶OS_EventTaskWait():因事件未到来,使任务等待▶OS_EventTO():因事件超时,使等待任务就绪▶OS_EventWaitListInit():事件等待队列初始化▶OS_InitEventList初始化事件控制块数组 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)29/41 其他 提供给Application的外部接口
1.OSInit():操作系统初始化
2.OSIntEnter():进入中断处理前的准备
3.OSIntExit():离开中断处理后的收尾
4.OSSchedLock():禁止调度
5.OSSchedUnlock():允许调度
6.OSStart():操作系统开始运行(多任务开始)
7.OSStatInit():操作系统统计相关的初始化
8.OSVersion():获得OS版本号 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)30/41 其他 内部接口
1.OS_Dummy():空操作
2.OS_InitMisc():一些系统参数的初始化
3.OS_InitRdyList():就绪队列初始化
4.OS_InitTaskIdle():idle任务初始化(创建)
5.OS_InitTaskStat():统计任务初始化(创建)
6.OS_InitTCBList():任务控制块数组初始化
7.OS_Sched():调度函数
8.OS_TaskIdle():idle任务函数
9.OS_TaskStat():统计任务函数10.OS_TCBInit():初始化一个TCB11.... .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)30/41 O.utline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)31/41 Application样例
I . /* ***************************************************************************** *MAIN ***************************************************************************** */ void
main(void){ PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);/*Clearthescreen*/ OSInit(); /*InitializeuC/OS-II*/ PC_DOSSaveReturn(); /*SaveenvironmenttoreturntoDOS*/ PC_VectSet(uCOS,OSCtxSw);/*InstalluC/OS-II’scontextswitchvector*/ RandomSem=OSSemCreate
(1);/*Randomnumbersemaphore*/ OSTaskCreate(TaskStart,(void*)
0,&TaskStartStk[TASK_STK_SIZE-1],0); OSStart(); .} /*Startmultitasking*/ .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)32/41 Application样例II . /***************************************************************************** *STARTUPTASK *****************************************************************************/ voidTaskStart(void*pdata){ #ifOS_CRITICAL_METHOD==
3 /*AllocatestorageforCPUstatusregister*/ OS_CPU_SRcpu_sr; #endif chars[100]; INT16Skey; pdata=pdata; /*pilerwarning*/ TaskStartDispInit(); /*Initializethedisplay*/ OS_ENTER_CRITICAL(); PC_VectSet(0x08,OSTickISR); /*InstalluC/OS-II’sclocktickISR*/ PC_SetTickRate(OS_TICKS_PER_SEC);/*Reprogramtickrate*/ OS_EXIT_CRITICAL(); OSStatInit(); /*InitializeuC/OS-II’sstatistics*/ .TaskStartCreateTasks(); /*Createalltheapplicationtasks*/ .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)33/41 Application样例III . for(;;){ TaskStartDisp(); /*Updatethedisplay*/ if(PC_GetKey(&key)==TRUE){/*Seeifkeyhasbeenpressed*/ if(key==0x1B){ /*Yes,seeifit’stheESCAPEkey*/ PC_DOSReturn(); /*ReturntoDOS*/ } } OSCtxSwCtr=0;OSTimeDlyHMSM(0,0,1,0);} }. /*Clearcontextswitchcounter*//*Waitonesecond*/ .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)34/41 O.utline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)35/41 调度算法分析
1.系统运行的级别
1.中断处理级别:不允许调度 ⋆全局量OSIntNesting表示中断嵌套深度(使用一定要对称)=0:不在中断处理级别>0:在中断处理级别 ⋆OSIntEnter():进入中断处理前的准备⋆OSIntExit():离开中断处理后的收尾
2.任务运行级别:调度可以被禁止和允许在任务运行级别,任务按照优先级来(抢占)调度⋆OSSchedLock():禁止调度⋆OSSchedUnlock():允许调度 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)36/41 调度算法分析
2.调度的时机
1.从中断处理级别进入任务运行级别时,若允许调度,则调度 ⋆参见OSIntExit
2.任务因某些原因而等待或被唤醒时以消息队列为例:
1.OSQDel()中,若销毁消息队列时有等待任务被迫就绪,则因就绪队列发生改变有必要调度
2.OSQPend()中,若任务因等待消息的到来而阻塞,必须调度其他任务运行
3.OSQPost()、OSQPostFront()、OSQPostOpt()中,若有任务因消息到来而被唤醒,必须调度
3.新任务创建之后,若已经处于多任务状态,则重新调度
4.任务被删除之后,需要重新调度
5.一个任务恢复运行时,若该任务没有处于延迟执行状态, 需要重新调度
6.当前任务被挂起时,需要调度一个其他任务运行
7.任务优先级改变时,需要重新调度 .................... .................................. ...... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)36/41 调度算法分析
3.调度函数
1.定位最高优先级OSPrioHighRdy2.若OSPrioHighRdy不是当前任务优先级OSPrioCur,
1.修改最高优先级任务OSTCBHighRdy指向新的最高优先级任务
2.切换上下文 . 调.度的关键:就绪队列的组织 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)36/41 调度的关键:就绪队列的组织 前提:
1.最多64个优先级,0~63;数字越大,优先级越低用户可以定义OS_LOWEST_PRIO,表明实际使用的最低优先级约定:idle任务的优先级总是OS_LOWEST_PRIO,统计任务(若使用)的优先级总是OS_LOWEST_PRIO-1
2.最多64个任务:任务和优先级一对
思路:按优先级位图管理就绪任务 . OS_EXT .OS_EXT ▶64位,8个字节,每个bit表示对应任务的就绪情况[是/否]▶每个字节为一个group,一共8个group; 每个group使用一个bit表示该group中所有任务的就绪情况[有/没有];一共8个bit,即一个字节▶即采用二级位图 INT8UOSRdyGrp; /*Readylistgroup*/ INT8UOSRdyTbl[OS_RDY_TBL_SIZE];/*Tableoftaskswhicharereadytorun*/ .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)37/41 调度的关键:就绪队列的组织 算法:任务优先级↔位图(的bit位)
1.给定任务优先级
A,A的范围[0~63],有效位为低端6位,则: ⋆X=A的末尾3位,表示为X=A&0x7; Y=A的中间3位,表示为Y=(A>>3)&&
7 OSRdyGrp76543210 000000100 OSRdyTbl[7]
X 最高优先级 ptcb->OSTCBPrio00yyyxxx [0]00000000[1]00000000[2]001000000[3]00000000Y[4]00000000[5]00000000[6]00000000[7]00000000 76543210最低优先级
Y X 以任务优先级22为例: 优先级22=00010110b 因此OSRdyTbl[2]中第6位置
1,OSRdyGrp中第2位置
1 对应的掩码:uC/OS-II采用查表法(具体参见OSMapTbl[]).................... .................................. ...... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)37/41 调度的关键:就绪队列的组织 算法:任务优先级↔位图(的bit位)
2.给定位图(系统中的当前位图),得到最新的最高优先级
1.根据OSRdyGrp的值确定最高优先级所在的组号即Y值;
2.根据最高优先级组的值确定最高优先级的X值;
3.两者组合成最高优先级。
uC/OS-II的方法:查表法(具体参见OSUnMapTbl[]) .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)37/41 关于性能的思考 硬实时操作系统应该满足哪些条件? .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)38/41 O.utline
1.概述
2.目录分析
3.试运行和编译分析4.uC/OS-II的功能解读
5.应用样例分析
6.调度算法分析
7.移植分析 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)39/41 移植分析 体系结构相关的移植:3个关键的文件▶阅读下列文件(以Ix86L为例)
1.OS_CPU_
A.ASM2.OS_CPU_
C.C3.OS_CPU.H 板极支持包 .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)40/41 . T.hanks! . Theend. .................................................. .......... 陈香兰(xlanchen@)(计算机应用教研室@计算机嵌学入院式嵌操入作式系系统统实验室@苏州研究院中国科D学ec技em术be大r学
9,Fa2l0l142014)41/41

标签: #文件 #映像 #回收站 #转换成 #字体大小 #格式 #文件 #彻底删除