嵌入式系统
概况
1. 组成
软件平台:应用程序,操作系统。
硬件平台:存储器,处理器
2. 硬件平台结构:时钟 sdram控制器 < == > sdram 复位,处理器核,中断控制器< == >其它外设,外部总线 < == >其它外设/Flash
RISC和CISC,
CPU组成
物理结构:
1)运算逻辑部件:可执行定点或浮点算术运算操作,移位及逻辑操作,也可以执行地址运算和转换。
2)寄存器:通用(中央处理器的重要组成部分,宽度决定计算机内部的数据通路宽度,其端口数目往往可影响内部操作的并行性)
专用()和控制(用于控制盒确定处理器的操作模式以及当前执行任务的特性)
3)控制部件:负责对指令译码,并且发出为完成每条指令所要执行的各操作的控制信号。一种以微存储为核心的微程序控制方式;一种以逻辑硬布线结构为主的控制方式。
主要功能:
处理指令:控制程序中指令的执行顺序。严格的顺序,
执行操作:一条指令的功能往往是由计算机中的部件执行一序列的操作来实现的,CPU要根据指令的功能,产生相应的操作控制信号,发给相应的部件,从而控制这些部件按指令的要求进行动作。
控制时间:就是对各种操作实施时间上的定时,在一条指令的执行过程中,在什么时间做什么操作均应受到严格的控制。
处理数据:进行算术运算和逻辑运算,或进行其他的信息处理。
数据通讯,资源共享,分布式处理,提供系统的可靠性,运作原理基本分为四个阶段:提取、解码、执行、写回。
CPU执行一条指令的过程
取址 :从存储器或高速缓冲存储器中检索指令,由程序计数器指定存储器的位置,及保存了程序位置的数值。
分析指令:指令被拆解为有意义的片断,根据CPU指令集架构将数值解译为指令,一部分指令数值为运算码,
执行指令:该阶段中,连接到各种能够进行所需运算的CPU部件。Alu将会连接到一组输入和一组输出,输入提供了要相加的数值,而输出将含有总和的结果。ALU内含电路系统,易于输出端完成简单的普通运算和逻辑运算。
写回: 以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。
CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。
指令是指计算机规定执行的操作的类型和操作数的基本命令。由一个字节或多个字节组成,其中包括操作码字段、一个或多个有关操作数的字段以及一些表征机器状态的状态字以及特征码。
1. CPU参数:主频:时钟频率,单位是兆赫表示CPU的运算,处理数据的速度。通常主频等于外频*倍频。表示cpu内数字脉冲震荡的速度。性能还要看cpu的流水线,总线等各方面指标。
2. 外频:cpu外频决定主板的运行速度。超频一般都是超cpu外频,倍频一般都是固定的,
3. 总线频率:fsb是将cpu连接到北桥芯片的总线。前端总线FSB频率是直接影响cpu与内存直接数据交换速度。数据带宽=总线频率*数据位宽 /8 64位的至强前段总线为800MH,按照公式它的数据传输最大带宽是6.4GB/秒。外频是CPU与主板之间同步运行的速度,也就是说100mhz特指数字脉冲信号在每秒钟震荡一亿次;而100MHZ前端总线是指每秒钟CPU可接受的数据传输量是100MHZ*64bit/8bit=800MB/S;
4. 倍频系数是指cpu主频与外频之间的相对比例关系,在相同的外频下倍频越高主频就越高。
5. 缓存:缓存的结构和大小对cpu速度的影响非常大,CPU内缓存的运行频率极高,一般和处理器同频运作,工作效率远大于系统内存和硬盘,
L1是CPU第一层高速缓存,分为数据缓存和指令缓存,内置的L1均由静态RAM组成,结构较复杂,
L2是cpu的第二层高速缓存,分内部和外部两种芯片。内部芯片二级缓存运行速度与主频相同,外部的则只有主频的一半。
L3分为两种早期的外置:
指令集
分为复杂指令集CISC和精简指令集RISC。
处理器技术
流水技术与超标量前:流水线:指令分成5-6步,然后在由这些电路单元分别执行,经典的奔腾每条整数流水线分为四级流水:即指令预取,译码,执行,写回结果,超标量是通过内置多条流水线来同时执行多个处理器,其实就是空间换时间。
多线程
多核心单芯片多处理器
SMP 对称多处理器结构的简称
总线
位置来分:
1. 内部总线:cpu内部寄存器之间和算术逻辑部件ALU与控制部件之间的传输数据所用的总线。
2. 外部总线:cpu与内存RAM ROM和输入输出设备接口之间进行通讯的通路,
功能分:
1. 地址总线:用来传送地址信息。
2. 数据总线:传送数据信息。
3. 控制总线:传送各种控制信号。
功用分:
1. 系统总线
2. 局部总线
Linux内核5大功能:
进程管理 ---并发多任务
内存管理 --虚拟内存
文件系统 --文件盒目录 VFS
设备控制 --TTY和设备访问
网络 --互联性
CPU
存储器
以太网控制器
串行接口
USB host
存储接口
LCD 触摸屏接口
调试及下载接口
Arm体系结构与编程
指令集
1. 除乘法指令之外的基本数据处理指令。
2. 基于字节、字和多字的读取和写入指令。
3. 包括程序跳转指令。
4. 供操作系统使用的软件中断指令 SWI。
变种指令:
THUMB指令集,
多媒体指令
Java
应用领域
开放应用平台:无线系统、消费电子及成像设备。
实时嵌入式应用:存储设备、汽车、工业和网络设备。
安全系统:信用卡和SIM卡。
Arm处理器模式
7种模式:
用户模式 正常的程序执行
快速中断模式 用于高速数据传输和通道处理
外部中断模式 用于通常的中断处理
特权模式 供操作系统使用的一种保护模式
数据访问中止模式 用于虚拟存储及存储保护
未定义指令中止模式 支持通过软件方针硬件的协处理器
系统模式 用于运行特权级的操作系统任务
用户模式,特权模式{特权模式,异常模式}。
用户和系统模式都有一样的寄存器,但系统模式可以访问系统资源,异常模式都有专有的寄存器。
寄存器
37个寄存器:
31通用寄存器,
6个状态寄存器,
1)通用寄存器
15个通用状态寄存器 R0~R14、一个或两个状态寄存器及程序计数器
a. 未备份寄存器
R0~R7
b. 备份寄存器
R8~R12 各有2个
R13~r14 各有6个。用户模式和系统模式公用一个。其它的异常模式都各有一个。
R13常用作栈指针
R14连接寄存器,LR
R13异常寄存器
R15程序计数器,PC.
Cpsr 程序状态寄存器,任何处理器模式下被访问,条件标志位,终端禁止位 当前处理器模式标志以及其它的一些控制盒状态。
Spsr 物理状态寄存器。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,在异常中断程序退出时,可以用spsr中保存的值来恢复cpsr。用户和系统模式下没有物理状态寄存器。
ARM体系的异常中断。
ARM体系中的存储空间:2的32次方个8位字节。这些字节单元的地址是一个无符号的32位数值。
中断的响应过程:
保存当前处理器的状态、中断屏蔽位。
设置当前程序状态寄存器CPSR中相应的位。
寄存器LR_MODE设置成返回地址。
将程序计数器值PC,设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。
从异常中断处理程序中返回
恢复被中断的程序的处理器状态,即将SPSR_MODE寄存器内容复制到CPSR中
返回到发生异常中断指令的下一条指令处执行,即将LR_MODE寄存器的内容复制到程序计数器的PC中。
一个字包含4个字节单元或者2个半字单元,
指令的预取和自修改代码
1. 正常执行,每一条arm指令,程序计数器PC值加4个字节,每执行一条thumb指令,程序计数器加2个字节。
2. 跳转指令 B BL BX BLX;bl指令在执行跳转的同时保存子程序的返回地址;BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到THUMB状态, blx组合上面3种。
3. 处理中断,当异常中断发生时,系统处理完当前的指令后,将跳转到异常中断处理程序处执行,异常中断处理执行完成后,程序返回到发生中断的指令的下一条指令执行,在进入异常处理程序时,要保存被中断的程序的执行现场。
异常中断的种类
复位
| 处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序执行,发生情况:系统加电、系统复位、跳转到复位中断向量处执行,称为软复位。 |
未定义的指令
| 认为当前指令未定义 |
软件中断
| 用户定义的中断指令,可用户用户模式下的程序调用特权操作 |
指令预取中止
| 处理器预取的指令地址簿存在,或者该地址簿允许当前指令访问 |
数据访问中止
| 数据访问的指令的目标地址簿存在,或者该地址不允许当前指令访问,处理器产生产生数据访问中止异常中断。 |
外部中断请求
| 当处理器产生的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产生外部中断请求IRQ异常中断。系统中各外设通常通过该异常中断请求处理器服务。 |
快速中断请求
| 当处理器的外部快速中断请求引脚有效,而且CPSR寄存器的F控制位被清除时,处理器产生外部异常中断。 |
|
|
ARM体系中的存储系统
ARM体系使用单一的平板地址空间,该地址空间的大小为2的32个8位字节。大小为0-2的32次方减一1。4G大小的空间,
ARM的地址空间也可以看做是2的30次方的字单元。因为32位是8位的4倍,所以为2的2次方。因为地址总是以8位bit为一个地址,所以一个字32位的话是4倍,
ARM的存储格式:32位的每个字就是4个字节单元,或者2个半字单元,这4个字节单元哪一个是低位字节有两种不同的格式:big_endian格式,little-endian格式。
Big-endian 地址由高位到低位字节的顺序为:a a+1 a+2 a+3 ,另外一种则相反。
Arm指令分类及其寻址方式
指令的分类、指令的一般编码格式以及ARM指令中的条件码。
32位指令,
Arm指令分类
跳转指令,数据处理指令,程序状态寄存器指令(psp),
load/store指令,协处理器指令和异常中断指令。
一般格式:
指令字长固定的32位:
Opcode 指令操作符编码。
Cond 指令执行的条件编码。
S 决定指令操作是否影响cpsr的值。
Rd 目标寄存器编码。
Rn 包括第一个操作数的寄存器编码。
Shifter_operand表示第二个操作数。
一条典型的arm指令语法格式如下所示:
<opcode>[<cond>{s} <rd>,<rn>,<shifter_operand>]
条件码:对应于条件,对应于CPSR中的标志位的值
16个条件码。
arm寻址方式
数据处理指令的操作数的寻址方式
字及无符号字节的LOAD/STORE指令的寻址方式
杂类LOAD/STORE指令的寻址方式
批量Load/store指令的寻址方式
协处理器load/store指令的寻址方式
1. 数据处理指令的操作数的寻址方式
立即数方式:由一个8位的常数循环右移偶数位得到。
<immediate>= immed_8 循环右移(2*rotate_imm)
2. 寄存器方式 在寄存器寻址方式下,操作数即为寄存器的数值。如:mov r3 r2 ;add ro,r1,r2
3. 寄存器移位方式 寄存器移位方式的操作数为寄存器的数值做相应的移位或者循环移位得到。ASR 算术右移 LSL 逻辑左移 LSR逻辑右移 ROR循环右移 RRX 扩展的循环右移,移位的位数可以用立即数方式或者寄存器方式表示。
MOV RO ,R1,LSL #3
ADD R0,R1,R1,LASL #3
数据处理指令操作数的具体寻址方式有下面11种:
#<immediate>
<Rm>
<Rm>,LSL #<shift_imm>
<Rm>,LSL <RS>
字及无符号字节的Load/store指令的寻址方式
Load 指令用于从内存读取数据放入寄存器中;store指令用于将寄存器中的数据保存到内存。一类用于操作32位的字类型数据以及8位无符号的字节类型数据。另一类用于操作16位半字类型的数据以及8位的有符号字节类型的数据。
批量的寻址方式:DM|STM
数据处理指令:
传送指令,算术逻辑运算指令,比较指令,TST.
状态寄存器的访问指令:
MRS 状态寄存器到通用寄存器
MSR 通用寄存器到状态寄存器。
Store是将寄存器的内容存放到内存,
信号量操作指令
Swp :交换指令:指令将一个内存字单元(该单元地址放到寄存器《RN》中)的内容读取到一个寄存器<rd>中,同时将另一个寄存器<rm>的内容写入到内存单元中。
Swpb:字节交换指令
异常中断产生指令
Swi 软中断指令
BKPT断点中断指令。
ARM协处理器指令
Arm处理器初始化arm协处理器的数据处理操作
用于arm处理器的寄存器和arm协处理器的寄存器间的数据传送操作
用于在arm协处理器的寄存器和内存单元之间传送数据。
包含:
CDP
LDC
STC
MCR
MRC
常用指令:
1. 位操作指令应用举例
MOV r0 ,r2,#24;将R2的高8位数据传送到R0中,R0的高24位设置成0
Orr r3,r0,r3,LSL #8;将R3中数据逻辑左移8位,这时R3的低8位为0,ORR操作将R0高24位为0中低8位数据传送到寄存器R3中。
2. 实现乘法的指令段举例
MOV R0,R0,LSL #N
ADD R0,R0,R0,LSL #N
RSB R0,R0,R0,LSL #N
ADD R0,R0,R0,LSL #2
3. 跳转指令的应用
子程序调用:
ARM指令集
汇编语言介绍
指令、伪操作和宏指令组成。
伪操作不像机器指令那样在计算机运行期间由机器执行,它是在汇编程序对源程序汇编期间由汇编程序处理的。
宏是一段独立的程序代码。
伪操作:
符号定义伪操作
1. GBLA GBLL GBLS 声明全局变量
GBLA objectsize
Objectsize SETA oxff
SPACE objectsize
2. LCLA LCLL LCLS 声明局部变量
3. SETA SETL SETS 给变量赋值
4. RLIST 为通用寄存器列表定义名称 context RLIST{r0-r6,r8,r10-r12,r15};
5. CN 为协处理器的寄存器定义名称 power cn 6
6. CP 为协处理器定义名称 dmu cn 6
7. DN sn 为VFP的寄存器定义名称。Height dn 6 ;width sn 16;
8. FN 为FPA的浮点寄存器定义名称。
数据定义伪操作
1. LTORG 声明一个数据缓冲池的开始
2. MAP定义一个结构化的内存表的首地址
3. FIELD定义结构化的内存表的一个数据域。
4. SPACE 分配一块内存单元并用0初始化
5. DCB 分配一段字节的内存单元
6. DCD DCDU分配一段字的内存单元,并用指定的数据初始化。
7. DCDO分配一段字的内存单元,并将个单元的内容初始化成该单元相对于静态基值寄存器的偏移量。
8. DCFD及DCFDU 分配一段双字的内存单元,并用双精度的浮点数据初始化。
9. DCFS DCFSU分配一段字的内存单元,并用单精度的浮点数据初始化。
10. DCI分配一段字节的内存单元,用指定的数据初始化,指定内存单元中存放的是代码,而不是数据
11. DCQ DCQU分配一段双子的内存单元,并用64位的整数数据初始化。
12. DCW及DCWU分配一段半字的内存单元,并用指定的数据初始化。
13. DATA在代码段中使用数据,现已不再使用,仅用于保持向前兼容。
14.
汇编控制伪操作
1. IF ELSE ENDIF
2. WHILE WEND
3. MACRO MEND
4. MEXIT
框架描述伪操作
信息报告伪操作
1. ASSERT
2. INFO
3. OPT
4. TTL SUBT
其他伪操作
1. ALIGN
2. AREA
AREA Example,CODE,READONLY
;CODE
3. CODE16 CODE32
4. END
5. ENTRY
6. EQU
7. EXPORT GLOBAL
8. EXTERN
9. GET INCLUDE
10. IMORT
11. INCBIN
12. KEEP
13. NOFP
14. REQUIRE
15. REQUIRE8
16. RN
17. ROUT
存储器管理单元 MMU
Arm汇编语言伪指令
1. ADR
小返回的地址读取伪指令
ARM汇编语言的程序格式
汇编语言以段为单位组织源文件,段是相对独立的,具有特定的名称的不可分割的指令或者数据序列,段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据,一个ARM源程序至少需要一个代码段,大的程序可以包含几个代码段和数据段。ARM汇编语言程序经过汇编处理后生成一个可执行的影像文件 类似于WINDOWS系统的EXE。
包含 一个或多个代码段
零个或多个包含初始值的数据段
零个或多个不包含初始值的数据段。这些数据段被初始化为0,通常是可读写的。
AREA EXAMPLE1,CODE ,READONLY
ENTRY
Start
MOV R0,#10
MOV r1,#3
ADD r0,r0,r1
BL doadd
Doadd ADD r0,r0,r1
MOV pc,lr
END
汇编语言是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。
ARM存储系统
1. 系统中可能包含多种类型的存储器件,2K的片内ROM,5K的片内SRAM,片外均可以支持FLASH/SRAM也可以支持SDRAM
2. 通过使用CACHE及WRITEbuffer技术缩小处理器和存储系统速度差别,从而提高系统的整体性能。
3. 内存管理部件使用内存映射技术实现虚拟空间到物理空间的映射。
4. 引入存储保护机制,增强系统的安全性。
5. 引入一些机制保证将I/o操作映射成内存操作后,各种IO操作能够得到正确的结果。
芯片为例:
1. ARM中用于存储管理的系统控制协处理器CP15.
2. ARM中的存储管理部件MMU
3. ARM中的CACHE及WRITE BUFFER技术
4. 快速进程上下文切换技术。
5. 结构简单且功能更弱的存储管理机制,称为保护部件PU
Cp15寄存器
1. 访问类型
2. 各种方位操作对于寄存器的作用
3. 是否对应多个物理寄存器
4. 寄存器的具体作用
访问寄存器的指令
MCR和MRC指令只能在处理器模式是系统模式时执行,在用户模式下执行MCR MRC指令将会触发未定义指令的异常中断。
Mmu
工作:
1. 虚拟存储空间到物理尺寸空间的映射。
2. 存储器访问权限控制
3. 设置虚拟尺寸空间的缓冲特性。
Atpcs介绍汇编和C的调用