ARM是什么?
arm即可以是一家芯片设计厂商的名字,也可以代表一类微处理器的通称,还可以表示为一种技术的名称
1、ARM是一个公司:Advanced RISC Machine
2、ARM内核
ARM公司
1985年4月26日,第一个ARM原型在英国剑桥的Acorn计算机有限公司诞生,由美国加州SanJoseVLSI技术公司制造。20世纪80年代后期,ARM很快开发成Acorn的台式机产品,形成英国的计算机教育基础。990年成立了Advanced RISC Machines Limited(后来简称为ARM Limited,ARM公司)。20世纪90年代,ARM 32位嵌入式RISC(Reduced lnstruction Set Computer)处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权。
ARM内核
对于任何一款ARM芯片,有两个部分,一个是ARM内核,一个是外设ARM内核:包含:寄存器组、指令集、总线、存储映射规则、中断规则和调试组件等。
外设:定时器、iic、uart等cpu直接的外部模块,由芯片厂商自己设计与ARM内核衔接
ARM体系/ARM架构:由ARM公司设计的ARM内核的结构,内核中的部件如何协调工作,执行程序。即arm内核的设计方式就叫做架构。
ARM由ARM指令集架构、ARM工作模式、ARM寄存器等构成
ARM指令集架构
指令集是arm体系结构(处理器结构设计)中最重要的一部分,对于32位处理器cpu,cpu获取到32位的内容,这32位的01代表什么作用,有什么意义,即32位不同的01序列,不同的值代表不同的机器指令(机器要执行什么),如果再arm体系架构中有指令集,在cpu内部知道每串01代表什么,cpu硬件能够完美解析并执行指令,如寻址、异常处理。
指令(机器指令):用二进制表示一串机器码,机器码表示一个特定的动作
arm指令:有arm公司针对armcpu(arm体系架构)设计的指令
指令集:指令的集合
RISC:精简指令集,ARM架构使用精简指令集
CISC:复杂指令集
ARM指令--:根据ARM汇编了解
架构 处理器
ARMV1:ARM1
ARMV2:ARM2、ARM3
ARMV3:ARM6、ARM600、ARM610、ARM7、ARM700、ARM710
ARMV4:StrongARM、ARM8、ARM810、ARM9
ARMV5:ARM9E、ARM10E
ARMV6:ARM11从ARMV7架构开始,以Cortex命名,分为三个系列:A、R、M
Cortex-A 高端系列
Cortex-R 实时系列
Cortex-M 控制系列
Cortex-SC 安全系列
ARMV7:Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9
ARMV8:Cortex-A53、Cortex-A73、Cortex-A78----ARMV8.2
ARM架构工作模式
在ARMV7之前,AARM的工作模式只有七种:
用户模式(user):用户程序的工作模式,运行在操作系统的用户态,不能操作其他硬件资源,只能执行处理自己的数据,也不能切换到其他模式,要切换到其他模式,只能产生中断或其他异常
系统模式(system):系统模式是特权模式,不受用户模式的限制。使用同一套寄存器。操作系统通过该模式使用户访问受限的资源
一般中断模式(IRQ): 用于处理一般的中断请求。一般在硬件产生中断信号后会自动进入该模式,是一种特权模式,可以自由访问系统硬件资源
快速中断模式(FIQ):用于处理时间要求比较紧急的中断请求。一般在高速数据传输及通道种
管理模式(spuer visor):一般CPU上电之后会自动进入该模式,该模式主要完成系统的初始化,软中断也会进入该模式。如果在用户模式下可以通过软中断进入该模式,请求访问硬件资源未定义模式(undefined):未定义指令中止。CPU在指令的译码阶段不能识别该指令操作时,则会进入该模式
终止模式非法访问(abort):当用户非法访问内存,没有权限读写内存地址时,会进入该模式
在Cortex系列之后,有了第8种工作模式
安全模式(monitor):为了安全而扩展出来的用于执行安全监控代码的模式
只要产生对应的异常就可以切换到对应的模式种
ARM寄存器
寄存器:是一种特殊的存储器,在CPU内部,可以用来存储数据,但是存储的内容有一定作用,对于Cortex A 有40个寄存器,每个寄存器有32bit。对于寄存器是没有地址的,用编号表示。
对CPU内部的存储单元存在单位:
word:字----32bit halfword:半字---16bit Byte:字节-----8bit
1、通用寄存器(如下图)
通用存储寄存器: R0-R12:存储各种数据
分组寄存器:R13、R14 还是FIQ:R8-R12 针对于FIQ
程序计数器(指令计数器/程序状态寄存器):R15(PC)
特殊功能的寄存器:
R13(堆栈指针寄存器SP):存储栈的栈顶位置地址,与内存相关
R14(链接寄存器LR):当程序跳转、函数调用、产生异常
R15(程序计数器PC):当前执行的指令的下一条指令的地址存储程序下一条要执行的指令地址,会自动由硬件修改,也可以由我们操作改变
ARM指令:大小为4个字节,所以指令偏移大小为4,指令地址也是4的整数倍,所以程序计数器最低2位无效(低2位表示的地址是0-3)
Thumb指令:大小为2个字节,所以程序计数器最低位无效
2、程序状态寄存器CPSR、SPSR
CPSR:程序状态寄存器,存储当前cpu执行程序时的工作状态,cpu在工作时只会有一个工作状态,所以所有的工作模式都是同一个CPSR所有的运行工作模式都可以访问到CPSR
SPSR:备份程序状态寄存器,当产生异常,切换对应的工作模式,SPSR用于保存当前的CPSR的值,然后改变CPSR(修改工作状态),异常结束时,回到之前的工作模式,就把SPSR的值恢复到CPSR。
看一个ARM处理能力怎么样,还关于它的指令流水线。
流水线:让CPU内部的多个功能部件并行工作来缩短程序的执行时间,提高处理器的效率,所以处理器架构设计时作为最重要的技术进行使用。
三级流水线: 1、取址 2、译码 3、执行
· 随着ARM架构的升级,流水线也在增加,但是ARM公司没有提供对应的技术,但是不管是几级流水线都可以按照三级流水线的操作方式来思考
pc寄存器存储预取址指令的地址,即pc存储取指的地址
对于流水线而言,当执行某些指令(跳转、中断、异常)打断当前流水线
异常 就是在cpu执行程序(指令),有可能会出现意外情况,需要去解决对应的意外情况。
1、异常源
在ARM体系结构中设计了7种异常源,ARM架构就需要对这些异常源进行处理,只要执行程序指令时产生对应的异常就会执行对应的异常处理。
只要发生对应的异常时,处理器就会把PC寄存器设置为特定的存储器地址。这个地址被放在称为向量表的范围内,向量表内就是一些跳转操作。即CPU设计了一个向量表来表示每一种异常的处理方式,只要产生异常,pc寄存器就会被设置为向量表中的对应异常的地址,执行异常向量表中的对应指令(跳转执行,执行对应的处理办法)
异常源:
Reset 上电就执行
undef 当流水线中某个非法指令被执行(undefined)
swi 当程序执行软中断指令时(supervisor svc)
prefetch 当指令从内存进行存取指令失败时(abort)
data 当指令从内存存取数据失败时(abort)
irq 一般中断
fiq 快速中断
2、异常产生时发生的硬件操作
1、保存执行状态
把cpsr寄存器的内容复制到对应产生异常的模式下的spsr2、模式切换
a、由硬件自动把cpsr中的模式[4:0]设置为与异常相对应的值
b、处理器设置为ARM状态,执行ARM指令
c、禁止中断,如进入FIQ模式自动把IRQ中断禁止3、保存返回地址
把当前的下一条指令的地址(PC寄存器)保存到 lr_mode 寄存器(异常模式下)4、跳入异常向量表
强制设置pc寄存器为对应异常向量地址
3、异常向量表
异常向量表是一段特定的内存空间,每一种ARM异常都在异常向量中设定出来,对应一个字长空间(4Byte-32bit),刚好就是一条ARM指令大小。当产生异常时,cpu会强制把pc的值设置为异常对应的固定内存地址.
注意:
当产生异常后硬件能够完成的操作就只是跳转到异常向量表(pc赋值为异常向量地址),剩下的异常处理都是程序员去完成,通常都是在异常向量中写一条跳转指令,表示产生异常应该怎么做,跳转到对应的地址(异常处理的地址)执行,要实现异常向量表,完成每种异常的设定.
4、异常处理(自己实现)
1、保存执行现场(进入异常之前的寄存器的值)
把寄存器的值保存到对应异常模式下的栈(内存)(入栈),sp寄存器存栈地址2、执行对应的异常操作
3、恢复之前现场
当异常处理完,要返回异常之前的状态,继续执行
a、恢复之前的寄存器数据(从sp对应的栈出栈存储到对应寄存器)
b、恢复程序运行是的状态cpsr
c、通过异常进入时保存的返回地址(lr寄存器),可以返回到被打断的程序继续执行