欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    嵌入式实时操作系统复习纲要.doc

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

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

    嵌入式实时操作系统复习纲要.doc

    精品文档,仅供学习与交流,如有侵权请联系网站删除嵌入式实时操作系统复习纲要第一章l 嵌入式系统:嵌入到对象体系中,为实现对象体系智能化控制的计算机系统,叫做嵌入式计算机系统,简称嵌入式系统。l 嵌入式操作系统:嵌入到特定设备的专用的可裁剪的计算机系统l 嵌入式操作系统分为实时操作系统和分时操作系统。l 嵌入式系统的三个要素:嵌入性、专用性和计算机系统l 嵌入式系统的特点:专用性强、可裁剪性好、实时性与可靠性好、功耗低l 内核类型:可剥夺型和不可剥夺型l 几种常见的嵌入式操作系统:VxWorks、pSOS、Windows CE、QNX OS;手持设备的有:Plam、WinCE、EPOC;互联网方面的有:uCLinux、uC/OS-II.(记住其中五种)第二章l 任务:任务是一种程序实体,实质上时一个线程。l uC/OS-II的任务组成:任务程序代码(任务的执行部分)、任务推栈(保存任务工作环境)、任务控制块(保存任务属性)l uC/OS-II的任务有两种:用户任务和系统任务;其中系统任务有分为:空闲任务和统计任务,空闲任务是用户应用程序必须使用的,统计任务是应用程序可以根据实际需要来选择使用的。l 任务的5种状态:睡眠状态、就绪状态、运行状态、等待状态、中断服务状态。要重点看一下P17页的图2-2。在这些状态中睡眠状态只能直接进入就绪状态,就绪状态和中断服务状态可以直接进入运行状态,就绪状态可以直接进入睡眠状态和运行状态,中断服务状态只能直接进入运行状态,等待状态可以直接进入除了中断服务状态外的其他三种状态。运行状态可以进入其他四种状态。等待状态有:延时等待、请求等待和任务挂起等。l 临界段:为了有效地对中断进行控制,在任务的代码里可使用uC/OS-II定义的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来控制任务何时响应中断,何时屏蔽中断。在运行这两个宏之间的代码时是不会响应中断的,这种受保护的代码段叫做临界段。作用:使临界段中的代码不能被中断,以保护一些不能被中断的用户代码(要求不受干扰地连续运行),保证系统的正常工作。说明在临界段中不能调用uC/OS-II提供的系统函数,否则可能引起系统崩溃。l 关中断asm(“DI”)和OS_ENTER_CRITICAL();开中断asm(“EI”)和OS_EXIT_CRITICAL()。l uC/OS-II最多有64个任务,优先级为0的任务的优先级最高,优先级为63的任务的优先级最低。重点看明白课本P21页的例2-3.l P22-P23页,给出三个参数及堆栈增长方向,要知道如何创建任务。见后面的程序题l 看名称写含义P26,OSTCBDly表示任务等待的时限(节拍数)、OSTCBStat表示任务的当前状态标志、OSTCBPrio表示任务的优先级别、OS_STAT_RDY表示任务处于就绪状态、OS_STAT_SEM表示任务处于等待信号量状态、OS_STAT_MBOX表示任务处于等待消息邮箱状态、OS_STAT_Q表示任务处于等待消息队列状态、OS_STAT_SUSPEND表示任务处于挂起状态、OS_STAT_MUTEX表示任务处于等待互斥型信号量状态。l uC/OS-II管理任务的两条链表:空任务链表(单向)、任务块链表(双向)l uC/OS-II操作系统内核的主要工作就是对任务进行管理和调度。对任务就绪表的操作详细看P30的例2-5和P26-P27页。如何从任务就绪表中获取优先级别最高的就绪任务的代码如下:y=OSUnMapTa1OSRdyGrp;x= OSUnMapTa1OSRdyTb1y;prio=(y<<3)+x;或y=OSUnMapTa1OSRdyGrp;prio=(INT8U)(y<<3)+ OSUnMapTa1OSRdyTb1y;OSUnMapTa1共有256个元素,其定义如下:INT8U const OSUnMapTa1=/0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1504540 1 0 20 1 0 30 1 0 20 1 0645474546454/除了标注的之外,其余的每一列都相同l 多任务系统中,令CPU中止当前正在运行的任务转而去运行另一个任务的工作叫做任务切换,而按某种规则进行上述工作叫做任务的调度。l 任务调度执行任务调度不一定需要任务切换l 何如获得运行就绪任务块的指针。P33l OSTCBCur的作用:指向正在运行任务控制块的指针;OSTCBFreeList的作用:指向空任务控制块链表的表头。l P40页的程序题例2-6,给出三个参数及堆栈增长方向,要知道如何创建任务l P46任务的挂起和恢复,记住函数名称及用法。程序题,一般为一句话小程序题。主要类型为:将优先级为x的任务挂起或恢复、将正在运行的任务挂起或者恢复、将只知道控制块的任务挂起或恢复。l 任务优先级的修改及删除P53,要求知道名称及用法。第三章l 中断的响应过程(简答):uC/OS-II系统收到中断请求后,如果这时CPU处于中断允许状态(即中断是开放的),系统就会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续运行,或者转向运行另一个具有更高优先级别的就绪任务。l 时钟:任何操作系统都要提供一个周期性的信号源,以提供系统处理诸如延时、超时等与时间有关的事件,这个周期性的信号源叫做时钟l 时间节拍:系统时钟两次中断之间间隔的时间叫时钟节拍。作用:为系统提供时钟,并以其为最小时间单位来提供系统处理诸如延时、超时等与时间有关的事件。l 要求会用两种延时P88-P90。任务延时函数OSTimeDly()和OSTimeDlyHMSM(),了解取消任务延时函数OSTimeDlyResume(),此外还要理解好OSTimeTick函数(),它是时钟节拍服务函数,作用是在每个时钟节拍了解每个任务的延时状态。l 钩子函数OSTimeTickHock()的简单用法,可不见,不要求BOOLEAN InterKey=FALSE;extern BOOLEAN InterKey;INT16U InterCtr=0;void OSTimeTickHook(void) if(InterCtr=10000) InterKey=TURE; InterCtr+;l 获取和设置系统时间P93获得系统的时间函数OSTimeGet(),一般有OSTime= OSTimeGet(); 设置系统的时间函数OSTimeSet(),如设置系统的时间节拍数OSTime为10,代码为OSTimeSet(10);l 全局变量OSTime用来记录系统发生的时间节拍数。OSTime=OSTimeGet();第四章l 事件控制块:用来表述事件的数据结构l uC/OS-II中的事件有三类:分别是信号量、邮箱(消息邮箱)(互斥型信号量)、消息队列。作用:使临界段中的代码不能被中断,以保护一些不能被中断的用户代码(要求不受干扰地连续运行),保证系统的正常工作。l 程序的三个参数:信号量,消息邮箱,消息队列,若是要求四个参数,则再写多一个“互斥型信号量”l 信号量的创建、请求和发送OS_EVENT *Fun_Semp; /声明信号量Fun_Semp=OSSemCreate(1); /定义信号量,并使信号量计数器的初值为1OSSemPend(Fun_Semp,0,&err); /请求信号量OSSemPost(Fun_Semp); /发送信号量l P140 六个参数,给出名字写意思OSQSize 数组的长度 OSQEntries 已存放消息指针的元素数目OSQStart 指向消息指针数组的起始地址 OSQEnd 指向消息指针数组结束单元的下一个单元OSQIn 指向插入一条消息的位置OSQout 指向被取出消息的位置第五章l P156创建请求发送 (程序)第六章l P168 创建内存分区定义一个用来存储INT16U类型的数据,有10个内存块,每个内存块长度为10的内存分区的代码如下:INT16U IntMemBuf1010; 见后面的程序题l P170 创建空内存控制块链表 程序用OS_MemInit()定义并初始化一个空内存控制块链表 OS_MAX_MEM_PART表示空内存控制块的最大数目l P172 程序 重点内容见后面的程序题l P173 请求获得内存块见后面的程序题l P174 释放一个内存块见后面的程序题l P179查询一个内存分区的状态,了解例6-4OS_MEM *CommTxBuffer;OS_MEM_DATA MemInfo;OSMemQuery(CommTxBuffer, MemInfo);l P228 给英文写中文OS_MAX_QS 定义系统中具有消息队列的最大数目OS_MAX_MEM_TASKS 定义最大任务数OS_LOWEST_PRIO 定义任务的最低优先级OS_TASK_IDLE_STK_SIZE 设置空闲任务堆栈的大小OS_TASK_STAT_EN 设定系统是否使用统计任务OS_TASK_STAT_STK_SIZE 设定统计任务的堆栈大小OS_CPU_HOOKS_EN 设定是否允许使用各钩子函数OS_MBOX_EN 设定是否使用消息邮箱的使能信号OS_MEM_EN 控制是否使用内存块管理函数的使能信号 OS_Q_EN 控制是否使用消息队列函数的使能信号OS_SEM_EN 控制是否使用信号量管理函数的使能信号OS_TASK_CHANGE_PRIO_EN 设定是否修改任务优先级OS_TASK_CREATE_EN 创建任务的使能信号OS_TASK_CREATE_EXT_EN 允许扩展任务的使能信号 OS_TASK_DEL_EN 允许删除任务的使能信号OS_TASK_SUSPEND_EN 允许任务挂起的使能信号OS_TICKS_PER_SEC 表示调用OSTime()函数的次数 试卷参考答案一、 填空题1 uC/OS-II最多有64个任务,优先级为0的任务的优先级最高,优先级为63的任务的优先级最低。2 uC/OS-II的任务有两种:用户任务和系统任务3 uC/OS-II的任务的5种状态:睡眠状态、就绪状态、运行状态、等待状态、中断服务状态。4 OS_ENTER_CRITICAL()的作用是进入临界段(关中断),OS_EXIT_CRITICAL()的作用是退出临界段(开中断)5 常数OS_MAX_QS的含义是定义系统中具有消息队列的最大数目,OS_TICKS_PER_SEC的含义是表示调用OSTimeTick()函数的次数。6 uC/OS-II中的事件有三类,分别是信号量、消息邮箱、消息队列。7 消息队列的队列控制块中的OSQStart的作用是指向消息指针数组的起始地址,OSQSize的作用是指定数组的长度,OSQOut的作用是指向被取出消息的位置。8 任何就绪表数组OSUnMapTb19=0, OSUnMapTb110=19 除了uC/OS-II,举出三个你所知道的嵌入式系统的名称:VxWorks、pSOS和Windows CE等。10 uC/OS-II的系统任务有两个:用户任务和系统任务。用户应用程序必须使用其中的空闲任务。11 如果希望应用程序中最多任务个数为10,则OS_LOWEST_PRIO的值应为1112 uC/OS-II的任务有三个组成部分:任务程序代码、任务堆栈、任务控制块。13 在OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏之间的代码是不会响应中断的,这种受保护的代码段叫做临界段。14 OSTCBFreeList的作用:指向空任务控制块链表的表头。OSTCBCur的作用:指向正在运行任务控制块的指针15 多任务系统中,令CPU中止当前正在运行的任务转而去运行另一个任务的工作叫做任务切换,而按某种规则进行上述工作叫做任务的调度。16 全局变量OSTime用来记录系统发生的时间节拍数。17 消息队列的队列控制块中的OSQEnd的作用是指向消息指针数组结束单元的下一单元,OSQEntries的作用是已存放消息指针的元素数目,OSQIn的作用是指向插入一条消息的位置。18 任何就绪表数组OSUnMapTb17=0, OSUnMapTb114=1二、 简单题1 简述临界段的基本概念及其作用,为什么要用到临界段?答:在OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏之间的代码是不会响应中断的,这种受保护的代码段叫做临界段。作用:使临界段中的代码不能被中断,以保护一些不能被中断的用户代码(要求不受干扰地连续运行),保证系统的正常工作。2 什么叫时钟节拍,它有什么作用?答:时间节拍:系统时钟两次中断之间间隔的时间叫时钟节拍。作用:为系统提供时钟,并以其为最小时间单位来提供系统处理诸如延时、超时等与时间有关的事件。3 简述信号量或信号量集的工作过程?4.互斥型信号量是如何防止优先级反转现象出现的?答:使获得信号量任务的优先级别在使用共享资源期间暂时提升到所有任务最高优先级的高一个级别上,以使该任务不被其他任务所打断,从而能尽快地使用完共享资源并释放信号量;然后再释放信号量之后,再恢复该任务原来的优先级别。5. uC/OS-II中有哪些链表?并说明是单向的或双向的?答:空任务链表(单向)、任务块链表(双向)、空事件控制块链表(单向)、空队列控制块链表(单向)、空信号量集标志组表链表(单向)、信号量集等待任务链表(双向)、空内存控制块链表(单向)。6.说明延时函数OSTimeDly()与OSTimeDlyHMSM()的区别?两函数所带的参数不一样,前者只带一个参数,以时钟节拍数为单位,后者有4个参数,分别为时、分、秒和毫秒。OSTimeDlyHMSM()通过调用OSTimeDly()实现延时OSTimeDly()通过设置OS_TCB结构的延迟位OSTCBDly实现节拍延迟,所以调用OSTimeDlyResume()可以实现任务的恢复,因为该函数通过改变延迟位OSTCBDly实现任务恢复对于OSTimeDlyHMSM()函数,如果调用的时间换算成的节拍数小于65536,则可以调用OSTimeDlyResume()实现任务恢复;如果大于65536个时钟节拍,则调用OSTimeDlyResume也无法恢复任务,因为本函数并不是通过修改OSTCBDly位实现7.如何在任务就绪表中查找具有最高优先级的就绪任务?答:P31-P328.什么叫优先级反转?这种现象会在什么情况下发生?有什么危害?答:在可剥夺型内核中,当任务以独占方式使用资源时,会出现低优先级任务先于高优先级任务而被执行的现象,这种现象叫做任务优先级反转。出现原因:因为一个优先级别低的任务在获得了信号量使用共享资源期间,被具有较高优先级别的任务所打断而不能释放信号量,从而使正在等待这个信号量的更高级别的任务因得不到信号量而被迫处于等待状态,在这个期间,就让优先级别低于它而高于占据信号量的任务的任务先运行了。危害:如果介于使用信号量的两个任务优先级别中间的中等优先级别任务较多,会极大地恶化高优先级别任务的运行环境,使系统不能如期运行。三、 程序题1. 创建一个名为MyTask,优先级为3,堆栈大小为512个字节的任务。MyTask每执行一次,延时20s,延时期间,每隔20个时钟节拍在屏幕上显示一次MyTask的延时还剩下多少个时钟节拍。假设硬件平台为80X86系统,写出关键性代码即可。 INT32U stime=0,jiepai=0; #define TASK_STK_SIZE 512 OS_STK TaskStartStkTASK_STK_SIZE;void main() OSTaskCreate ( MyTask, (void*)0, & TaskStartStkTASK_STK_SIZE-1,/支持堆栈向下增长,若为向上/则为& TaskStartStk0 3MyTask(void *pdata) char s6; for( ; ; ) if(stime%10=0) jiepai+; sprintf(s,”%6d“,20*1000/5-10*(jiepai-1); /按一个时钟节拍5ms PC_DispStr(5,5,s,DISP_BGND_BLACK+DISP_FGND_WHITE); ostime=OSTimeGet(); OSTimeDlyHMSM(0,0,20,0);2使优先级为40的任务脱离就绪状态。 If(OSRdyTb140>>3&=-OSMapTb140&0x07)=0) OSRdyGrp&=-OSMapTb140>>3;3.(1)一个任务中将任务自己挂起 OSTaskSuspend(OS_PRIO_SELF); 或者OSTaskSuspend(0xFF); (2)将优先级为3的任务恢复 OSTaskResume(3);4.创建一个初始信号为0的信号量集并向信号量集的第2位和第3位发送信号1. OS_FLAG_GRP *Sem_F; Sem_F=OSFlagCreate(0,&err);/创建信号量集,并初始化信号为0 OSFlagPost( Sem_F, (OS_FLAGS)12,/给第第2位和第3位发送信号 OS_FLAG_SET,/信号值1 &err若要求请求信号量集则添加代码如下:(这部分一般不要求,简单了解即可) OSFlagPend( Sem_F, /请求信号量集 (OS_FLAGS)12; /请求第第2位和第3位信号 OS_FLAG_WAIT_SET_ALL, /信号都为1表示有效 0, &err若要求查询信号量集则添加代码如下:Flags=OSFlagQuery(Sem_F,&err); switch(Flags)5.使优先级为11的任务进入就绪状态 OSRdyGrp|= OSMapTb111>>3; OSRdyTb111>>3|= OSMapTb111&0x07;6.(1)使优先级为2的任务的优先级改为4 OSTaskChangePrio(2,4);(2)将优先级为3的任务删除OSTaskDel(3);如果是删除任务自身则为:OSTaskDel(OS_PRIO_SELF);7.(1)将当前任务延时1000个时钟节 OSTimeDly(1000);(2)将当前任务延时2秒钟 OSTimeDlyHMSM(0,0,2,0); (3)取消任务优先级为3的任务的延时。 OSTimeDlyResume(3);8.如果当前时钟节拍数大于1000,则将当前正在运行的任务挂起。 INT8U ostim=0;/设置一个变量用于保存系统的时钟节拍数。 ostim=OSTimeGet(); if(ostim>1000) OSTaskSuspend(OS_PRIO_SELF); 或者为if(OSTimeGet()>1000) OSTaskSuspend(OS_PRIO_SELF);9.创建一个含有12个内存块并且每个内存块的长度为32字节的内存分区 /此方法为动态创建内存分区 /定义全局变量 OS_MEM *CommTxBuffer;/定义内存分区指针 INT8U CommTxPart1232;/定义分区和内存块 INT8U err; INT8U *BlkPtr; /内存分区的指针/*若题目还要求请求一个内存块时增加此行代码,/否则不需要*/ void main() INT8U err; CommTxBuffer=OSMemCreate( CommTxPart,/内存分区的首地址 12, /分区内内存块的数目 32, /每个内存块的长度 &err/*若题目还要求“请求一个内存块和释放时”时增加下面红色部分代码,否则不需要*/ BlkPtr=OSMemGet( CommTxBuffer,/内存分区的指针 &err /错误信息 OSMemPut(CommTxBuffer,IntBlkPtr);OSStart();/启动任务,可不写【精品文档】第 8 页

    注意事项

    本文(嵌入式实时操作系统复习纲要.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开