嵌入式系统复习资料_第1页
嵌入式系统复习资料_第2页
嵌入式系统复习资料_第3页
嵌入式系统复习资料_第4页
嵌入式系统复习资料_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统复习提纲第一章什么是嵌入式系统?IEEE〔国际电气和电子工程师协会〕的定义是什么?一般定义是什么?根据IEEE〔国际电气和电子工程师协会〕的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置一般定义:“以应用为中心、以计算机技术为根底、软件硬件可裁剪、功能、可靠性、本钱、体积、功耗严格要求的专用计算机系统。〞广义上讲,但凡带有微处理器的专用软硬件系统都可称为嵌入式系统。从狭义上讲,我们更加强调那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的嵌入式系统。这里所谓的嵌入式系统是指狭义上的嵌入式系统。嵌入式系统有哪些重要的特征?〔1〕系统内核小由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。比方ENEA公司的OSE分布式系统,内核只有5K,而Windows的内核那么要大得多。〔2〕专用性强嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植。即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级〞是完全不同的概念。〔3〕系统精简嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统本钱,同时也利于实现系统平安。〔4〕高实时性OS这是嵌入式软件的根本要求,而且软件要求固态存储,以提高速度。软件代码要求高质量和高可靠性、实时性。实时系统的定义是什么?答:实时系统的正确性依赖于运行结果的逻辑正确性和运行结果产生的时间正确性,即实时系统必须在规定的时间范围内正确地响应外部物理过程的变化。4,在典型的嵌入式系统组成中,可以分为哪四层?每一层具体是通常包含哪些单元?中间层BSP有哪些根本功能?答:硬件层,中间层,软件层,功能层中间层BSP功能之一:硬件初始化片级初始化:主要完成CPU的初始化,把CPU从上电时的缺省状态逐步设置成为系统所要求的工作状态。板级初始化:完成CPU以外的其他硬件设备的初始化。除此之外,还要设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。系统级初始化:这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比方网络系统、文件系统等;最后,操作系统创立应用程序环境并将控制转交给应用程序的入口中间层BSP功能之二:尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。5.嵌入式处理器可以分为几大类?每一类代表的器件有哪些?第二章1,嵌入式硬件系统的根本结构包含那些局部?〔嵌入式微处理器、存储器、和输入输出〕嵌入式处理器的三大局部是什么?〔控制单元、算术逻辑单元和存放器〕2,什么是冯.诺依曼体系结构?什么是哈佛体系结构?各有哪些代表性的处理器?3复杂指令集计算机〔cisc〕和精简指令集计算机〔risc〕各有什么特点?类别CISCRISC指令系统指令数量很多较少,通常少于100执行时间有些指令执行时间很长,如整块的存储器内容拷贝;或将多个存放器的内容拷贝到存贮器没有较长执行时间的指令编码长度编码长度可变,1-15字节编码长度固定,通常为4个字节寻址方式寻址方式多样简单寻址操作可以对存储器和存放器进行算术和逻辑操作只能对存放器对行算术和逻辑操作,Load/Store体系结构编译难以用优化编译器生成高效的目标代码程序采用优化编译技术,生成高效的目标代码程序4.在计算机体系结构中,什么是冯氏结构体系、哈氏结构体系?冯·诺伊曼体系结构也叫普林斯顿结构,它的最大特征是什么?哈佛结构,它的最大特征是什么?5.什么是CISC、RISC体系?其各自优、缺点以及特点是什么?在指令数目上,CISC与RISC比拟,哪种结构的指令数目多些?属于CISC的代表性微处理器有哪些?属于RISC的代表性处理器有哪些?ARM7TDMI属于哪种体系?6.对于多字节类型的数据,在存储器上有两种存储方式,分别是小端字节顺序方式和大端字节顺序方式,比方字符串数据“UNIX〞的ASCII码数据{0x55,0x4E,0x49,0x58}在16位字长的微处理器上,以小端字节顺序方式存储下来,取出时该微处理器变成大端字节顺序方式,那么取出的字符串是什么,数据怎么表示?4,在无操作系统的嵌入式软件有哪几种实现方式?循环轮询系统,事件驱动系统〔前后台〕5.按软件结构分类,操作系统体系结构可以分为哪几种不同的结构?〔单体结构如嵌入式Linux,分层结构如MS-DOS和微内核结构如OS-9〕每一种结构的代表性实例是什么?微内核结构下的软件体系结构如何?说明它的特点。〔操作系统内核只包含最少的功能,如存储管理和进程管理;其他的操作系统组件以中间件的形式存在于内核之外;设备驱动程序完全从内核中剥离,独立成为一层;易于扩展、调试方便〕6.什么是轮询系统?什么是前后台系统〔事件驱动系统〕?循环轮询系统:〔PollingLoop〕最简单的软件结构,程序依次检查系统的每个输入条件,一旦条件成立就进行相应的处理事件驱动系统:〔Event-Drivensystem〕事件驱动系统是能对外部事件直接响应的系统。它包括前后台、实时多任务、多处理器等,是嵌入式实时系统的主要形式7.多任务系统中,什么是占先式内核?什么是非占先内核?7.什么是设备驱动程序?设备驱动程序的主要功能有那些?直接与硬件打交道、对硬件进行控制和管理的软件。嵌入式硬件设备本身无法工作,需要软件来驱动,如初始化、控制、数据读写等8.嵌入式软件的目标有哪些?要优化哪些资源的使用?答:函数必须正确;源代码简洁、可读性好、可维护;实时性要求较高的代码能够运行得足够快;目标代码小且高效。总之,要优化对以下三种资源的使用:执行时间;存储空间;开发/维护时间。9.函数的调用过程是怎样的?系统运行时,内存分布状况如何?不同的变量的存储和作用域怎样区别? 当一个函数被调用时:在内存的栈空间当中为其分配一个栈帧,用来存放该函数的形参和局部变量;把实参变量的值复制到相应的形参变量;控制转移到该函数的起始位置;该函数开始执行;控制流和返回值返回到函数调用点。10。什么是可重入函数?可以被一个以上的任务调用,而不必担忧数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丧失。可重入型函数只使用局部变量,即变量保存在CPU存放器或栈中12.什么是资源?〔程序运行时可使用的软、硬件环境统称为资源〕什么是共享资源?〔可以被一个以上任务使用的资源叫做共享资源〕什么是互斥?〔为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥〕13.什么是进程?进程应该包括哪些东西?一个进程应该包括:程序的代码;程序的数据;PC中的值,用来指示下一条将运行的指令;一组通用的存放器的当前值,堆、栈;一组系统资源〔如翻开的文件〕总之,进程包含了正在运行的一个程序的所有状态信息。14.什么是任务?〔在许多嵌入式操作系统当中,一般把能够独立运行的实体称为“任务〕任务切换是怎样的?〔当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU存放器中的全部内容。这些内容保存在任务自已的栈区之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入CPU的寄予存器,并开始下一个任务的运行。这个过程就称为任务切换〕任务有哪三种根本状态?就绪,执行,阻塞15.描述任务的数据结构是什么?〔描述任务的数据结构:任务控制块〕包含哪些内容?〔任务ID、任务的状态、任务的优先级;CPU上下文信息:通用存放器的值、PC存放器的值、程序状态字、栈指针的值;如果在该OS中,任务描述的是进程,那么还应包括其他的一些内容,如段表地址、页表地址等存储管理方面的信息;根目录、文件描述字等文件管理方面的信息。〕17.任务在那些时间可以调度?当一个新的任务被创立时,是执行新任务还是继续执行父任务?当一个任务运行完毕时;当一个任务由于I/O、信号量或其他的某个原因被阻塞时;当一个I/O中断发生时,说明某个I/O操作已经完成,而等待该I/O操作的任务转入就绪状态;在分时系统中,当一个时钟中断发生时。18.嵌入式系统任务调度算法的评价指标有哪些?响应时间〔responsetime〕:调度器为一个就绪任务进行上下文切换的时间,以及任务在就绪队列中等待的时间;周转时间〔turnaroundtime〕:一个任务从提交到完成所经历的时间;调度开销〔overhead〕:调度算法在执行时所需要的时间和空间开销;公平〔fairness〕:大致相当的两个进程所得到的CPU时间也应是大致相同的,防止饥饿(starvation);均衡:尽可能使整个系统的各局部〔CPU、I/O〕都忙起来,提高系统资源的使用效率;吞吐量〔Throughput〕:单位时间内完成的任务数。19.什么是优先级调度算法?〔优先级算法〔PriorityScheduling〕:给每个任务设置一个优先级,然后在所有就绪任务中选择优先级最高的那个任务去运行〕任务优先级有哪两种确定方式?〔静态和动态两种〕20.大多数RTOS调度器都采用基于优先级的可抢占调度算法,但在具体实现上要考虑哪些问题:〔如何设定各个任务的优先级?优先级是静态设置的还是动态可变的?算法的性能如何,能否满足实时要求?〕21.任务间通信可以有哪几种方式?共享内存〔sharedmemory〕;消息传递〔messagepassing〕;管道〔pipe〕;信号〔signal〕。22.什么是代码的临界区?什么叫临界资源?对共享内存或共享文件的访问,可能会导致竞争条件的出现。我们把完成这类事情的那段代码称为“临界区〞〔CriticalRegion〕,把需要互斥访问的共享资源称为“临界资源〞。23有哪几种种方法,使得任何两个任务都不会同时出现在临界区中,就可以防止竞争条件的出现?1当一个任务进入临界区后,关闭所有的中断;当它退出临界区时,再翻开中断。2可以采用各种基于繁忙等待(busywaiting)的策略,根本思路是:当一个任务想要进入它的临界区时,首先检查一下是否允许它进入,假设允许,就直接进入了;假设不允许,就在那里循环地等待,一直等到允许它进入。24.什么是信号量?什么是原子操作?什么是P原语?什么是V原语?1965年由著名的荷兰计算机科学家Dijkstra提出,其根本思路是用一种新的变量类型〔semaphore〕来记录当前可用资源的数量。有两种实现方式:1〕semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2〕semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的任务个数。信号量是由操作系统来维护的,任务只能通过初始化和两个标准原语〔P、V原语〕来访问。初始化可指定一个非负整数,即空闲资源总数。P、V原语作为操作系统内核代码的一局部,是一种不可分割的原子操作〔atomicaction〕,在其运行时,不会被时钟中断所打断P原语:P是荷兰语Proberen〔测试〕的首字母。申请一个空闲资源〔把信号量减1〕,假设成功,那么退出;假设失败,那么该任务被阻塞;V原语:V是荷兰语Verhogen〔增加〕的首字母。释放一个被占用的资源〔把信号量加1〕,如果发现有被阻塞的任务,那么选择一个唤醒之。25.如何用信号量实现互斥?如何用信号量实现同步?26.IO设备按数据组织分类包括哪两种类型?块设备:以数据块来作为信息的存储和传输单位,每个数据块都有一个地址,如磁盘;字符设备:以字符来作为信息的存储和传输单位,如打印机。27.CPU如何与设备控制器当中的存放器以及数据缓冲区有哪三种编址方式?采用哪三种方法实现IO的输入输出?I/O独立编址;内存映像编址;混合编址。程序循环检测方式(ProgrammedI/O);中断驱动方式(Interrupt-drivenI/O);直接内存访问方式(DMA,DirectMemoryAccess);第三章ARM处理器体系结构与指令集1.32位嵌入式微处理器的主要评价指标有哪些?功耗。一般的嵌入式微处理器都有三种运行模式:运行模式〔operational〕;待机模式〔standbyorpowerdown〕;停机模式〔andclock-off〕。功耗的评测指标是MIPS/W;代码存储密度。传统的CISC指令集计算机具有较好的代码存储密度。而RISC指令集计算机由于要求指令编码长度固定,虽然可以简化和加速指令译码过程,但为了实现与CISC指令集计算机相同的作业,往往需要更多的指令来完成,从而增加了代码长度集成度。 嵌入式微处理器一般都为专用市场设计的,需要较高的集成度。但把所有的外围设备都集成到一个芯片上也不是一种好的解决方案。这是因为高集成度使芯片变得复杂,芯片引脚变密,增加了系统设计和测试的复杂性。因此,集成外围设备时必须要考虑简化系统设计,并缩短整个系统的开发周期。多媒体加速。 为实现多媒体加速功能,嵌入式微处理器的设计者在传统的微处理器指令集的根底上增加JPEG和MPEG解压缩的离散余弦变换指令。还有一些半导体厂商针对智能和移动通讯市场的需求,将RISC微处理器和DSP集成在一个芯片上,如TI的OMAP。2.ARM7TDMI的关键部件有几个?分别是什么?3.ARM处理器可以执行两套指令系统,分别为ARM态和Thumb态,ARM指令和Thumb指令,指令长度上有什么区别?〔32bits长(ARM状态)16bits长(Thumb状态)〕系统启动时,处理器处于哪种状态?〔ARM态〕7.程序计数器PC总是指向当前指令的下两条指令的地址,ARM处理器中,PC一般用那个存放器?〔R15〕当ARM处理器处于ARM态时,PC为当前指令的地址加8字节,Thumb状态时,PC为当前指令的地址加几个字节?8.ARM处理器中,R13、R14、R15的功能各是什么,使用它们,细节上各自有什么特别要注意的地方?9.ARM处理器有哪几种运行模式?各是什么?特权模式和用户模式各包括哪些运行模式?处理器模式说明备注用户(usr)正常程序执行模式不能直接切换到其它模式系统(sys)运行操作系统的特权任务与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护模式系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式10.ARM允许多种寻址方式,例如MOVR0,R1,这里源操作数和目的操作数使用的都是存放器寻址,那么指令LDRR0,[R1,#4],这里源操作数使用的寻址方式是叫什么?那么指令LDRR0,[R1],这里源操作数使用的寻址方式是什么?,该指令助记符的含义是什么?与LDR相对应的指令助记符是什么?11.ARM7使用了几级流水线,分别是什么?ARM9使用了几级流水线?分别是什么?ARM7:3级-取指,译码,执行。ARM9:5级-取指,指令译码,执行,缓冲/数据,回写。12.ARM微处理器的存放器在逻辑上有多少个?分别是什么?13.ARM处理器支持哪几种异常?按响应异常的优先级分类,优先级最高的是什么?最低的是什么?进入、退出异常时,ARM处理器分别要执行什么操作?FIQ,IRQ(InterruptReQuest),未定义指令,预取中止,数据中止,复位,软件中断Softwareinterrupt。优先级最高:复位,最低:未定义指令。进入:拷贝CPSR到SPSR_<mode>,设置适当的CPSR位,保存返回地址到LR_<mode>,设置PC为相应的异常向量退出:1.〔R14〕中的值减去偏移量后存入PC,偏移将LR量根据异常的类型而有所不同;2.将SPSR的值复制回CPSR;3.清零在入口置位的中断禁止标志。14.在ARM处理器中,把CPSR或SPSR的内容读出到通用存放器中,有什么特别的要求?想修改CPSR存放器的值为0XFF,应该用什么指令?怎么做?15.阅读分析代码,实现两个存放器值的内容相加。;文件名:TEST1.S;功能:实现两个存放器相加;说明:使用ARMulate软件仿真调试 AREA Example1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOV R0,#0 ;设置参数 MOV R1,#10LOOP BL ADD_SUB ;调用子程序ADD_SUB B LOOP ;跳转到LOOPADD_SUB ADDS R0,R0,R1 ;R0=R0+R1 MOV PC,LR ;子程序返回 END ;文件结束16.分析一段指令执行前后的变化PREr0=0x00000000,r1=0x00009000,Mem32[0x00009000]=0x01010101Mem32[0x00009004]=0x02023202回写型前变址寻址:LDRr0,[r1,#0x4]!POSTr0=0x02023202,r1=0x00009004前变址寻址:LDRr0,[r1,#0x4]POSTr0=0x02023202,r1=0x00009000后变址寻址:LDRr0,[r1],#0x4POSTr0=0x01010101,r1=0x0000900417.完成一个存储器数据块拷贝目的目的源高地址低地址拷贝存储地址r9r11r10注:r9——存放源数据的起始地址r10——存放目标起始地址r11——存放源结束地址loopLDMIAr9!,{r0-r7};装载32字节并更新r9指针STMIAr10!,{r0-r7};存储32字节并更新r10指针CMPr9,r11;是否到达结束地址BNEloop;不相等跳转第四局部1.μC/OS主要特点有哪些?公开源代码可移植性〔Portable〕绝大局部C/OS-II的源码是用移植性很强的ANSIC写的。和微处理器硬件相关的那局部是用汇编语言写的。汇编语言写的局部已经压到最低限度,使得C/OS-II便于移植到其他微处理器上。C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器〔DSP〕上运行。可固化〔ROMable〕C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手段〔C编译、连接、下载和固化〕,C/OS-II可以嵌入到读者的产品中成为产品的一局部。可裁剪〔Scalable〕可以只使用C/OS-II中应用程序需要的那些系统效劳。也就是说某产品可以只使用很少几个C/OS-II调用,而另一个产品那么使用了几乎所有C/OS-II的功能,这样可以减少产品中的C/OS-II所需的存储器空间〔RAM和ROM〕。这种可剪裁性是靠条件编译实现的。占先式〔Preemptive〕多任务C/OS-II可以管理64个任务,然而,目前这一版本保存8个给系统。应用程序最多可以有256个任务可确定性全部C/OS-II的函数调用与效劳的执行时间具有可确定性。任务栈每个任务有自己单独的栈,C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。系统效劳C/OS-II提供很多系统效劳,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,那么高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性2.μC/OS允许管理有多少个任务,用户可以有多少个任务?系统保存的几个任务是什么?μC/OS-Ⅱ可以管理多达64个任务;系统保存了优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0这8个任务以被将来使用,用户可以有56个应用任务3.任务的组成包括那些局部?任务控制块----uC/OS-II进行任务管理用的一个数据结构。任务代码----描述任务算法的程序编码。任务堆栈----任务的工作现场环境。4.μC/OS中任务有五种状态,相互间转换需要特定的条件,试用状态转换图描述。5.任务堆栈在系统中有哪些应用?任务堆栈是任务的三大组成局部之一。保存CPU存放器现场〔R0~R12、LR、SPSR等〕。本Task的私有数据。6.TCB中各成员的作用是什么?7.什么是任务就绪表?任务优先级和任务就绪表的映射关系是怎样的?任务就绪表:每个任务的就绪态标志放入在就绪表中,就绪表中有两个变量OSRdyGrp和OSRdyTbl[]。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl[]中的相应元素的相应位也置位。映射关系:uC/OS-II最多管理64个任务,Prio值域:0~63,对应的二进制数000,000~111,111〔6bit〕,OSRdyGrp〔任务组就绪变量〕8bit,任务就绪数组元素OSRdyTbl也是8bit。prio.D[5:3]---对应OSRdyTbl的下标〔任务组号y〕,也对应OSRdyGrp的比特位号。prio.D[2:0]---对应OSRdyTbl元素的位号〔任务组号x〕8.举例说明优先级在任务就绪表中的表示。答:举例:prio=29的任务在任务就续表中的表示。prio=29,其8进制表示为:35O9.如何实现任务优先级到就绪表的操作?怎样从任务就绪表中获得当前优先的最高的优先级号?操作:如果prio是任务的优先级,即任务的标识号,那么将任务放入就绪表,即使任务进入就绪态的方法是:OSRdyGrp|=OSMapTbl[prio>>3];OSRdyTbl[prio>>3]|=OSMapTbl[prio&0x07];假设优先级为12——1100bOSRdyGrp|=OSMapTbl[12>>3](0x02);OSRdyTbl[1]|=0x10;获得优先级号:将优先级数分解为高三位和低三位分别确定;高优先级有着小的优先级号;10.μC/OS中有哪几个任务调度器?任务调度器有哪两项工作?任务调度器的两项主要工作:①从任务就绪表中查找优先级最高的就绪任务,②实现任务切换。uC/OS-II中有两个“任务调度器〞:任务级的调度器(OS_Sched()),中断级的调度器(OSIntCtxSw())11.任务切换宏OS_TASK_SW()依次完成的7项工作是什么?被中止Task的断点指针〔PC〕入栈保护被中止Task通用存放器入栈保护被中止Task系统管理SP→该TCB->OSTCBStkPtr获得待运行任务TCB获得待运行任务TCB->OSTCBStkPtr恢复待运行任务CPU现场〔不包含PC〕切换CPU.PC,使CPU接续运行待运行Task断点。12.某系统中有Task_A、Task_B两个任务都要使用公共资源〔例如UART〕,他们可以分别使用,但不能同时使用。如何用信号量的方法解决此问题?答:……OS_EVENT*UART_Flag;//声明事件指针变量INT8Uerr; //声明全局状态变量……voidmain(void){OSInit();UART_Flag=OSSemCreate(1);//创立信号量OSTaskCreate(Task_A,……);//创立任务AOSTaskCreate(Task_B,……);//创立任务BOSStart();}voidTask_A(void*pdata){……;for(;;) //任务体A{OSSemPend(UART_Flag,0,&err);//请求信号量UART_FlagFunction(UART); //使用信号量UART_FlagOSSemPost(UART_Flag); //发送信号量UART_FlagOSTimeDly(nnnn); //Task_A延时nnnn个时钟节拍}}voidTask_B(void*pdata){……;for(;;) //任务体B{OSSemPend(UART_Flag,0,&err);//请求信号量UART_FlagFunction(UART); //使用信号量UART_FlagOSSemPost(UART_Flag); //发送信号量UART_FlagOSTimeDly(mmm); //Task_B延时mmm个时钟节拍}}13.某系统中有Task_A、Task_B两个任务,假设想执行Task_B,必须首先经过Task_A。如何用信号量的方法,将Task_B作为Task_A的后续功能,解决此问题?答:……OS_EVENT*Task_Flag;//声明信号量……voidmain(void){OSInit();Task_Flag=OSSemCreate(0);//创立信号量OSTaskCreate(Task_A,……);//创立任务AOSTaskCreate(Task_B,……);//创立任务BOSStart();}voidTask_A(void*pdata){……;for(;;) //任务体A{OSSemPost(Task_Flag);//发送信号量Task_Flag…… ; //Task_A业务功能代码OSTimeDly(nnnn); //Task_A延时nnnn个时钟节拍}}voidTask_B(void*pdata){……;for(;;) //任务体B{OSSemPend(Task_Flag,0,&err);//请求信号量Task_Flag……; //Task_B业务功能代码/*OSTimeDly(mmm); //Task_B延时mmm个时钟节拍*/}}14.什么是任务的优先级反转现象?发生的原因是什么?如何解决?答:是指在剥夺式OS中,当任务以独占方式使用共享资源时,低优先级的任务可能先于高优先级任务得到系统调度而运行的现象。原因:低优先级的任务独占共享资源,迫使高优先级任务因等待资源而让出CPU。解决方法:暂时提升获得共享资源任务的优先级别,尽快释放共享资源,之后再恢复其原有的优先级别。15.某系统中有Task_A、Task_B两个任务都要使用公共资源〔例如UART〕,他们可以分别使用,但不能同时使用;Task_A、Task_B两任务的优先级之间还存在许多中间优先级的任务;例如:Prio(Task_A)=3,Prio(Task_B)=20,优先级在[3,20]之间还存在5个任务Task_1,Task_2,……,Task_5,有可能引起优先级反转。如何使用互斥信号量的方法解决此问题?答:……OS_EVENT*UART_Flag;//声明信号量INT8Uerr; //声明全局状态变量……voidmain(void){OSInit();UART_Flag=OSMutexCreate(2,&err);//创立互斥信号量OSTaskCreate(Task_A,……,3);//创立任务AOSTaskCreate(Task_B,……,20);//创立任务BOSTaskCreate(Task_1,……,6);……OSTaskCreate(Task_5,……,18);OSStart();}voidTask_A(void*pdata){……;for(;;) //任务体A{OSMutexPend(UART_Flag,0,&err);//请求信号量UART_FlagFunction(UART); //使用信号量UART_FlagOSMutexPost(UART_Flag);//发送信号量UART_FlagOSTimeDly(nnnn); //Task_A延时nnnn个时钟节拍}}voidTask_B(void*pdata){……;for(;;) //任务体B{OSMutexPend(UART_Flag,0,&err);//请求信号量UART_FlagFunction(UART); //使用信号量UART_FlagOSMutexPost(UART_Flag);//发送信号量UART_FlagOSTimeDly(mmm); //Task_B延时mmm个时钟节拍}}16.某应用系统含有“数据采集〞任务Task_A和“数据处理〞任务Task_B;Task_A周期性的定时采集数据,如何用消息邮箱的方式将数据传送到Task_B处理?答:INT16Uzql_data; //存放AD转换后的数据OS_EVENT*Dt_box; //消息邮箱指针voidmain(void){OSInit();Dt_box=OSMboxCreate(void*0);//创立(空)消息邮箱OSTaskCreate(Task_A,…); //创立Task_AOSTaskCreate(Task_B,…); //创立Task_BOSStart();}voidTask_A(void*pdata) //采集数据任务{for(;;){……; //启动A/D转换zql_data=GetAD(); //得到一次转换数据OSMboxPost(Dt_box,&zql_data); //将zql_data数据发送到消息邮箱OSTimeDlyHMSM(0,0,1,0) //定时1秒}}voidTask_B(void*pdata) //处理数据任务{INT16U*data_B;for(;;){……; //其他业务data_B=OSMboxPend(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论