您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式homework-answer
第一章(课件chapter_1)名词解释1、嵌入式从技术的角度定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。2、实时操作系统实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个任务均有一个优先级,RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。3、操作系统操作系统是计算机中最基本的程序。操作系统负责计算机系统中全部软硬资源的分配与回收、控制与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统功能提供软件平台。问答题1、试分析占先式内核与非占先式内核的区别非占先式内核要求每个任务自我放弃CPU的所有权。各个任务彼此合作共享一个CPU。异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。当系统响应时间很重要时,要使用占先式内核。因此绝大多数商业上销售的实时内核都是占先式内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪状态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。2、使用嵌入式操作系统有什么必要性嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。使用实时操作系统主要有以下几个因素:1、嵌入式实时操作系统提高了系统的可靠性。2、提高了开发效率,缩短了开发周期。3、嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。3、举出3种常见的嵌入式操作系统嵌入式LinuxWinCEVxWorksOSENucleuseCosμC/OS-II第二章(课件chapter_2)原理解释、问答题1、CM3的操作模式是如何转换的?作图说明如上图所示,复位后,CM3处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有MPU,还要在MPU规定的禁地之外),并且可以执行所有指令。在特权级下的程序可以通过置位特殊功能寄存器CONTROL[0]切换到用户级。一旦进入用户级,用户级的程序不能简单地试图清零CONTROL[0]就回到特权级,必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程清零CONTROL[0],才能在用户级的线程模式下重新进入特权级。2、CM3的寄存器包括哪些,详细说明它们的用途。R0‐R7也被称为低组寄存器。所有指令都能访问它们。它们的字长全是32位,复位后的初始值是不可预料的。R8‐R12也被称为高组寄存器。只有很少的16位Thumb指令能访问它们,32位的指令则不受限制。它们也是32位字长,且复位后的初始值是不可预料的。R13是堆栈指针。在CM3处理器内核中共有两个堆栈指针,于是也就支持两个堆栈。当引用R13(或写作SP)时,引用到的是当前正在使用的那一个,另一个必须用特殊的指令来访问(MRS,MSR指令)。这两个堆栈指针分别是:R14是连接寄存器(LR)。在一个汇编程序中,你可以把它写作bothLR和R14。LR用于在调用子程序时存储返回地址。R15是程序计数器,在汇编代码中可以使用名字“PC”来访问它。CM3内部使用了指令流水线,读PC时返回的值是当前指令的地址+4。3、CM3的特殊功能寄存器有哪些。程序状态寄存器组(PSRs或xPSR)中断屏蔽寄存器组(PRIMASK,FAULTMASK,以及BASEPRI)控制寄存器(CONTROL)4、CM3的双堆栈机制是怎么样的?CM3有两个堆栈指针:主堆栈指针(MSP),或写作SP_main。这是缺省的堆栈指针,它由OS内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。进程堆栈指针(PSP),或写作SP_process。用于常规的应用程序代码(不处于异常服用例程中时)。当CONTROL[1]=0时,只使用MSP,此时用户程序和异常handler共享同一个堆栈。这也是复位后的缺省使用方式;当CONTROL[1]=1时,线程模式将不再使用MSP,而改用PSP(handler模式永远使用MSP)。此时,进入异常时的自动压栈使用的是进程堆栈,进入异常handler后才自动改为MSP,退出异常时切换回PSP,并且从进程堆栈上弹出数据。5、CM3的位带和位带别名区的具体地址是什么?写出其地址的对应关系。位带区:0x2000_0000‐0x200F_FFFF(SRAM区中的最低1MB)其对应的位带别名区:0x2200_0000‐0x23FF_FFFF对于SRAM位带区的某个比特,记它所在字节地址为A,位序号为n(0=n=7),则该比特在别名区的地址为:AliasAddr=0x22000000+((A‐0x20000000)*8+n)*4=0x22000000+(A‐0x20000000)*32+n*4位带区:0x4000_0000‐0x400F_FFFF(片上外设区中的最低1MB)其对应的位带别名区:0x4200_0000‐0x43FF_FFFF对于片上外设位带区的某个比特,记它所在字节的地址为A,位序号为n(0=n=7),则该比特在别名区的地址为:AliasAddr=0x42000000+((A‐0x40000000)*8+n)*4=0x42000000+(A‐0x40000000)*32+n*46、位带操作的优越性是什么?位带操作的优越性主要是:1、使代码更简洁2、用于实现共享资源在任务间的“互锁”访问。多任务的共享资源必须满足一次只有一个任务访问它——亦即所谓的“原子操作”。7、特殊功能寄存器中的标志位有哪些?N:负数标志(Negative)Z:零结果标志(Zero)C:进位/借位标志(Carry)V:溢出标志(oVerflow)Q:饱和标志(Saturation),它不做条件转移的依据8、解释咬尾中断、晚到异常咬尾中断当处理器在响应某异常时,如果又发生其它异常,但它们优先级不够高,则被阻塞。在当前的异常执行返回后,系统处理悬起的异常时,倘若还是先POP然后又把POP出来的内容PUSH回去,这白白浪费了CPU时间!正因此,CM3不会机械地POP这些寄存器,而是继续使用上一个异常已经PUSH好的成果。这么一来,看上去好像后一个异常把前一个的尾巴咬掉了,前前后后只执行了一次入栈/出栈操作。于是,这两个异常之间的“时间沟”变窄了很多。晚到异常CM3的中断处理还有另一个机制,它强调了优先级的作用,这就是“晚到的异常处理”。当CM3对某异常的响应序列还处在早期:入栈的阶段,尚未执行其服务例程时,如果此时收到了高优先级异常的请求,则本次入栈就成了为高优先级中断所做的了——入栈后,将执行高优先级异常的服务例程。9、写出建立中断的全过程(中断向量表需要重定位)1.当系统启动后,先设置优先级组寄存器。缺省情况下使用组0(7位抢占优先级,1位亚优先级)。2.如果需要重定位向量表,先把硬fault和NMI服务例程的入口地址写到新表项所在的地址中。3.配置向量表偏移量寄存器,使之指向新的向量表(如果有重定位的话)。4.为该中断建立中断向量。因为向量表可能已经重定位了,保险起见需要先读取向量表偏移量寄存器的值,再根据该中断在表中的位置,计算出服务例程入口地址应写入的表项,再填写之。如果一直使用ROM中的向量表,则无需此步骤。5.为该中断设置优先级。6.使能该中断其中2、3、4如不需要重定位向量表,可以省略。10、CM3的中断和哪些寄存器有关,有什么关系?应用程序中断及复位控制寄存器AIRCR,划分优先级使能与除能寄存器悬起与“解悬”寄存器优先级寄存器活动状态寄存器另外,下列寄存器也对中断处理有重大影响异常掩蔽寄存器(PRIMASK,FAULTMASK以及BASEPRI)向量表偏移量寄存器软件触发中断寄寄存器p339可挂起外部中断11、解释下图的原理1.任务A呼叫SVC来请求任务切换(例如,等待某些工作完成)2.OS接收到请求,做好上下文切换的准备,并且挂起一个PendSV异常。3.当CPU退出SVC后,它立即进入PendSV,从而执行上下文切换。4.当PendSV执行完毕后,将返回到任务B,同时进入线程模式。此情况没有ISR5.发生了一个中断,并且中断服务程序开始执行6.在ISR执行过程中,发生SysTick异常,并且抢占了该ISR。7.OS执行必要的操作,然后挂起PendSV异常以作好上下文切换的准备。8.当SysTick退出后,回到先前被抢占的ISR中,ISR继续执行9.ISR执行完毕并退出后,PendSV服务例程开始执行,并且在里面执行上下文切换10.当PendSV执行完毕后,回到任务A,同时系统再次进入线程模式。12、当CM3开始响应一个中断时,会完成哪些操作?1、入栈:把8个寄存器的值压入栈2、取向量:从向量表中找出对应的服务程序入口地址3、选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC13、CM3支持哪两种调试主机接口?一个是广为使用的JTAG接口,一个新的“串行线(SerialWire,SW)调试接口”14、例举两种常用的CM3集成开发工具使用KEILRealViewMicrocontrollerDevelopmentKit(RVMDK)使用IAREmbeddedWorkbenchforARMandCortexCM3汇编语言简答题1、LDRR0,=0x12345678的操作结果是R0的值为12345678(16进制)MOVR0,#0x12345678的操作结果是R0的值为12345678(16进制)这两条指令的区别是什么?第一条指令是伪指令第二条指令是寄存器数据加载指令2、写出完成下列功能的指令a)置位特殊功能寄存器CONTROL的位0LDRR0,=0x00000001MSRCONTROL,R0b)置位位带区0x2000_0000的位0LDRR0,=0x22000000MOVR1,#0x1STRR1,[R0]c)给R0赋值0x2000,对其进行12位带符号数的饱和运算,结果放置于R1,R1的值应为多少?Q标志位为“1”还是为“0”?LDRR0,=0x00002000SSAT.WR1,#12,R0R1=0x7FF,Q标志为“1”3、已知R0=0x55aa7654,则执行下列指令后,R1的值分别为多少?SXTBR1,R0SXTHR1,R0UXTBR1,R0UXTHR1,R0SXTBR1,R0;R1=0x00000054SXTHR1,R0;R1=0x00007654UXTBR1,R0;R1=0x00000054UXTHR1,R0;R1=0x000076544、说明CM3的逻辑右移和算术右移指令的区别。(不使用S标志,不使用16位指令)逻辑右移指令移位过程最高位由“0”填充,算术右移指令最高位(符号位)保持,次高位由最高位填充。5、编程实现将CM3设置成为从位5划分优先级,此时几位表示抢占优先级,几位表示亚优先级?LDRR0,=0xE000ED0C;给出应用程序中断及复位控制寄存
本文标题:嵌入式homework-answer
链接地址:https://www.777doc.com/doc-5299889 .html