欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    操作系统内核与应用实践09级.ppt

    • 资源ID:6472711       资源大小:258KB        全文页数:142页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统内核与应用实践09级.ppt

    第一章课程设置目标与要求,独立实践课开设的意义独立实践课的内容课程安排及成绩评估,本实践课程开设的意义,操作系统是计算机系统中承上启下的系统软件,它的工作流程和设计方法最有代表性和实用价值。要真正理解操作系统基本原理,切实可行的方法是针对各类操作系统实例系统进行各种类型的实践,利用操作系统内核进行应用程序设计。培养实用型、创新型人才,提升学生的软件研发能力。开拓学生的专业视野和实际工作能力。,体验系统级应用程序的设计实现,结合实际开发需求,掌握开发环境、开发技术、项目开发实施方面的基本过程以课题组方式进行方案论证、设计、开发环境构建、分工、单元开发、调试,集成调试运行,以及文档的编写,组长是项目小组核心。该过程能使大家明确软件开发的各个环节,结合自身条件对每个环节进行自己的设计实现。,操作系统内核与应用实践实施方案,嵌入式实时操作系统C/OS-是实时操作系统的成功范例。开放源代码资源架设一个方便的开发平台,提供一个很好实用的开发工具环境,使学生能够专注于实时应用软件技术,不必为系统开发环境等问题耗费精力。而且有大量的移植范例下载参考。C/OS-的商业价值也很高,可以支持嵌入式商业应用程序的开发需求。,操作系统实践课达到的目标,理解把握实现操作系统的层次结构和工作流程设计应用系统的工作流程学会使用需要的开发工具环境选择合适的软件工具进行编码实现进行单元调试和集成调试课题组为单位展开工作编写开发文档及其课程设计报告对软件开发全过程的技术运用进行考量,独立实践课培养检验学生能力,培养学生的研究能力、协调协作能力、软件系统的分析设计能力、编码能力,解决问题能力、表述能力等。,课程设计的实施,自由2人组成课题组选定一名组长,负责课题小组全面工作根据小组各成员的基础和意愿从应用题目中选择进行开发,独立实践课的核心内容,选择实时操作系统cos-II进行分析和应用程序的仿真开发。基于DOS和windows操作系统平台,选用嵌入式实时操作系统cos-II的源代码(非常优秀有价值的C源代码)进行分析,理解工作原理和工作流程,参考教材选择设计自己的应用程序的功能,并编码实现,完成系统调试运行。可建立2人的课题组进行分工,对每人负责的模块分别进行应用程序设计或内核分析程序运行监测。鼓励选择有个人创新内容的应用项目完成设计与实现。,方案技术内容,了解实时操作系统基本概念、工作原理,明确C/OS-内核应用的结构、组成方法,理解一个实时操作系统及其应用的基本架构。掌握C/OS-内核的运行流程及应用代码运行流程,能够基于C/OS-内核,利用系统函数接口,构建用户自己的应用程序代码,实现一个嵌入实时应用程序的设计、编码等开发工作。利用提供编译环境,编译、调试、运行应用程序。,设计实现技术,授课讲解内核与应用程序实现技术参考ucos-II系统代码以及编译生成技术(make文件)课题组选定所重点使用的内核模块,理解源码,确立应用方案并用C语言编码实现,基于cos-II内核的应用项目推荐,任务管理实验信号量管理实验消息队列实验时钟中断实验任务执行时间测定生产者消费者算法实验哲学家就餐实验鼓励自行选择感兴趣的应用程序,课程安排及成绩评估,一、授课8学时(7、8周,4学时/周)达到目标:明确独立实践课内容及要求。理解内核编程技术及应用系统功能及各个模块功能及接口,为应用系统分析设计打基础。,确立课题小组,提交任务书,上机实践之前,确定以下内容:按选择的项目自由组成一个课题组,讨论并确定开发功能、开发环境及软件工具、分工交流方式等。,课程设计任务书建议内容,开发项目名称(选择题目)主要系统功能以及目标(运行功能描述)设计要求(内核功能及接口、应用代码结构)成果形式(软件验收、报告文档)基本要求(阶段检查、进度安排、验收要求)主要参考文献(课件、源代码、实例程序、教材)工作量(系统复杂度、创新等),上机时间安排,上机共40学时安排地点:计算机学院机房(307、308)安排时间:第9周第13周,每周8学时,分两次上机。第八周确定具体时间。安排批次:计科0901-3(范艳芳)计科0904-6(牛欣源),上机实施内容与步骤,理解掌握内核接口及应用代码结构以课题组为单位提出应用系统需求和设计建议,完成系统分析设计每人独立进行模块详细设计及编码调试完成课程设计报告的编写由教师对每组进行阶段检查和项目验收,独立实践课成绩评估,课程设计任务书系统分析设计报告模块详细设计报告 单元测试系统调试报告、用户手册 20%阶段检查(内核、应用代码、测试)30%验收检查(运行与界面所有数据)10%开卷期末考试40%,阶段检查及内容,内核模块功能、应用接口应用代码的算法与数据结构单元调试、系统测试工作量创新设计与实现、新编程技术、新设计方法,系统验收检查及内容,系统运行平稳界面友好系统功能设计完备系统调试完备,文档成绩评估,课程设计任务书系统分析设计报告模块详细设计报告 单元测试系统调试报告、用户手册 20%评价标准:根据文档质量(可读性,可操作性,创新性,完整性,工作量)评估文档成绩。,课程设计报告的编写,参见课程设计报告撰写规范 报告每组打印一份上交,课程设计报告封面,课程名称 题目指导教师设计起止日期系别专业学生姓名班级/学号成绩,课程设计任务书内容,题目:主要系统功能以及目标:设计要求成果形式基本要求主要参考文献工作量,课程设计报告撰写规范,1、任务书2、摘要:功能及实现技术的简练陈述,不超过400字,关键词为4个左右3、目录4、正文。正文应按目录编排依次撰写,要求论述清楚,文字简练通顺,插图简明,书写整洁。5、参考文献(资料),正文 核心文档内容与格式,一、系统分析与设计功能(小组编写)1、从所使用内核功能和实现应用程序功能两个方面说明2、模块结构图(按照内核模块、应用模块划分)3、系统实现方案编程工具说明 4、系统运行界面及功能说明 三、系统模块设计与调试文档(设计实现者编写)1、模块功能 2、模块接口(被调用、调用关系;调用参数和返回结果)3、模块主要处理步骤及其编码实现方法(主要数据结构设计实现、主要算法设计实现)4、模块调试:调试数据、调试结果、问题分析 四、系统集成调试(小组编写)五、用户使用说明,课程邮箱:邮箱密码:welcome答疑时间:7、8周周一下午1:30-3:30,第二章 c/OS-II系统分析,通过分析C/OS-II内核源代码程序及其数据结构的设计,理解掌握一个成熟实时操作系统的基本架构与本学期操作系统课程的通用操作系统原理及其模块设计作比较,从中可发现其异同。可根据C/OS-II内核的运行流程,掌握操作系统的动态工作流程,使得在学习操作系统原理中掌握的基本概念和模块功能得到一个感性的认识,使各个模块的运行机制及其动态逻辑关系得到真实的展现。,嵌入式系统的应用程序,嵌入式系统的应用程序是与操作系统内核集成在一起运行,实现对系统监控对象的控制和处理,可基于和利用C/OS-II内核,构建用户自己的应用程序代码,实现对特定任务的管理。,具体实施步骤,参考C/OS-II系统的内核与实例应用程序的设计资料和源代码,以及实例程序中实现编译链接的make文件的设计,课题组选定所修改的模块,确立应用程序的功能设计方案,并用(Borland C)编码实现。在这个项目中,利用普通的PC机及其通用的操作系统环境,就可以自己动手搭建嵌入式系统应用程序的开发平台,具有实际开发操作系统软件的实用价值。,授课基本内容,嵌入式软件系统。主要介绍嵌入式软件分类、特点、体系结构、运行流程、操作系统及开发工具。嵌入式实时C/OS-II内核及模块接口。具有嵌入式操作系统的组成原理和构成特点,主要包括对多任务、任务的调度及任务间的通信机制,内存管理,时间管理等重要模块。嵌入式系统软件的开发。主要讨论嵌入式系统开发工具的选择、嵌入式软件开发模式的实施、实时软件分析设计方法的运用。,仿真开发环境Borland C/C+V4.5 及其源代码资源。介绍C/OS-II的内核及应用程序的编译连接运行环境,讲解应用实例,为编写实例程序提供指导。应用方案设计。为学生提供应用程序的设计方案,可从中选择,运用C/OS-II提供的环境开发生成自己的实时应用程序。,1、嵌入式软件系统,软件与嵌入式软件 嵌入式软件体系结构,软件与嵌入式软件,嵌入式软件分为系统软件、支撑软件和应用软件。系统软件:控制、管理计算机系统资源。如:嵌入式操作系统、嵌入式中间件(CORBA、Java)等支撑软件:辅助软件开发的工具。如:系统分析设计工具、仿真开发工具、交叉开发工具、测试工具、配置管理工具、维护工具等。应用软件:面向应用领域。如:手机软件、路由器软件、交换机软件、飞控软件等。,运行平台来分,嵌入式软件可以分为运行在开发平台上的软件:设计、开发、测试工具等。运行在嵌入式系统上的软件:嵌入式操作系统、应用程序、驱动程序及部分开发工具。,嵌入式软件体系结构,驱动层操作系统层中间件层应用层,驱动层,驱动层是直接与硬件的交互层,对操作系统和应用提供驱动支持。该层主要包括三种类型的程序:板级初始化程序:嵌入式系统上电后初始化系统的硬件环境,包括嵌入式微处理器、存储器、中断控制器、DMA、定时器等的初始化。与系统软件相关的驱动:操作系统和中间件等系统软件所需的驱动程序。与应用软件相关的驱动:应用软件相关的驱动不一定需要与操作系统连接,这些驱动的设计和开发由应用决定。,操作系统层,操作系统层包括嵌入式内核、嵌入式TCP/IP网络系统、嵌入式文件系统、嵌入式GUI系统和电源管理等部分。嵌入式内核:内核是嵌入式操作系统的必备基础。提供任务管理、内存管理、通信、同步与互斥机制、中断管理、时间管理及任务扩展等功能,嵌入式操作系统体系结构,中间件层,复杂的嵌入式系统中也开始采用中间件技术,主要包括嵌入式CORBA、嵌入式Java、嵌入式DCOM和面向应用领域的中间件软件。为解决分布异构问题,提出中间件(middleware)的概念。中间件是位于平台(硬件和操作系统)和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。,应用层,应用程序划分为若干应用任务每个应用任务完成特定的工作,如I/O任务、计算任务、通信任务等由操作系统按照抢占优先级调度策略调度各个任务的运行。,基于内核的嵌入式应用程序结构,嵌入式实时内核内核运行机制应用代码调用内核接口两级代码完成编译连接生成可执行程序在宿主机PC机上运行,嵌入式实时内核基础核心概念,多任务运行任务的优先级抢占式优先级调度任务间通信机制任务中的时间管理机制,嵌入式实时内核的多任务管理,多任务并发运行优先级最高的就绪任务运行运行权按优先级抢占每个任务的运行是死循环,任务的优先级,任务创建时确定优先级优先级由优先数表示优先数063,抢占式优先级调度,内核采用的调度算法:抢占式优先级调度每个任务有一个唯一优先数优先数小优先级高一旦优先级高任务就绪,立即进行任务调度,任务间通信机制,任务间通信机制并发执行的任务需要使用互斥资源并发执行的任务需要传递信息,完成合作。解决由于任务优先级引发的问题,时间管理机制,任务中的时间管理机制必须令任务自主睡眠若干时间必须控制任务的执行频率通过时间延迟控制任务自主睡眠,2、嵌入式实时C/OS-II内核模块接口,核心杂项模块任务管理模块消息队列模块信号量模块消息邮箱模块时间管理模块互斥信号量模块内存管理模块事件标志模块,C/OS-II内核源代码结构,SOFTWARE/C/OS-II/SOURCE下:#INCLUDE SOFTWAREUCOS-IISOURCEOS_CORE.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_FLAG.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_MBOX.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_MEM.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_MUTEX.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_Q.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_SEM.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_TASK.C#INCLUDE SOFTWAREUCOS-IISOURCEOS_TIME.C,内核模块及核心技术,核心杂项模块:实现临界区管理任务管理模块:实现任务管理时间管理模块:实现时间及中断管理消息队列模块:任务间传递多个消息信号量模块:任务实现信号量及其申请释放消息邮箱模块:任务间传递一个消息互斥信号量模块:解决优先级反转内存管理模块:内存块的分配回收,核心杂项模块:临界区的实现,并发运行任务需要实现临界区。临界区必须通过关中断开中断实现。关中断时长是实时系统的重要指标,越短越好。微处理器具有开关中断的指令,Ucos_II用宏命令实现宏调用OS_ENTER_CRITICAL()实现进入临界区宏调用OS_EXIT_CRITICAL()实现退出临界区,应用示例,OS_ENTER_CRITICAL();PC_VectSet(0 x08,OSTickISR);/*Install uC/OS-IIs clock tick ISR*/PC_SetTickRate(OS_TICKS_PER_SEC);/*Reprogram tick rate*/OS_EXIT_CRITICAL();,os_core.c中的系统函数,INT8U OS_TCBInit(INT8U prio,OS_STK*ptos,OS_STK*pbos,INT16U id,INT32U stk_size,void*pext,INT16U opt)void OS_TaskStat(void*pdata)void OS_TaskIdle(void*pdata)void OS_Sched(void)static void OS_InitTCBList(void)static void OS_InitTaskStat(void)static void OS_InitTaskIdle(void),static void OS_InitRdyList(void)static void OS_InitMisc(void)static void OS_InitEventList(void)void OS_EventWaitListInit(OS_EVENT*pevent)void OS_EventTO(OS_EVENT*pevent)void OS_EventTaskWait(OS_EVENT*pevent)INT8U OS_EventTaskRdy(OS_EVENT*pevent,void*msg,INT8U msk)void OS_Dummy(void),INT16U OSVersion(void)void OSTimeTick(void)void OSStatInit(void)void OSStart(void)void OSSchedUnlock(void)void OSSchedLock(void)void OSIntExit(void)void OSIntEnter(void)void OSInit(void),任务管理与调度,可将应用分解为多个并发任务。每个任务是一个独立的执行线程,应用代码中以函数为单位实现。可以与其它的并发任务竞争处理机时间。每个任务都是可调度的,根据预定的抢占式优先级调度算法竞争系统的执行时间。,任务管理,可以通过创建、删除、睡眠、唤醒、改变优先级、发送或等待事件等操作对任务进行管理。创建任务时,给任务提供一个名字、一个唯一的ID、一个优先级、一个任务控制块、一个堆栈和一个任务函数代码,这些内容构成任务对象。,任务管理task.c中的系统函数,OSTaskChangePrio():改变优先级OSTaskCreate():任务创建OSTaskCreateExt():任务创建OSTaskDel():任务删除OSTaskDelReq():任务删除请求OSTaskResume():任务恢复OSTaskStkChk():任务堆栈检查OSTaskSuspend():任务挂起OSTaskQuery():任务查询,任务的调度算法,嵌入式操作系统多采用基于静态优先级的可抢占式调度。任务优先级是在运行前在任务创建时静态分配完成,开始运行时,一旦有优先级更高的任务就绪,就马上进行调度。函数源代码如下:参见源文件core.c,void OSStart(void)INT8U y;INT8U x;if(OSRunning=FALSE)y=OSUnMapTblOSRdyGrp;/*Find highest prioritys task priority number*/x=OSUnMapTblOSRdyTbly;OSPrioHighRdy=(INT8U)(y 3)+x);OSPrioCur=OSPrioHighRdy;OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;/*Point to highest priority task ready to run*/OSTCBCur=OSTCBHighRdy;OSStartHighRdy();/*Execute target specific code to start task*/,任务的构建模型,任务(task)通常为进程(process)和线程(thread)的统称,它是调度的基本单位。大多数实时操作系统内核都采用单进程/多线程模型,或简单地称为任务模型。在任务模型中,管理用户程序时,是把整个应用看作是一个进程,任务的组成,任务实体主要由以下三个部分组成:代码:完成任务功能的一段可执行的程序。数据:任务的可执行程序所需要的相关数据,如变量,工作空间,缓冲区等。堆栈:存放任务的可执行程序代码段执行时的上下文环境。,任务属性(应用程序设计目标),任务的优先级(priority)任务的周期(period)任务的计算时间(computation time)任务的就绪时间(ready time)任务的截止时间(deadline)可以依据以上参数对各个任务进行调度、状态转换等管理。,任务的实现,Void yourtask(void*pdata)/*执行时传递参数*/for(;)/*函数永远不会返回*/*用户代码*/调用C/OS-II的某些功能函数,如:OSFlagPend();OSMboxPend();OSMutexPend();OSQPend();OSSemPend();OSTaskDel();OSTaskSusPend();OSTimeDly();OSTimeDlyHMSM();/*用户代码*/,C/OS-II可以建立64个任务必须赋予不同的优先级。建议不要使用优先级最高的4个:0、1、2、3,和优先级最低的3个:63、62、61,中断和时间管理,C/OS-II中断服务子程序需用汇编语言编写。如果用户使用的C编译器支持汇编语言,可以将中断服务子程序代码放在C语言的程序文件中。用户中断服务子程序的示意代码如下:,保存全部CPU寄存器;调用OSIntEnter()或OSIntNesting直接加1If(OSIntNesting=1)OSTCBCur-OSTCBStkPtr=SP;清中断源;重新开中断;执行用户代码做中断服务;调用OSIntExit();恢复所有CPU寄存器;执行中断返回指令;,时间管理模块,时钟节拍是特定的周期性中断。中断时间间隔取决于不同的应用。C/OS-II需要提供周期性信号源,用于实现时间延迟和超时确认(时间为节拍的整数倍)。,时间管理功能,嵌入式系统中,系统任务和用户任务经常要随着时间进行调度和执行。任务的执行时间、任务的挂起时间、时钟节拍等等与时间相关联的数据是控制实时系统的关键参数,时钟管理time.c中的系统函数,OSTimeDly()OSTimeDlyHMSM()OSTimeDlyResume()OSTimeGet()OSTimeSet()OSTimeTick(),任务间同步、互斥与通信及其实现,嵌入式系统中使用任务间原语实现任务的同步和通信,称为事件机制,一般包括:信号量消息邮箱消息队列互斥信号量事件标志组,事件,在嵌入式实时内核中,事件是指一种表明预先定义的系统事件已经发生的机制。一个事件就是一个标志,不具备其它信息。用于实现任务间的互斥和同步关系控制。事件机制用于任务与任务之间、任务与ISR之间的同步。用于支持后续具体同步机制。,事件控制块ECB,事件本身的定义用于信号量的计数器用于指向邮箱的指针指向消息队列的指针数组等待该事件的所有任务的列表,事件的功能函数,初始化一个事件控制块,OSEventWaitListInit()使一个任务进入就绪态,OSEventTaskRdy()使一个任务进入等待某事件发生状态,OSEventTaskWait()由于等待超时而将任务置为就绪态,OSEventTO(),信号量,在实时操作系统中,根据信号量的值,内核可以管理等待使用信号量的任务。一般来说,操作系统对信号量提供初始化、等待信号、发送信号等操作。就是创建信号量、获取(申请)信号量、释放信号量、删除信号量、获取有关信号量的各种信息等操作。,C/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,,信号量如何创建,调用OSSemCreate()函数,对信号量初始计数值赋值。该初始值为0到65,535之间的一个数。信号量用来表示一个或者多个事件的发生,初始值应设为0。信号量用于对互斥资源的访问,初始值应设为1。信号量用来表示允许任务访问n个相同的互斥资源,初始值应该是n。,C/OS-II提供了5个对信号量操作的函数。OSSemCreate()OSSemPend()/*等待一个信号量*/OSSemPost()/*发送一个信号量*/OSSemAccept()/*无等待请求一个信号量*/OSSemQuery()/*查询信号量当前状态*/OSSemPost()函数可由任务或中断服务子程序代码调用,OSSemPend()和OSSemQuery()函数只能由任务代码调用。,信号量管理os_sem.c中的系统函数,OSSemAccept()OSSemCreate()OSSemPend()OSSemPost()OSSemQuery(),消息邮箱,邮箱是C/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构。C/OS-II提供了5种对邮箱的操作函数:OSMboxCreate(),OSMboxPend(),OSMboxPost(),OSMboxAccept(),OSMboxQuery()函数,操作函数及其参数,OS_EVENT*OSMboxCreate(void*msg)void*OSMboxPend(OS_EVENT*pevent,INT16U timeout,INT8U*err)INT8U OSMboxPost(OS_EVENT*pevent,void*msg)void*OSMboxAccept(OS_EVENT*pevent)INT8U OSMboxQuery(OS_EVENT*pevent,OS_MBOX_DATA*pdata),消息邮箱os_mbox.c中的系统函数,OSMboxAccept()OSMboxCreate()OSMboxPend()OSMboxPost()OSMboxQuery(),消息队列,消息队列是C/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送多个指针变量。在使用一个消息队列之前,必须先建立该消息队列。这可以通过调用OSQCreate()函数,并定义消息队列中的单元数(消息数)来完成。,C/OS-II消息队列操作函数,OSQCreate()/*建立一个消息队列*/OSQPend()/*等待一个消息队列中的消息*/OSQPost()/*向消息队列发送一个消息(FIFO)*/OSQPostFront()/*向消息队列发送一个消息(后进先出LIFO)*/OSQAccept()/*无等待地从一个消息队列中取得消息*/OSQFlush()/*清空一个消息队列*/OSQQuery()/*查询一个消息队列的状态*/,消息队列os_q.c中的系统函数,OSQAccept()OSQCreate()OSQFlush()OSQPend()OSQPost()OSQPostFront()OSQQuery(),内存管理和I/O管理,嵌入式操作系统的内存管理比较简单,通常不采用虚拟存储管理,而采用静态内存分配和动态内存分配,固定大小内存分配和可变大小内存分配相结合的管理方式。,C/OS-II按分区来管理,每个分区中包含有整数个大小相同的内存块。C/OS-II设计分配和释放内存块函数可以分配和释放固定大小的内存块。分配和释放内存块函数的执行时间也是固定的,这样确保实时内核的系统性能。,内存控制块,为了便于内存的管理,在C/OS-II中使用内存控制块(memory control blocks)的数据结构来跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块。typedef struct void*OSMemAddr;void*OSMemFreeList;INT32U OSMemBlkSize;INT32U OSMemNBlks;INT32U OSMemNFree;OS_MEM;,内存的功能,使用一个内存分区之前,必须先建立该内存分区。调用OSMemCreate()函数完成。应用程序可以调用OSMemGet()函数从已创建的内存分区中申请一个内存块。当用户应用程序不再使用一个内存块时,必须及时释放,并放回对应内存分区。调用OSMemPut()函数完成。,在C/OS-II 中,可以使用OSMemQuery()函数来查询一个特定内存分区的有关消息:特定内存分区中内存块的大小、可用内存块数正在使用的内存块数等信息。所有这些信息都放在一个叫OS_MEM_DATA的数据结构中,内存块管理mem.c中的系统函数,OSMemCreate()OSMemGet()OSMemPut()OSMemQuery()void OS_MemInit(void),I/O管理,所有的嵌入式系统都包括一些负责实现输入输出操作的模块。这些I/O操作运行于不同类型的I/O设备上,系统通过这些操作来控制I/O设备的运行。通常,设计一个嵌入式系统的目的就是专门用来控制某些设备,并适应该设备的特殊需求。,Os_flag.c中的系统函数,OS_FLAGS OSFlagAccept(OS_FLAG_GRP*pgrp,OS_FLAGS flags,INT8U wait_type,INT8U*err)OS_FLAG_GRP*OSFlagCreate(OS_FLAGS flags,INT8U*err)OS_FLAG_GRP*OSFlagDel(OS_FLAG_GRP*pgrp,INT8U opt,INT8U*err)OS_FLAGS OSFlagPend(OS_FLAG_GRP*pgrp,OS_FLAGS flags,INT8U wait_type,INT16U timeout,INT8U*err)OS_FLAGS OSFlagPost(OS_FLAG_GRP*pgrp,OS_FLAGS flags,INT8U opt,INT8U*err),c/OS-II的模块组成介绍,#INCLUDE SOFTWAREUCOS-IISOURCEOS_CORE.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_FLAG.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_MBOX.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_MEM.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_MUTEX.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_Q.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_SEM.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_TASK.C“(*)#INCLUDE SOFTWAREUCOS-IISOURCEOS_TIME.C“(*),内核模块的源代码框架分析,目录Source下内容文件的种类和数量文件的功能文件包含的调用函数函数的功能及其调用函数的实现技术达到源代码级了解内核的功能的目的!,3、嵌入式系统软件的开发,交叉开发环境是指用于嵌入式软件开发的所有工具软件的集合,一般包括文本编辑器、交叉编译器、交叉调试器、仿真器、下载器等工具。交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接。图F2-1显示宿主机(开发平台)和目标机(运行平台)间的逻辑关系。,宿主机(Host)是用于开发嵌入式系统的计算机。一般为PC机(或者工作站),具备丰富的软硬件资源,为嵌入式软件的开发提供全过程支持。目标机(Target)即所开发的嵌入式系统,是嵌入式软件的运行环境,其硬件软件是为特定应用定制的。,嵌入式软件生成分为三个过程:,源代码程序的编写编译成各个目标模块链接成可供下载调试或固化的目标程序,4、仿真开发方式,采用仿真开发方式的理由在于,嵌入式应用的开发经常会遭遇缺少目标机环境、缺乏目标机芯片等资源的问题,一种软件仿真器,在宿主机上创建一个虚拟的目标机环境,再将应用系统下载到这个虚拟目标机上运行调试。,仿真开发环境Borland C/C+V4.5,C/OS-II的内核代码及其应用实例均用Borland C/C+编译器(V3.1)编译过。这些代码可在Intel Pentium II PC(300MHz)上运行和测试。,c/OS-II的安装文件和目录,目标硬盘的目录softwareto(DOS下的实用工具:改变目录)block(PC机中的功能函数)c/OS-II所有源代码文档实例14与处理器无关的源代码Ix86L:与处理器相关的源代码,面向86X86处理器,使用BC编译器Ix86L-FP:带浮点协处理单元的86X86处理器,block(PC机中的功能函数),PC.c:包括服务有:字符显示、运行时间测量、其他服务PC.h:该文件集成了PC的许多功能函数,为测试代码调用,使得用户容易将代码移植到其他编译器。在WinX操作系统中使用的是DOS仿真窗口(虚拟X86环境),应用程序实例1,EX1_X86LBC45SOURCE:INCLUDE.HCFG.HTEST.CTEST:MAKETEST.BAT(编译链接生成可执行代码的批文件)TEST.MAKTEST.EXETEST.MAP,SOURCE的作用,SOURCE:INCLUDE.HCFG.HTEST.C,TEST的作用,TEST:MAKETEST.BAT(编译链接生成可执行代码的批文件)TEST.MAKTEST.EXETEST.MAP,MAKETEST.BAT文件的功能,在当前的父目录(BC45)下创建三个子目录:lstobjWork将当前目录转到work下拷贝.testtest.mak 拷贝到当前目录下执行test.mak将当前目录转到.test下。,构建一个应用程序的环境设置,SOFTWAREuCOS-IIEX1_x86L/bc45/lst:编译需要的列表目录/bc45/obj:实例程序编译生成的目标文件/bc45/source:实例源代码、实例源代码头文件和本实例的配置头文件,链接命令文件定义生成可执行程序需要使用的目标文件和函数库。/bc45/test:编译本实例程序的make文件(TEST.MAK)和批处理文件,供用户生成DOS环境下的可执行文件实例程序的可执行代码(TEST.EXE),链接生成的MAP文件/bc45/work:修改源代码重新编译的工作目录,按照系统安装的目录,调整各个编译运行环境文件的参数,/bc45/source/Include.h文件中的路径/bc45/test中:Maketest.txt文件的路径Test.make文件的路径提示:!将编译器和内核源码文件夹拷贝到C盘下无需修改目录设置!,编译生成实例1的可执行代码,运行maketest批处理文件生成可执行文件打开DOS界面;输入Dos命令:C:CD D:SOFTWAREUCDOS-IIEX1-X86LBC45TESTc:maketest 直接双击maketest.bat文件运行实例可执行文件test.exe:test,编译生成实例1的可执行代码-2,如果编译出错,无法生成可执行程序编译环境有误,重新拷贝应用程序源代码有误,可在DOS下运行:C:CD D:SOFTWAREUCDOS-IIEX1-X86LBC45TESTc:maketest|more完成单步编译,查看编译错误!,实例1程序设计基本方法,功能:c/OS-II具有多任务处理能力,设计10个任务分别在屏幕上固定区域的随机位置显示09,每个任务只显示同一个数字。添加2个内部任务:空闲任务,计算CPU利用率的统计任务在函数main()中建立TaskStart()任务;它的功能是建立其它任务并且在屏幕上显示如下统计信息,并且检查是否按下ESC键,以决定是否返回到DOS。,实例1的主函数设计:main(),void main(void)PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);OSInit();PC_DOSSaveReturn();PC_VectSet(uCOS,OSCtxSw);RandomSem=OSSemCreate(1);OSTaskCreate(TaskStart,(void*)0,(void*),主函数流程说明,定义白色字符和黑色背景色。它会建立两个任务:空闲任务和统计任务。保存当前DOS环境调用PC_DOSSaveReturn()。得到中断向量进行任务切换,通过调用INT指令引发中断实现任务切换,通过向量地址调用指定的处理函数。建立一个信号量,保护使用DOS下C语言库函数random()。开始多任务运行前必须建立第一个任务TaskStart(),创建任务需要4个参数:任务运行代码指针、任务初始化数据指针(空指针)、任务堆栈栈顶指针、建立任务的优先级,为0。调用OSStart(),将控制权交给C/OS-II内核,开始运行多任务。此时有三个任务就绪,选择优先级最高的TaskStart()开始运行。,TaskStart处理流程,避免编译程序关于pdata未使用的警告信息。初始化屏幕显示:构成一个DOS应用程序的运行窗口,关中断,安装uC/OS-II时钟节拍ISR,替换计算机原有时钟节拍ISR。改变时钟节拍率,从DOS的 18.2Hz 变为 200Hz。重置节拍速率。开中断,测试所使用处理机的速度实际CPU使用率创建所有的应用程序任务,创建其他的任务,无限循环重复执行以下过程更新屏幕底部的信息显示任务个数、当前Cpu利用率、任务切换的次数、C/OS-II的版本号等,是否键盘被按下按下,是否是ESC键是,返回DOS操作系统清除任务切换计数器任务TaskStart()自己设计睡眠1秒。这时,C/OS-II开始调度下一个优先级最高的就绪进程,即优先级为1的task()任务。如果不这样设计,任何其他任务没有机会运行。,实例程序的函数设计:TaskStartCreateTasks(),static void TaskStartCreateTasks(void)INT8U i;for(i=0;i N_TASKS;i+)/*Create N_TASKS identical tasks*/TaskDatai=0+i;/*1*/OSTaskCreate(Task,/*2*/

    注意事项

    本文(操作系统内核与应用实践09级.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开