嵌入式系统复习资料.doc_第1页
嵌入式系统复习资料.doc_第2页
嵌入式系统复习资料.doc_第3页
嵌入式系统复习资料.doc_第4页
嵌入式系统复习资料.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

嵌入式系统复习提纲第一章1, 什么是嵌入式系统?IEEE(国际电气和电子工程师协会)的定义是什么?一般定义是什么?根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置一般定义:“以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。”l 广义上讲,凡是带有微处理器的专用软硬件系统都可称为嵌入式系统。l 从狭义上讲,我们更加强调那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的嵌入式系统。这里所谓的嵌入式系统是指狭义上的嵌入式系统。2, 嵌入式系统有哪些重要的特征?(1)系统内核小l 由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。l 比如ENEA公司的OSE分布式系统,内核只有5K,而Windows的内核则要大得多。()专用性强l 嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植。l 即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。l 同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全不同的概念。 ()系统精简l 嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。()高实时性OSl 这是嵌入式软件的基本要求,而且软件要求固态存储,以提高速度。软件代码要求高质量和高可靠性、实时性。 3, 实时系统的定义是什么?答:实时系统的正确性依赖于运行结果的逻辑正确性和运行结果产生的时间正确性,即实时系统必须在规定的时间范围内正确地响应外部物理过程的变化。4,在典型的嵌入式系统组成中,可以分为哪四层?每一层具体是通常包含哪些单元?中间层BSP有哪些基本功能?答:硬件层,中间层,软件层,功能层l 中间层BSP功能之一:硬件初始化l 片级初始化:主要完成CPU的初始化,把CPU从上电时的缺省状态逐步设置成为系统所要求的工作状态。l 板级初始化:完成CPU以外的其他硬件设备的初始化。除此之外,还要设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。l 系统级初始化:这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口l 中间层BSP功能之二:l 尽管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”的码数据0x55, 0x4E, 0x49, 0x58在16位字长的微处理器上,以小端字节顺序方式存储下来,取出时该微处理器变成大端字节顺序方式,那么取出的字符串是什么,数据怎么表示? 4,在无操作系统的嵌入式软件有哪几种实现方式?循环轮询系统,事件驱动系统(前后台)5. 按软件结构分类,操作系统体系结构可以分为哪几种不同的结构?(单体结构如嵌入式Linux,分层结构如MS-DOS和微内核结构如OS-9)每一种结构的代表性实例是什么?微内核结构下的软件体系结构如何?说明它的特点。(操作系统内核只包含最少的功能,如存储管理和进程管理;其他的操作系统组件以中间件的形式存在于内核之外;设备驱动程序完全从内核中剥离,独立成为一层;易于扩展、调试方便)6什么是轮询系统?什么是前后台系统(事件驱动系统)?循环轮询系统:(Polling Loop)最简单的软件结构,程序依次检查系统的每个输入条件,一旦条件成立就进行相应的处理事件驱动系统:(Event-Driven system)事件驱动系统是能对外部事件直接响应的系统。它包括前后台、实时多任务、多处理器等,是嵌入式实时系统的主要形式7多任务系统中,什么是占先式内核?什么是非占先内核?7什么是设备驱动程序?设备驱动程序的主要功能有那些?直接与硬件打交道、对硬件进行控制和管理的软件。嵌入式硬件设备本身无法工作,需要软件来驱动,如初始化、控制、数据读写等8嵌入式软件的目标有哪些?要优化哪些资源的使用?答:函数必须正确;源代码简洁、可读性好、可维护;实时性要求较高的代码能够运行得足够快;目标代码小且高效。总之,要优化对以下三种资源的使用:执行时间;存储空间;开发/维护时间。9函数的调用过程是怎样的?系统运行时,内存分布状况如何?不同的变量的存储和作用域怎样区别?当一个函数被调用时:1. 在内存的栈空间当中为其分配一个栈帧,用来存放该函数的形参和局部变量;2. 把实参变量的值复制到相应的形参变量;3. 控制转移到该函数的起始位置;4. 该函数开始执行;5. 控制流和返回值返回到函数调用点。10。什么是可重入函数?可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数只使用局部变量,即变量保存在CPU寄存器或栈中12什么是资源?(程序运行时可使用的软、硬件环境统称为资源)什么是共享资源?(可以被一个以上任务使用的资源叫做共享资源)什么是互斥?(为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥)13什么是进程?进程应该包括哪些东西?一个进程应该包括: 程序的代码; 程序的数据; PC中的值,用来指示下一条将运行的指令; 一组通用的寄存器的当前值,堆、栈; 一组系统资源(如打开的文件) 总之,进程包含了正在运行的一个程序的所有状态信息。14什么是任务?(在许多嵌入式操作系统当中,一般把能够独立运行的实体称为“任务)任务切换是怎样的?(当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU寄存器中的全部内容。这些内容保存在任务自已的栈区之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入CPU的寄予存器,并开始下一个任务的运行。这个过程就称为任务切换)任务有哪三种基本状态?就绪,执行,阻塞15描述任务的数据结构是什么?(描述任务的数据结构:任务控制块)包含哪些内容?(任务ID、任务的状态、任务的优先级;CPU上下文信息:通用寄存器的值、PC寄存器的值、程序状态字、栈指针的值;如果在该OS中,任务描述的是进程,则还应包括其他的一些内容,如段表地址、页表地址等存储管理方面的信息;根目录、文件描述字等文件管理方面的信息。)17.任务在那些时间可以调度?1. 当一个新的任务被创建时,是执行新任务还是继续执行父任务?2. 当一个任务运行完毕时;3. 当一个任务由于I/O、信号量或其他的某个原因被阻塞时;4. 当一个I/O中断发生时,表明某个I/O操作已经完成,而等待该I/O操作的任务转入就绪状态;5. 在分时系统中,当一个时钟中断发生时。18.嵌入式系统任务调度算法的评价指标有哪些? 响应时间(response time):调度器为一个就绪任务进行上下文切换的时间,以及任务在就绪队列中等待的时间; 周转时间(turnaround time):一个任务从提交到完成所经历的时间; 调度开销(overhead):调度算法在执行时所需要的时间和空间开销; 公平(fairness):大致相当的两个进程所得到的CPU时间也应是大致相同的,防止饥饿(starvation); 均衡:尽可能使整个系统的各部分(CPU、I/O)都忙起来,提高系统资源的使用效率; 吞吐量(Throughput):单位时间内完成的任务数。19什么是优先级调度算法?(优先级算法(Priority Scheduling):给每个任务设置一个优先级,然后在所有就绪任务中选择优先级最高的那个任务去运行)任务优先级有哪两种确定方式?(静态和动态两种)20大多数RTOS调度器都采用基于优先级的可抢占调度算法,但在具体实现上要考虑哪些问题:(如何设定各个任务的优先级?优先级是静态设置的还是动态可变的?算法的性能如何,能否满足实时要求?)21任务间通信可以有哪几种方式?共享内存(shared memory);消息传递(message passing);管道(pipe);信号(signal)。22什么是代码的临界区?什么叫临界资源?对共享内存或共享文件的访问,可能会导致竞争条件的出现。我们把完成这类事情的那段代码称为“临界区”(Critical Region),把需要互斥访问的共享资源称为“临界资源”。23有哪几种种方法,使得任何两个任务都不会同时出现在临界区中,就可以避免竞争条件的出现?1当一个任务进入临界区后,关闭所有的中断;当它退出临界区时,再打开中断。2可以采用各种基于繁忙等待(busy waiting)的策略,基本思路是:当一个任务想要进入它的临界区时,首先检查一下是否允许它进入,若允许,就直接进入了;若不允许,就在那里循环地等待,一直等到允许它进入。24什么是信号量?什么是原子操作?什么是P原语?什么是V原语? 1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。 有两种实现方式:1)semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2)semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的任务个数。 信号量是由操作系统来维护的,任务只能通过初始化和两个标准原语(P、V原语)来访问。初始化可指定一个非负整数,即空闲资源总数。P、V原语作为操作系统内核代码的一部分,是一种不可分割的原子操作(atomic action),在其运行时,不会被时钟中断所打断P原语:P是荷兰语Proberen(测试)的首字母。申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该任务被阻塞;V原语:V是荷兰语Verhogen(增加)的首字母。释放一个被占用的资源(把信号量加1),如果发现有被阻塞的任务,则选择一个唤醒之。25如何用信号量实现互斥?如何用信号量实现同步?26IO设备按数据组织分类包括哪两种类型?块设备:以数据块来作为信息的存储和传输单位,每个数据块都有一个地址,如磁盘;字符设备:以字符来作为信息的存储和传输单位,如打印机。27CPU如何与设备控制器当中的寄存器以及数据缓冲区有哪三种编址方式?采用哪三种方法实现IO的输入输出?I/O独立编址;内存映像编址;混合编址。程序循环检测方式(Programmed I/O);中断驱动方式(Interrupt-driven I/O);直接内存访问方式(DMA, Direct Memory Access);第三章ARM处理器体系结构与指令集1.32位嵌入式微处理器的主要评价指标有哪些?l 功耗。一般的嵌入式微处理器都有三种运行模式:运行模式(operational);待机模式(standby or power down);停机模式(and clock-off)。功耗的评测指标是MIPS/W;l 代码存储密度。传统的CISC指令集计算机具有较好的代码存储密度。而RISC指令集计算机由于要求指令编码长度固定,虽然可以简化和加速指令译码过程,但为了实现与CISC指令集计算机相同的作业,往往需要更多的指令来完成,从而增加了代码长度l 集成度。嵌入式微处理器一般都为专用市场设计的,需要较高的集成度。但把所有的外围设备都集成到一个芯片上也不是一种好的解决方案。这是因为高集成度使芯片变得复杂,芯片引脚变密,增加了系统设计和测试的复杂性。因此,集成外围设备时必须要考虑简化系统设计,并缩短整个系统的开发周期。l 多媒体加速。为实现多媒体加速功能,嵌入式微处理器的设计者在传统的微处理器指令集的基础上增加JPEG和MPEG解压缩的离散余弦变换指令。还有一些半导体厂商针对智能手机和移动通讯市场的需求,将RISC微处理器和DSP集成在一个芯片上,如TI 的OMAP。2. ARM7TDMI的关键部件有几个?分别是什么?3. ARM处理器可以执行两套指令系统,分别为ARM态和态,ARM指令 和Thumb指令,指令长度上有什么区别?(32 bits 长 (ARM状态)16 bits 长 (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允许多种寻址方式,例如MOV R0,R1,这里源操作数和目的操作数使用的都是寄存器寻址,那么指令LDR R0,R1,#4, 这里源操作数使用的寻址方式是叫什么?那么指令LDR R0,R1, 这里源操作数使用的寻址方式是什么? ,该指令助记符的含义是什么?与LDR相对应的指令助记符是什么?11. ARM7使用了几级流水线,分别是什么?ARM9使用了几级流水线?分别是什么?ARM7:3级-取指,译码,执行。ARM9:5级-取指,指令译码,执行,缓冲/数据,回写。12. ARM微处理器的寄存器在逻辑上有多少个?分别是什么?13. ARM处理器支持哪几种异常?按响应异常的优先级分类,优先级最高的是什么?最低的是什么?进入、退出异常时,ARM处理器分别要执行什么操作?FIQ ,IRQ(Interrupt ReQuest),未定义指令,预取中止,数据中止,复位,软件中断Software interrupt。优先级最高:复位,最低:未定义指令。进入:拷贝 CPSR 到 SPSR_,设置适当的 CPSR 位,保存返回地址到 LR_,设置 PC 为相应的异常向量退出:1. ( R14 )中的值减去偏移量后存入PC,偏移将LR量根据异常的类型而有所不同;2.将SPSR的值复制回CPSR;3.清零在入口置位的中断禁止标志。14. 在ARM处理器中,把CPSR或SPSR的内容读出到通用寄存器中,有什么特别的要求?想修改CPSR寄存器的值为0XFF,应该用什么指令?怎么做? 15.阅读分析代码,实现两个寄存器值的内容相加。;文件名:TEST1.S ;功能:实现两个寄存器相加 ;说明:使用ARMulate软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOVR0,#0 ;设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序ADD_SUB BLOOP ;跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件结束 16分析一段指令执行前后的变化PRE r0=0x00000000, r1=0x00009000, Mem320x00009000=0x01010101 Mem320x00009004=0x02020202回写型前变址寻址: LDR r0, r1, #0x4!POST r0=0x02020202, r1=0x00009004前变址寻址: LDR r0, r1,#0x4 POST r0=0x02020202, r1=0x00009000后变址寻址: LDR r0, r1 ,#0x4POST r0=0x01010101, r1=0x0000900417完成一个存储器数据块拷贝目的源高地址低地址拷贝存储地址r9r11r10注:r9存放源数据的起始地址 r10存放目标起始地址 r11存放源结束地址 loop LDMIA r9!, r0-r7 ;装载32字节并更新r9指针 STMIA r10!, r0-r7 ;存储32字节并更新r10指针 CMP r9, r11 ;是否到达结束地址 BNE loop ;不相等跳转第四部分1C/OS主要特点有哪些?u 公开源代码u 可移植性(Portable) 绝大部分m C/OS-II的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得m C/OS-II便于移植到其他微处理器上。 m C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器 、数字信号处理器(DSP)上运行。u 可固化(ROMable) m C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(C编译、连接、下载和固化), m C/OS-II可以嵌入到读者的产品中成为产品的一部分。u 可裁剪(Scalable) 可以只使用m C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个m C/OS-II调用,而另一个产品则使用了几乎所有m C/OS-II的功能,这样可以减少产品中的m C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。u 占先式(Preemptive)u 多任务 mC/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有256个任务u 可确定性 全部m C/OS-II的函数调用与服务的执行时间具有可确定性。u 任务栈 每个任务有自己单独的栈, m C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。u 系统服务 mC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。u 中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。u 稳定性与可靠性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 寄存器现场(R0R12、LR、SPSR 等)。本 Task 的私有数据。6.TCB中各成员的作用是什么?7什么是任务就绪表?任务优先级和任务就绪表的映射关系是怎样的?任务就绪表:每个任务的就绪态标志放入在就绪表中,就绪表中有两个变量OSRdyGrp和OSRdyTbl。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl中的相应元素的相应位也置位。映射关系:n uC/OS-II 最多管理64个任务,Prio值域:0 63,对应的二进制数 000,000 111,111(6bit), OSRdyGrp(任务组就绪变量)8 bit,任务就绪数组元素 OSRdyTbl 也是8bit。n prio.D5:3 - 对应 OSRdyTbl 的下标(任务组号 y), 也对应 OSRdyGrp 的比特位号。n prio.D2:0 -对应 OSRdyTbl 元素的位号(任务组号 x)8.举例说明优先级在任务就绪表中的表示。答:举例:prio = 29 的任务在任务就续表中的表示。prio = 29 , 其 8 进制表示为:35 O9如何实现任务优先级到就绪表的操作?怎样从任务就绪表中获得当前优先的最高的优先级号?操作:如果prio是任务的优先级,即任务的标识号,则将任务放入就绪表,即使任务进入就绪态的方法是:OSRdyGrp |= OSMapTblprio3;OSRdyTblprio3 |= OSMapTblprio&0x07;假设优先级为121100bOSRdyGrp |= OSMapTbl123(0x02);OSRdyTbl1 |=0x10;获得优先级号:将优先级数分解为高三位和低三位分别确定;高优先级有着小的优先级号;10C/OS中有哪几个任务调度器?任务调度器有哪两项工作?n 任务调度器的两项主要工作:从任务就绪表中查找优先级最高的就绪任务,实现任务切换。n uC/OS-II 中有两个 “任务调度器” :任务级的调度器( OS_Sched( ) ),中断级的调度器( OSIntCtxSw( ) )11任务切换宏 OS_TASK_SW( ) 依次完成的7项工作是什么?1. 被中止Task的断点指针(PC)入栈保护2. 被中止Task通用寄存器入栈保护3. 被中止Task系统管理 SP 该TCB-OSTCBStkPtr4. 获得待运行任务TCB5. 获得待运行任务 TCB-OSTCBStkPtr6. 恢复待运行任务CPU现场(不包含PC)7. 切换CPU.PC ,使CPU接续运行待运行Task断点。12某系统中有 Task_A、Task_B 两个任务都要使用公共资源(例如UART),他们可以分别使用,但不能同时使用。如何用信号量的方法解决此问题?答:OS_EVENT * UART_Flag; /声明事件指针变量INT8U err; /声明全局状态变量void main (void) OSInit(); UART_Flag = OSSemCreate(1); /创建信号量 OSTaskCreate(Task_A,); /创建任务A OSTaskCreate(Task_B,); /创建任务B OSStart();void Task_A(void *pdata) ; for (;)/任务体A OSSemPend(UART_Flag,0,&err); /请求信号量UART_Flag Function(UART); /使用信号量UART_Flag OSSemPost(UART_Flag); /发送信号量UART_Flag OSTimeDly(nnnn); / Task_A 延时 nnnn 个时钟节拍 void Task_B(void *pdata) ; for (;)/任务体B OSSemPend(UART_Flag,0,&err); /请求信号量UART_Flag Function(UART); /使用信号量UART_Flag OSSemPost(UART_Flag); /发送信号量UART_Flag OSTimeDly(mmm); / Task_B 延时 mmm 个时钟节拍 13某系统中有 Task_A、Task_B 两个任务,若想执行Task_B,必须首先经过Task_A。如何用信号量的方法,将Task_B作为Task_A的后续功能,解决此问题?答:OS_EVENT * Task_Flag; /声明信号量void main (void) OSInit(); Task_Flag = OSSemCreate(0); /创建信号量 OSTaskCreate(Task_A,); /创建任务A OSTaskCreate(Task_B,); /创建任务B OSStart();void Task_A(void *pdata) ; for (;)/任务体A OSSemPost(Task_Flag); / 发送信号量Task_Flag ; / Task_A 业务功能代码 OSTimeDly(nnnn); / Task_A 延时 nnnn 个时钟节拍 void Task_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; /声明信号量INT8U err; /声明全局状态变量void main (void) OSInit(); UART_Flag = OSMutexCreate(2,&err); /创建互斥信号量 OSTaskCreate(Task_A,3); /创建任务A OSTaskCreate(Task_B,20); /创建任务B OSTaskCreate(Task_1,6); OSTaskCreate(Task_5,18); OSStart();void Task_A(void *pdata) ; for (;)/任务体A OSMutexPend(UART_Flag,0,&err); /请求信号量UART_Flag Function(UART); /使用信号量UART_Flag OSMutexPost(UART_Flag); /发送信号量UART_Flag OSTimeDly(nnnn); / Task_A 延时 nnnn 个时钟节拍 void Task_B(void *pdata) ; for (;)/任务体B OSMutexPend(UART_Flag,0,&err); /请求信号量UART_Flag Function(UART); /使用信号量UART_Flag OSMutexPost(UART_Flag); /发送信号量UART_Flag OSTimeDly(mmm); / Task_B 延时 mmm 个时钟节拍 16某应用系统含有 “数据采集” 任务 Task_A 和 “数据处理” 任务 Task_B ;Task_A 周期性的定时采集数据,如何用消息邮箱的方式将数据传送到Task_B处理?答:INT16U zql_data;/存放AD转换后的数据OS_EVENT * Dt_box;/消息邮箱指针void main(void) OSInit(); Dt_box = OSMboxCreate(void * 0); /创建(空)消息邮箱 OSTaskCreate(Task_A,);/创建 Task_A OSTaskCreate(Task_B,);/创建 Task_B OSStart();void Task_A(void * pdata)/ 采集数据任务 for (;) ; / 启动A/D转换 zql_data = GetAD(); / 得到一次转换数据 OSMboxPost(Dt_box,&zql_data); / 将zql_data数据发送到消息邮箱 OSTimeDlyHMSM(0,0,1,0)/ 定时 1 秒 void Task_B(void * pdata)/ 处理数据任务 INT16U * data_B; for (;) ; / 其他业务 data_B =

温馨提示

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

评论

0/150

提交评论