嵌入式系统整理.docx
《嵌入式系统整理.docx》由会员分享,可在线阅读,更多相关《嵌入式系统整理.docx(35页珍藏版)》请在冰豆网上搜索。
嵌入式系统整理
1.嵌入式系统的定义
一般定义:
以应用为中心,计算机技术为基础,软硬件可剪,以适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
本质定义:
嵌入到对象体系中的专用计算机系统。
2.嵌入式系统的三要素
嵌入式
专用性
计算机系统
3.嵌入式系统的发展历史
1976年,Intel公司推出4位MCS-48单片机,只有1KBROM和64KBRAM。
1980年,Intel公司对MCS-48单片机进行全面完善,推出了8位MCS-51单片机。
1984年,Intel公司又推出了16位8096系列并将其称之为嵌入式微控制器。
1982年,为了高速、实时地处理数字信号,诞生了首枚数字信号处理芯片DSP。
☆:
基于上述单片机的应用多数是基于硬件底层的单线程程序
20世纪90年代后,伴随着网络时代的来临,网络、通信、多媒体技术得以发展,基于硬件底层的单线程程序的单片机已经很难满足这些领域的要求。
32位微处理器开始面向嵌入式系统的高端应用,由于速度快、资源丰富、本身的复杂性、可靠性等,得到了广泛的需求。
4.嵌入式计算机系统与通用计算机系统区别
●嵌入式系统通常是面向特定应用的、高度集成的,应用的多样性决定了硬件平台的多样性。
●大多嵌入式系统都有实时性要求,在高端应用中,为满足应用需求、增强可靠性和便于开发,往往要有实时多任务操作系统的支持。
●嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。
●功耗、成本和可靠性对嵌入式系统有特别重要的意义。
●嵌入式系统和具体应用有机的结合在一起,升级换代和具体产品同步进行,因此嵌入式系统产品进入市场后具有较长的生命周期。
●嵌入式系统本身不具备自主开发能力,即使设计完成以后,用户通常也不能对其中的程序功能进行修改,必须有一套交叉开发工具和环境才能进行开发。
●嵌入式系统工业是不可垄断的高度分散的工业,充满了竞争、机遇与创新,是一个可以大有作为的行业。
5.嵌入式系统的组成
硬件:
处理器/微处理器、存储器、I/O接口、输入/输出设备
软件:
嵌入式操作系统、应用程序
6.嵌入式系统的软件组成:
嵌入式应用软件、嵌入式操作系统、硬件抽象层HAL、
板级支持包BSP、设备驱动程序、操作系统的应用程序接口函数API
7.嵌入式软件的主要特点
●软件要求固化存储。
●软件代码要求高质量、高可靠性。
●系统软件(OS)的高实时性是基本要求。
●嵌入式系统软件需求实时多任务操作系统开发平台(RTOS)。
●在嵌入式系统的软件开发过程中,采用C语言将是最佳的选择。
8.嵌入式处理器可以分为以下几大类:
1.嵌入式微处理器(MPU);
2.嵌入式微控制器(MCU,与MPU相比,它的特点是单片化);
3.嵌入式数字信号处理器(EDSP);
4.嵌入式片上系统(SOC)
9.嵌入式操作系统分类
●面向控制、通信等领域的实时操作系统
WindRiver公司的VxWorks、ATI的Nucleus、QNX系统软件公司的QNX、ISI的pSOS等
●面向消费电子产品的非实时操作系统
WinCE、Linux等
10.实时系统的两种类型:
硬件实时系统、软件实时系统
11.基于优先级的内核的2种类型:
不可剥夺型的、可剥夺型内核
12.嵌入式操作系统的特点:
1.可裁剪2.强实时3.统一的接口
4.操作方便、简单、提供友好的图形用户界面GUI
5.提供强大的网络功能6.稳定性,弱交互性
7.固化代码8.良好的移植性
13.WindowsCE:
MicrosoftWindowsCE是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。
WindowsCE操作系统的基本核心需要至少200KB的ROM。
它支持Win32API的子集,支持多种的用户界面硬件,同时提供熟悉的开发模式和工具。
WindowsCE有5个主要的模块:
●内核模块、内核系统接口模块、文件系统模块、
●图形窗口和事件子系统模块、通信模块
14.嵌入式Linux:
●优点:
◆Linux是由很多体积小且性能高的微内核系统组成。
◆Linux支持所有标准的因特网协议。
◆Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍。
◆传统的嵌入式程序调试和调试工具是用在线仿真器(ICE)实现的。
◆Linux具有广泛的硬件支持特性。
●不足:
◆实时性是嵌入式操作系统的基本要求。
◆Linux内核的所有部分都集中在一起,而且所有的部件在一起编译连接。
◆Linux需要占用较多存储器。
◆提供完整的集成开发环境是每一个嵌入式系统开发人员所期待的。
15.嵌入式系统设计流程:
1.需求分析
2.体系结构设计
3.硬件的设计、制作及测试
4.软件的设计、实现及测试(汇编、C、C++)
5.系统集成
6.系统性能测试及可靠性测试
16.ARM——32位RISC结构IP核提供商
●具有大量的寄存器,大多数数据在寄存器中完成;
●寻址方式简单灵活,执行效率高;
●通过载入和存储指令访问存储器;
●采用固定长度指令格式;
17.RISC和CISC在构架上的区别:
1)指令集的设计上:
RISC构架的指令格式和长度通常是固定的(如ARM是32位的指令)、且指令和寻址方式少而简单、大多数指令在一个周期内就可以执行完毕;
CISC构架下的指令通常是可变的、指令类型很多、一条指令通常要若干周期才可以执行完毕。
由于指令集多少与复杂度上的差异,RISC的处理器可以利用简单的硬件电路设计出指令解码功能,易于流水线实现。
相对的CISC则需要通过只读存储器里的微码来进行解码,CISC因为指令功能与指令参数变化较大,执行流水线作业时有较多的限制。
2)结构设计上:
RISC在是一个载入/存储的构架,
–只有载入和存储指令可以访问存储器;
–数据处理指令只对寄存器的内容进行操作。
为了加速程序的运算,RISC会设定多组的寄存器,并且指定特殊用途的寄存器。
CISC构架:
允许数据处理指令对存储器进行操作,对寄存器的要求相对不高。
18.ARM指令集体系结构(版本:
v1-v6)
1.版本1(v1)
该版本包括:
●基本数据处理指令(不包括乘法)。
●字节、字以及半字加载/存储指令。
●分支(branch)指令,包括用于子程序调用的分支与链接(branch-and-link)。
●软件中断指令,用于进行操作系统调用。
●26位地址总线。
2.版本2(v2)
与版本1相比,版本2增加了下列指令:
●乘法与乘加指令(multiply&multiply-accumulate)
●支持协处理器。
●原子性(atomic)加载/存储指令SWP和SWPB(稍后的版本称v2a)。
●FIQ中的两个以上的分组寄存器。
3.版本3(V3)
版本3较以前的版本发生了大的变化,具体改进下:
●推出32位寻址能力。
●分开的CPSR(currentprogramstatusregister,当前程序状态寄存器)和SPSR(savedprogramstatusregister,备份的程序状态寄存器):
Ø当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可以由SPSR来恢复CPSR。
●增加了两种异常模式,使操作系统代码可方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常。
●增加了MRS指令和MSR指令,用于完成对CPSR和SPSR寄存器的读/写;修改了原来的从异常中返回的指令
4.版本4(v4)
版本4在版本3的基础上增加了如下内容:
●有符号、无符号的半字和有符号字节的load和store指令。
●增加了T变种:
处理器可工作于Thumb状态,在该状态下,指令集是16位压缩指令集(Thumb指令集)。
●增加了处理器的特权模式。
在该模式下,使用的是用户模式下的寄存器。
另外,在版本4中还清楚地指明了哪些指令会引起未定义指令异常。
版本4不再强制要求与以前的26位地址空间兼容。
5.版本5(V5)
与版本4相比,版本5增加或修改了下列指令:
●提高了T变种中ARM/Thumb指令混合使用的效率。
●增加了前导零计数(CLZ)指令。
●增加了BKPT(软件断点)指令。
●为支持协处理器设计提供了更多的可选择的指令。
●更加严格地定义了乘法指令对条件标志位的影响。
6.版本6(v6)
●ARM体系版本6是2001年发布的,该版本在降低耗电的同时,还强化了图形处理性能。
●通过追加有效多媒体处理的SIMD(singleinstructionmultipledatastream,单指令流,多数据流)功能,将语音及图像的处理功能提高到原机型的4倍。
19.1.ARM体系结构的变种(如:
ARMv4TEJ)
1)T变种
THUMB指令集:
32位ARM指令集的子集,按16位指令重新编码。
–THUMB-1:
ARM体系结构v4的T变种;
–THUMB-2:
ARM体系结构v5的T变种;
2)M变种(增加两条长乘法指令)
–32x32=64bit.提供全64位结果
–32x32+64=64bit.提供全64位结果
3)E变种(增加DSP指令)
◆几条新的实现16位数据乘法和乘加操作的指令。
◆实现饱和的带符号数的加减法操作的指令。
◆进行双字数据操作的指令,包括双字读取指令LDRD、双字写入指令STRD和协处理器的寄存器传输指令MCRR/MRRC。
◆Cache预取指令PLD。
4)J变种(Java加速器Jazelle)
◆提供比基于软件的JAVA虚拟机(JVM)更高的性能
◆与非JAVA加速核相比,提供8倍JAVA加速性能和降低80%的功耗
5)SIMD变种(ARM媒体功能扩展)
ARM的SIMD媒体功能扩展:
为应用系统提供包括音频和视频处理在内的优化功能,主要特点如下:
●使处理器的音频和视频处理的性能提高了2-4倍。
●可同时进行2个16位操作数或者4个8位操作数的运算。
●用户可自定义饱和运算的模式。
●可进行2个16位操作数的乘加/乘减运算及32位乘以32位的小数乘加运算。
●同时8/16位选择操作。
20.2.ARM体系结构版本的命名格式
表示ARM/Thumb体系版本的命名格式由下面几部分组成:
●基本字符串ARMv。
●基本字符串后为ARM指令集版本号,目前是1~6的数字字符。
●ARM指令集版本号后为表示所含变种的字符。
Ø由于在ARM体系版本4以后,M变种成为系统的标准部件,所以字符M通常也不单独列出来。
●最后使用的字符x:
表示排除某种功能。
ARMv4TEJxP
21.ARM7系列
ARM7系列微处理器:
属于低功耗、32位RISC处理器,适合用于对价位和功耗要求较高的消费类应用。
ARM7微处理器系列具有如下特点:
◆具有嵌入式ICE-RT逻辑,调试开发方便。
(ICE-RT:
ARM处理器内部集成的在线仿真功能模块)
◆极低的功耗,适合对功耗要求较高的应用,如便携式产品。
◆能够提供0.9MIPS/MHz的三级流水线结构。
(分为:
取指、译码、执行)
◆对操作系统的支持广泛,包括WindowsCE、Linux、PalmOS等。
◆指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代。
◆主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。
22.
1.ARM7系列微处理器包括如下几种类型的核:
ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。
其中,ARM7TMDI是使用较为广泛的32位嵌入式RISC处理器,属于低端ARM处理器核。
2.ARM9系列
ARM9系列微处理器在高性能和低功耗特性方面提供更好的性能。
具有以下特点:
●5级整数流水线,指令执行效率更高。
●提供1.1MIPS/MHz的哈佛(ARMV4T)结构。
●支持32位ARM指令集和16位Thumb指令集。
●支持32位的高速AMBA总线接口。
●全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。
●MPU支持实时操作系统。
●支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
ARM9E系列微处理器的主要特点如下:
●支持DSP指令集,适合于需要高速数字信号处理的场合。
●5级整数流水线,指令执行效率更高。
●支持32位ARM指令集和16位Thumb指令集。
●支持32位的高速AMBA总线接口。
●支持VFP9浮点处理协处理器。
●全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。
●MPU支持实时操作系统。
●支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
●主频最高可达300MIPS。
3.ARM10E系列
ARM10E系列微处理器具有高性能、低功耗的特点:
•采用新的体系结构:
与同等的ARM9器件相比较,在同样的时钟频率下,性能提高了近50%;
•采用了两种先进的节能方式:
使ARM10E系列微处理器功耗极低。
ARM10E系列
ARM10E系列微处理器的主要特点如下:
●支持DSP指令集,适合于需要高速数字信号处理的场合。
●6级整数流水线,指令执行效率更高。
●支持32位ARM指令集和16位Thumb指令集。
●支持32位的高速AMBA总线接口。
●支持VFP10浮点处理协处理器。
●全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。
●支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
●主频最高可达400MIPS。
●内嵌并行读/写操作部件
4.StrongARM系列
InterStrongARMSA-1100处理器:
•采用ARM体系结构高度集成的32位RISC微处理器。
•融合了Inter公司的设计和处理技术+ARM体系结构的电源效率;
•采用在软件上兼容ARMv4体系结构、同时采用具有Intel技术优点的体系结构。
应用:
IntelStrongARM处理器是便携式通讯产品和消费类电子产品的理想选择,已成功应用于多家公司的掌上电脑系列产品。
5.Xscale系列
Xscale处理器:
•基于ARMv5TE体系结构的解决方案,是一款全性能、高性价比、低功耗的处理器;
•核心采用Intel的0.18微米工艺制造;
•支持16位的Thumb指令和DSP指令集。
应用:
数字移动电话、个人数字助理和网络产品等场合。
23.ARM体系结构将存储器看作:
从零地址开始的字节的线性组合:
Ø从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。
Ø作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。
ARM体系结构可以采用两种方法存储字数据:
•大端格式:
字数据的高字节存储在低地址;
•小端格式:
字数据的低字节存储在低地址;
ARM默认存储模式:
小端模式。
24.ARM7TDMI处理器有两种工作状态:
◆ARM-32-bit,按字排列的ARM指令集
◆Thumb-16-bit,按半字排列的Thumb指令集
ARM7TDMI核的工作状态可以通过BX指令(分支和交换指令)在ARM状态和Thumb状态之间切换。
但ARM处理器开始执行代码时,应该处于ARM状态。
工作状态的切换不会影响处理器的工作模式和相应寄存器中的内容
25.ARM处理器有7种工作模式:
●用户模式(usr):
正常的程序执行模式,执行一般的应用程序;
●系统模式(sys):
支持操作系统的特殊用户模式(运行具有特权操作系统任务)
●管理员模式(svc):
操作系统的保护模式.
●快速中断模式(fiq):
由外部触发FIQ管脚,支持高速数据传输或通道处理
●中断模式(irq):
由外部触发IRQ管脚,用于通用中断处理
●中止模式(abt):
数据或指令预取出现错误或异常,支持虚拟内存和/或内存保护
●未定义模式(und):
支持硬件协处理器的软件仿真
●除了用户模式外,其他模式均可视为特权模式;除去用户模式、系统模式以外的视为异常模式。
可借助软件改变ARM工作模式。
26.ARM有37个32位长的寄存器,包括31个通用寄存器、1个CPSR、5个SPSR。
在任何时刻,只有16个通用寄存器(R0~R15)和一个或者两个状态寄存器对处理器是可见的
27.通用寄存器:
R0~R15,分为三类:
R0~R7:
未分组寄存器;在所有的运行模式下,这类寄存器指向同一物理寄存器。
特别注意数据出现破坏的可能性。
R8~R14:
分组寄存器;每次所访问的物理寄存器与处理器当前的运行模式有关。
R15:
程序计数器PC
28.程序状态寄存器PSR
•ARMPSR:
包含1个当前程序状态寄存器(CPSR),5个程序状态保存寄存器SPSR。
处理器在所有工作模式都可以访问CPSR,不同模式的CPSR对应同一个物理寄存器:
–CPSR:
用来标示(或设置)当前运算的结果等;
–SPSR:
当异常发生时,用于保存CPSR的状态,用于从异常退出时恢复CPSR。
每种异常模式都有一个SPSR,对应不同物理寄存器。
但用户模式和系统模式没有SPSR。
•即:
这些寄存器的功能是:
–保存当前操作信息
–控制允许和禁止中断
–设置处理器操作模式
29.程序状态寄存器
30.异常中断响应过程:
1在相应的链接寄存器LR(R14_)中保存当前指令的下一条指令的地址;
2将CPSR复制到相应的SPSR中;
上述过程:
保留返回信息
3强制使CPSR模式位置成对应异常类型的值
4强制使程序计数器PC指向相应异常向量,取下一条指令
5设置CPSR中的中断禁止位,禁止中断发生
31.异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:
1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
因此:
基于ARM微处理器的设备上电时,ARM处理器的初始状态为:
ARM状态、管理模式、复位异常。
32.ARM微处理器的指令集:
是加载/存储型的,即:
–指令集仅能处理寄存器中的数据,处理结果必须放回寄存器;
–对系统存储器的访问需要通过专门的加载/存储指令来完成。
33.ARM指令集主要包括
–数据处理指令分支指令
–存储器访问指令程序状态寄存器处理指令
–协处理器指令异常中断产生指令等。
Thumb指令集主要包括
–数据处理指令分支指令
–加载/存储寄存器指令加载/存储乘法指令等
34.堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;
堆栈指针指向下一个待压入数据的空位置,称为空堆栈。
35.常见的的ARM编译开发环境有两种:
1.由GNU的汇编器as、交叉编译器GCC和链接器ld等组成的IDE开发环境。
2.由ARM公司开发的ADS/SDTIDE,使用CodeWarrior的编译器。
36.在ARM汇编语言中,
伪操作:
ARM汇编语言程序里的一些特殊指令助记符,主要是为完成汇编程序做各种准备工作,在源程序进行汇编时由汇编程序处理,而不是在程序运行期间由CPU执行。
伪指令:
ARM汇编语言程序里的特殊指令助记符,在处理器运行期间不执行,它们在汇编时将被相应的机器指令代替成ARM或Thumb指令。
宏指令:
是一段独立的程序代码,可插入到源程序中,通过伪操作来定义
37.5)ENTRY
ENTRY伪操作用于指定程序的入口点。
一个程序中至少要有一个ENTRY,但是一个源文件中最多只有一个ENTRY
38.寄存器的使用规则
必须满足以下规则:
1)子程序间通过寄存器R0~R3来传递参数。
2)在子程序中,使用寄存器R4~R11来保存局部变量。
3)寄存器R12用于子程序间scratch寄存器,记作IP。
4)寄存器R13用于数据栈指针,记作SP。
5)寄存器R14称为连接寄存器,记作LR。
寄存器R15是程序计数器,记作PC,它不能做其他用途
39.参数传递规则
(1)参数个数可变的子程序参数传递规则
对于参数个数可变的子程序,当参数个数不超过4个时,使用寄存器R0~R3来传递参数,当参数超过4个时,使用数据栈传递参数。
即
•参数传递时,将所有参数看作存放在连续内存字单元的字数据,依次将各字数据传送到R0,R1,R2,R3。
•若参数多于4个,将剩余的字数据传送到数据栈,入栈顺序与参数顺序相反。
(2)参数个数固定的子程序参数传递规则
如果系统包括浮点运算的硬件部件,浮点参数将按照下面的规则传递:
•各个浮点参数按顺序处理。
•为每个浮点参数分配FP寄存器。
分配的方法是:
–满足该浮点参数需要,且编号最小的一组连续FP寄存器,第一个整数参数,通过寄存器R0~R3来传递,其他参数通过数据栈传递。
(3)子程序结果返回规则
●结果为一个32位整数时,可以通过寄存器R0返回。
●结果为一个64位整数时,可以通过寄存器R0和R1返回,依次类推。
●结果为一个浮点数时,可以通过浮点运算部件的寄存器f0、d0或者s0来返回。
●结果为复合型的浮点数时,可以通过寄存器f0~fN或者d0~dN来返回。
●对于位数更多的结果,通过内存来传递。
40.armcc编译器的内嵌汇编器支持ARM指令集,tcc编译器的内嵌汇编支持Thumb指令集
41.内嵌汇编的指令用法
1内嵌汇编指令中,作为操作数的寄存器和常量可以是表达式,这些表达式可以是char、short或int类型,而且这些表达式都是作为无符号数进行操作。
2在内嵌汇编中使用物理寄存器有以下限制:
•不能直接向PC寄存器赋值,程序跳转只能使用B或BL指令实现。
•通常内嵌的汇编指令中不要指定物理寄存器,因为这可能会影响编译器分配寄存器,进而影响代码的效率。
3在内嵌汇编指令中,常量前面的“#”可以省略。
4对于标号,C程序中的标号可以被内嵌的汇编指令使用,但是只有指令B可以使用C程序中的标号,指令BL则不能使用。
5编译时,所有的内存分配均由C编译器完成,分配的内存单元通过变量供内嵌汇编器使用,内嵌汇编器不支持内嵌汇编程序中用于内存分配的伪指令。
6在内嵌的SWI和BL指令中,除了正常的操作数域外,