第一章嵌入式系统概述嵌入式系统:从技术的角度定义:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适用应用系统对功能、可靠性、成本、体积、功耗严格要求的通用计算机系统。从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语嵌入式反应了这些系统通常是更大系统中的一个完整的部分。称为嵌入的系统。嵌入式处理器:嵌入式系统的核心,是控制,辅助系统运行的硬件单元。1.1.2嵌入式系统的定义及特点可以将嵌入式系统定义成“嵌入到对象体系中得专用计算机应用系统”。1.嵌入式系统的特点按照嵌入式系统的定义,嵌入式系统有3个基本特点,即“嵌入性”、“内含计算机”与“专用性”。1.1.3嵌入式系统的未来微处理器的处理能力按莫尔定律预计的速度在增加。该定律认为集成电路和晶体管个数每18个月翻一番。1.2嵌入式处理器(与系统之间的关系)一类嵌入式处理器注重尺寸、能耗和价格。另一类嵌入式处理器更关注性能。还有一类嵌入式处理器关注全部4个需求——性能、尺寸、功耗和价格。1.2.2☆嵌入式系统的分类1.嵌入式微处理器(EMPU)嵌入式微处理器的基础是通用计算机中的CPU。2.微控制器(MCU)(包括嵌入式微处理器)微控制器又称单片机,就是将整个计算机系统集成到一块芯片中。3.DSP处理器(DSP)(哈佛结构)在数字滤波、FFT、频谱分析等方面,DSP算法正在大量进入嵌入式领域。4.片上系统(SoC)SoC可以分为通用和专用两类。1.3嵌入式操作系统1.3.1嵌入式操作系统简介分时操作系统的主要目的是让多个计算机用户能共享系统的资源,能及时地响应和服务于联机用户,只具有很弱的实时功能,但与真正的实时操作系统仍然有明显的区别。实时操作系统应具备以下特点:1.异地的时间响应。2.切换时间和中断延迟时间确定。3.优先级中断和调度。4.抢占式调度。5.内存锁定6.连续文件。7.同步实时操作系统是事件驱动的,能对来自外界的作用和信号在限定的时间范围内作出响应。实时操作系统可以分为一般实时操作系统和嵌入式实时操作系统两种。一般实时操作系统与嵌入式实时操作系统的主要区别在于应用场合和开发过程。一般实时操作系统应用于实时处理系统的上位机和实时查询系统等实时性较弱的实时系统中,并且提供了开发、调试、运用一致的环境。嵌入式实时操作系统应用于实时性要求的实时控制系统中,而且应用程序的开发过程是通过交叉开发来完成的,即开发环境与运行环境不一致。1.3.2嵌入式操作系统基本概念1前后台系统对于基于芯片开发来说,应用程序一般是一个无限的循环,可称为前后台系统或超循环系统。循环中调用响应的函数完成响应的操作,这部分可以看成后台行为;中断服务程序处理异步事件,这部分可以看成前台行为。后台可可以叫做任务级,前台也可以叫做中断级。2操作系统操作系统是计算机中最基本的程序,操作系统的作用:负责计算机系统中全部软硬资源的分配与回收、控制与协调等并发的活动;提供用户接口,使用户获得良好的工作环境;为用户扩展新的系统功能提供软件平台。3实时操作系统实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括储存器、外设等)管理、消息管理、任务调度及异常处理等工作。时间分片方式和协作方式的RTOS并不是真正的“实时”。4代码的临界区5资源6共享资源7任务8任务切换9内核多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通信。指标1调度实时强弱2占用CPU的时间10调度调度是内核的主要职责之一,调度就是决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的,每个任务根据其重要程序的不同被赋予一定的优先级。基于优先级的调度法指CPU总是让就绪态的优先级最高的任务先运行。然后究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况,这要看用的什么类型的内核,是非占先式的还是占先式的内核。非占先式:执行完成正在执行的任务再执行下一个任务。占先式:中断正在执行的任务,执行任务11非占先式内核12占先式内核当系统响应时间很重要时,要使用占先式内核,因此绝大多数商业上销售的实时内核都是占先式内核。13任务优先级任务的优先级是表示任务被调度的优先程度,每个任务都具有优先级。任务越重要,被赋予的优先级应该越高,越容易被调度而进入运行态。14中断中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被识别,CPU保存部分(或全部)上下文,即部分(或全部)寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序做时间处理,处理完成后,则1在前后台系统中,程序回到后台程序;(主程序)2对非占先式内核而言,程序回到被中断了的任务;3对占先式内核而言,让进入就绪态的优先级最高的任务开始运行。15时钟节拍(作用:节拍产生的时候,进行调度)时钟节拍是特定的周期性中断,这个中断可以看做是系统心脏的脉动。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。时钟节拍率越快,系统的额外开销就越大。1.3.3使用嵌入式实时操作系统的必要性首先,嵌入式实时操作系统提高了系统的可靠性。其次,嵌入式实时操作系统提高了开发效率,缩短了开发周期。第三,嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。1.3.4嵌入式实时操作系统的优缺点优点:在嵌入式实时操作系统环境下开发实时应用程序,使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。缺点:使用嵌入式实时操作系统还需要额外的ROM/RAM开销、2%~5%的CPU额外负荷以及内核的费用。1.3.5常见的嵌入式实时操作系统1μClinuxμClinux即“微控制领域中的Linux系统”。μClinux仍然保留了Linux的大多数优点:稳定、良好的移植性、优秀的网络功能、晚辈的对种文件系统的支持以及标准丰富的API等。2WindowsCEWindowsCE是精简的Windows95。其中CE中的C代表袖珍、消费、通信能力和伴侣;E代表电子产品。绝大多数的应用软件只需要简单地修改和移植就可以在WindowsCE平台上继续使用。3VxWorksVxWorks操作系统是一种嵌入式实时操作系统,是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,使其在嵌入式实时操作系统领域占领一席之地。具有的特点:1)可靠性2)实时性3)可裁剪性VxWorks内核最小为8KB4μC/OS-II一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统,其绝大部分源码是用ANSI写的。(作者:世界著名嵌入式专家JeanJ.Labrosse)特点:1)提供源代码2)可移植μC/OS-II的绝大部分源代码是使用移植性很强的ANSI编写的,与微处理器硬件相关的部分是使用汇编语言编写的。3)可固化4)可裁剪5)可剥夺6)多任务7)可确定性8)任务栈9)系统服务10)中断管理11)稳定性与可靠性思考与练习什么叫嵌入式系统?答:嵌入到对象体系中的专用计算机应用系统。什么叫嵌入式处理器?嵌入式处理器分为哪几类?答:嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。范围极其广阔,从最初的4位处理器,目前仍在大规模应用的8位单片机,到最新的受到广泛青睐的32位,64位嵌入式CPU。可分为嵌入式微处理器(EMPU)微控制器(MCU)DSP处理器片上系统(SoC)第二章ARM7体系结构LPC2000系列CPU的核心是ARM7飞利浦LPC2000:嵌入式微处理器2.1ARM简介ARM-AdvancedRiscMachinesRISC精简指令ARM架构是ARM公司面向市场设计的第一款低成本RISC微处理器。2.1.1RISC结构特性ARM内核采用精简指令集计算机(RISC)体系结构,其指令集和相关的译码机制比复杂指令集计算机(CISC)要简单得多,其目标就是设计出一套能在高时钟频率下单周期执行,简单而有效的指令集。ARM具备了非常典型的RISC结构特性:①有大量的通用寄存器②通过装载/保存结构使用独立的load和store指令完成数据在寄存器与外部存储器之间的传送③寻址方式非常简单④使用统一和固定长度的指令格式(分16位和32位两种)⑤每一条数据处理指令都可以同时包含算术逻辑单元的运算和移位处理,以实现对ALU和移位器的最大利用⑥地址自动增加和自动减少的寻址方式优化了程序中的循环处理⑦load/store指令可以批量传输数据,从而实现了最大数据吞吐量⑧大多数ARM指令可“条件执行”的,也就是说,只有当某个特定条件满足时指令才会被执行。2.1.2常用ARM处理器系列ARM公司开发了很多系列的ARM处理器核,应用比较多的是ARM7系列、ARM9系列、ARM10系列、ARM11系列,Intel的XScale系列和MPCore系列。1Cortex-M3处理器ARMCortexx-M3处理器具有成本低,引脚数目少一级功耗低的优势,是一款具有极高运算能力和中断响应能力的处理器内核。2Cortex-R4处理器3Cortex-R4F处理器4Cortex-A8处理器5ARM7系列6ARM9系列7ARM10系列8ARM11系列9XScale(主要特点:安全性能)2.2ARM7TDMI处理器:16位处理器(处理器一次可处理16位)指令集:指令的长度ARM的处理器是32位处理器ARM7TDMI是基于ARM体系结构V4版本的低端ARM核(注意:核并非芯片,ARM核与其他部件(如RAM、ROM、片内外设)组合在一起才构成现实的芯片)ARM7弥补了很难稳定在低于5V的电源下工作的不足,并且在短时间内增加了64位乘法指令(带M后缀的)、支持片上调试(带D后缀的)、高密度16位Thumb指令集扩展(带T后缀的)和EmbeddedICE硬件仿真功能模块(带I后缀的),形成ARM7TDMI2.2.1储存器的字与半字1个字→4个字节=32位ARM指令的长度刚好是一个字,Thumb指令的长度刚好是半个字ARM处理器使用了冯·诺依曼结构ARM处理器直接支持8位字节、16位半字或者32位字的数据类型。其中,以能被4整除的地址开始连续的4个字节构成1个字,字的数据类型为4个连续的字节。从偶数地址开始连续的2个字节构成一个半字,半字的数据类型为2个连续的字节。ARM指令的长度刚好是1个字,Thumb指令的长度刚好是一个半字。如果一个数据是以字方式存储的,那么它就是字对齐的,否则就是非字对齐的。如果一个数据是以半字方式存储的,那么它就是半字对齐的,否则就是非半字对齐的。2.2.23级流水线ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理器和存储器系统之间的操作更加流畅、连续,能提供0.9MIPS/MHz的指令执行速度。ARMThumbPCPC从存储器中取出指令PC-4PC-2对指令使用的寄存器进行译码PC-8PC-4从寄存器组中读书寄存器执行位移和ALU操作寄存器写回到寄存器组①取指从存储器装载一条指令②译码识别将要被执行的指令③执行处理指令并将结果写回寄存器PC总是指向正在“执行”的指令。PC总是指向第三条指令当处理器处于ARM状态时,每条指令长为4字节,所以PC的值为正在执行的指令地址加8字节。单片机时钟PC总是指向下一条指令PC值(正在取指的地址)=当前程序执行位置+8字节取指→译码→执行PCPC-4PC-8当处理器处于Thumb状态时,每条指令长为2字节PC值=当前程序执行位置+4字节程序清单2.1PC的读取0x4000ADDPC,PC,#4正在被执行的指令,将地址值PC+4写到PC0x4004…正在被译码的指令0x4008…正在被取指的指令,PC=0x40080x400C…PK+4=0x400C2.4ARM处理器状态ARM状态:32位,处理器执行字方式的ARM指令,处理器在系统上电时默认为ARM状态。Thumb状态:16位,处理器执行半