《实时嵌入式系统设计》课程复习.ppt
嵌入式系统概论复习课北京航空航天大学机器人研究所魏洪兴,考试时间,时间:2011年1月5日晚18:0020:00 地点:主南405考试形式:半开卷,考试要求,掌握嵌入式系统的软硬件基本概念,包括CISC、RISC、进程、线程、操作系统通信与同步等,及一些术语的表示方法;掌握ARM体系结构:包括寄存器组织、工作模式、异常处理等;掌握ARM汇编指令,能够进行简单的汇编程序设计;了解uC/OS的基本结构,嵌入式系统的软硬件基本概念,嵌入式系统的软/硬件框架,CISC和RISC,CISC:复杂指令集(Complex Instruction Set Computer)具有大量的指令和寻址方式8/2原则:80%的程序只使用20%的指令大多数程序只使用少量的指令就能够运行。,RISC:精简指令集(Reduced Instruction Set Computer)在通道中只包含最有用的指令确保数据通道快速执行每一条指令使CPU硬件结构设计变得更为简单,CISC与RISC的数据通道,IF,ID,REG,ALU,MEM,开始,退出,IF,ID,ALU,MEM,REG,微操作通道,开始,退出,单通数据通道,CISC与RISC的对比,非占先式与占先式,非占先式(non-preemptive)非占先式调度法也称作合作型多任务(cooperative multitasking),各个任务彼此合作共享一个CPU。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到改任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。非占先式内核的一个特点是几乎不需要使用信号量保护共享数据。运行着的任务占有CPU,而不必担心被别的任务抢占。非占先式内核的最大缺陷在于其响应高优先级的任务慢,任务已经进入就绪态,但还不能运行,也许要等很时间,直到当前运行着的任务释放CPU。内核的任务级响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到CPU的控制权,完全取决于应用程序什么时候释放CPU。,非占先式(Non-Preemptive),占先式(preemptive)当系统响应时间很重要时,要使用占先式(preemptive)内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。使用占先式内核时,应用程序不应直接使用不可重入型函数。如果调入可重入型函数时,低优先级的任务CPU的使用权被高优先级任务剥夺,不可重入型函数中的数据有可能被破坏。,占先式(Preemptive),进程、线程和任务,在多道程序系统中,各个程序之间是并发执行的,共享系统资源。CPU需要在各个运行的程序之间来回地切换,这样的话,要想描述这些多道的并发活动过程就变得很困难。为此,操作系统设计者提出了进程的概念。,什么是进程?,A process a program in execution,一个进程应该包括:程序的代码;程序的数据;PC中的值,用来指示下一条将运行的指令;一组通用的寄存器的当前值,堆、栈;一组系统资源(如打开的文件)总之,进程包含了正在运行的一个程序的所有状态信息。,main().A().PROCESS,A program is C statements or commands静态的;A process is program+running context动态的.,main().A().PROGRAM,heap,StackA Main,Registers,PC,Process Program,进程的特性,动态性:程序的运行状态在变,PC、寄存器、堆和栈等;独立性:是一个独立的实体,是计算机系统资 源的使用单位。每个进程都有“自己”的PC和内部状态,运行时独立于其他 的进程(逻辑PC和物理PC);并发性:从宏观上看各进程是同时独立运行的,怎么办?,需要提出一种新的实体,满足以下特性:(1)实体之间可以并发地执行;(2)实体之间共享相同的地址空间;,这种实体就是:线程(Thread),什么是线程?,Thread:A sequential execution stream within a process;A thread of execution;进程当中的一条执行流程。,从两个方面来理解进程:从资源组合的角度:进程把一组相关的 资源组合起来,构成了一个资源平台(环境),包括地址空间(代码段、数据 段)、打开的文件等各种资源;从运行的角度:代码在这个资源平台上的 一条执行流程(线程)。,进程 线程 资源平台,优点:一个进程中可以同时存在多个线程;各个线程之间可以并发地执行;各个线程之间可以共享地址空间。,线程所需的资源,(本图摘自Silberschatz,Galvin and Gagne:“Operating System Concepts”),任务task,典型的任务一个无限循环。void mytask(void*pdata)for(;)do something;waiting;do something;C/OS II 2.5版本支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小。系统占用了8个任务,保留优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO-0。,任务状态,OSIntEnter(),/*在调用本函数之前必须先将中断关闭*/void OSIntEnter(void)if(OSRunning=TRUE)if(OSIntNesting 255)OSIntNesting+;,OSIntExit的意义,OSIntExit(),void OSIntExit(void)OS_ENTER_CRITICAL();/关中断 if(-OSIntNesting|OSLockNesting)=0)/判断嵌套是否为零/把高优先级任务装入 OSIntExitY=OSUnMapTblOSRdyGrp;OSPrioHighRdy=(INT8U)(OSIntExitY 3)+OSUnMapTblOSRdyTblOSIntExitY);if(OSPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OSIntCtxSw();OS_EXIT_CRITICAL();/开中断返回,ARM处理器体系结构与指令集,ARM寄存器组织 1*,寄存器-2,37 寄存器31 个通用32位寄存器,包括程序计数器PC未分组寄器R0-R7分组寄存器R8-R14程序计数器PC(R15)6 个状态寄存器15 通用寄存器(R0 to R14),以及1或者2个状态寄存器和程序计数器在任何时候都是可以访问的可访问的寄存器取决于处理器的模式其它寄存器(the banked registers)的状态在支持IRQ,FIQ,管理员,中止和未定义模式处理时被切换,寄存器-3,R0 到 R15 可以直接访问R0 到 R14 是通用寄存器R13:堆栈指针(sp)(通常)每种处理器模式都有单独的堆栈R14:链接寄存器(lr)R15 包含程序计数器(PC)CPSR 当前程序状态寄存器,包括代码标志状态和当前模式位5个SPSRs-(程序状态保存寄存器)当异常发生时保存CPSR状态,处理器工作模式(1),ARM 有7个基本工作模式:1、User:非特权模式,大部分任务执行在这种模式正常程序执行的模式2、FIQ:当一个高优先级(fast)中断产生时将会进入这种模式高速数据传输和通道处理3、IRQ:当一个低优先级(normal)中断产生时将会进入这种模式通常的中断处理4、Supervisor:当复位或软中断指令执行时将会进入这种模式供操作系统使用的一种保护模式5、Abort:当存取异常时将会进入这种模式虚拟存储及存储保护6、Undef:当执行未定义指令时会进入这种模式软件仿真硬件协处理器7、System:使用和User模式相同寄存器集的特权模式特权级的操作系统任务,程序状态寄存器-1,ARM7TDMI 包含当前程序状态寄存器(CPSR),加上5个程序状态保存寄存器SPSR,当异常发生时,用于保存CPSR的状态 这些寄存器的功能是:保存ALU当前操作信息控制允许和禁止中断设置处理器操作模式,程序状态寄存器-2,N,Z,C and V 条件码标志可以在处理器中作为数学和逻辑操作改变可以被所有的指令测试,以决定指令是否被执行N:Negative.Z:Zero.C:Carry.V:oVerflowI and F 位是中断禁止位M0,M1,M2,M3 and M4 位是模式位,程序状态寄存器,条件位:N=1-结果为负,0-结果为正或0Z=1-结果为0,0-结果不为0C=1-进位,0-借位V=1-结果溢出,0结果没溢出Q 位:仅ARM 5TE/J架构支持指示增强型DSP指令是否溢出J 位仅ARM 5TE/J架构支持J=1:处理器处于Jazelle状态,中断禁止位:I=1:禁止 IRQ.F=1:禁止 FIQ.T Bit仅ARM xT架构支持T=0:处理器处于 ARM 状态T=1:处理器处于 Thumb 状态Mode位(处理器模式位):0b10000User0b10001FIQ0b10010IRQ0b10011Supervisor0b10111Abort0b11011Undefined0b11111System,ARM异常-1,异常内部或外部中断源产生并引起处理器处理一个事件,如外部中断或试图执行未定义指令都会引起异常。处理异常之前必须保留处理器的状态异常类型FIQ IRQ(Interrupt ReQuest)未定义指令预取中止数据中止复位软件中断Software interrupt通过软件中断产生进行管理员模式中获得通常要求特殊的管理功能,如操作系统支持,异常-2,异常类型未定义的指令陷井当ARM接受到一条不能处理的指令,ARM把这条指令提供给任何一个协处理器执行如果协处理器可以执行这条指令但此时协处理器忙,ARM将等待直到协处理器准备好或中断发生如果没有协处理器处理这条指令,那么ARM将处理未定义的指令陷井异常优先级(1)Reset(highest priority)(2)Data abort(3)FIQ(4)IRQ(5)Prefetch abort(6)未定义指令,Software interrupt(最低优先级),异常向量,Vector Table,异常处理,当异常产生时,ARM core:拷贝 CPSR 到 SPSR_设置适当的 CPSR 位:改变处理器状态进入 ARM 态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如需要)保存返回地址到 LR_设置 PC 为相应的异常向量返回时,异常处理需要:从 SPSR_恢复CPSR从LR_恢复PC Note:这些操作只能在 ARM 态执行.,Vector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devices,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,ARM 指令集的特点,向后兼容:新版本增加指令,并保持指令向后兼容;Load-store 结构*load/store 从存储器中读某个值,操作完后再将其放回存储器中只对存放在寄存器的数据进行处理;对于存储器中的数据,只能使用load/store指令进行存取,ARM 指令分类,数据处理指令 使用和改变寄存器的值数据传送指令 把存储器的值拷贝到寄存器中(load)or 把寄存器中的值拷贝到存储器中(store)控制流指令 分支分支和链接,保存返回的地址,以恢复最先的次序软件中断指令程序状态寄存器指令协处理器指令,谢 谢 各 位,