单片机ARM体系架构知识
在嵌入式领域中ARM可谓一家独大,所以我们要学习嵌入式开发,一定要了解ARM体系,只有在了解ARM体系的基础上才能理解ARM汇编(GNU汇编),很多同学对于ARM的了解还是一知半解,那今天我们就对它进行一探究竟。首先梳理一下ARM处理器相关名词
流水线:
底层架构设计的术语。 CPU先fetch(取指令),然后decode(译码),然后excute(执行),称为基于F D E的三步操作,CPU才能完成运算,这种三步完成的我们称为三级流水。
DSP:
数字信号处理,可以理解为一个单独的芯片或者协处理器来处理数字信号,比如说多媒体信号(因为对任务的独占性要求高,使用主CPU去处理的话,别的任务可能兼顾不过来)。
Jazelle:
arm中针对Java的编程模型,基本不会用到
半字:默认情况下int占四个字节,单个字节存储容易将一个数据破坏,所以有时候将四个字节一起存储,称为一个字,半字就代表两个字节一起操作
Thumb:
即Thumb指令,辅助arm处理的指令,因为32位的机器上arm指令占32位即四个字节,但有时候为了减少指令所占用的空间,就引入了thumb(小拇指)指令,是一个16位的精简指令,再后来推出的Thumb2是16位与32位混合的指令。
VFP:
Vector Floating-Point矢量浮点运算机制
QEMU:
实际上是一个软件模拟器,模拟不同的架构体系(例如x86 arm),调试bootloader或者裸机程序的时候可以使用
GNU工具链:
既可以开发内核也可以用来开发应用程序包含如下组件:
GNU make
GNU Compiler Collection (GCC)
GNU binutils linker, assembler and other object/library manipulation tools
GNU Debugger (GDB)
GNU build system (autotools)
GNU C Library (glibc or eglibc)
gnueabi的含义:
e表示 embedded嵌入式 a表示 application应用程序 b表示 binary二进制 i表示 interface接口全称嵌入式应用程序二进制接口,所以它的作用就是编译生成嵌入式的二进制程序。
UEFI:
Unified Extensible Firmware Interface统一可扩展的部件接口,相当于硬件与操作系统适配的标准,制定了操作系统可以扩展哪些硬件接口,但我们在做arm开发的时候可能硬件不是非常的规范,那么就可以使用这个标准模拟出符合标准的硬件,绕过它。
TrustZone:
安全架构
LPAE:
Large Physical Address Extension(大物理地址扩展)类似于虚拟化的技术 32位按理说最多只能寻址4G内存但使用之后,内存可以虚拟为特别大,一个T也没有关系(硬件层面)
big LITTLE:
大小处理器可能需要一个主处理器与协处理器。例如主处理器A15和协处理器A8当任务量要求不大的时候,切换到协处理器,会降低功耗,主要是针对手持设备,解决费电的问题,官方宣称使用这种方式比完全使用主处理器可以节约用电70%。
CPU组成:
ALU单元(逻辑运算单元)
控制器,可以用来切换CPU状态
寄存器(小型的存储器)
CPU内部总线最最主要的是前三个但是与我们写程序最最关心的就是CPU状态切换与寄存器
arm处理器模式
不同系列的处理器,处理器模式可能不一样例如arm7与arm9有7种处理器模式但是A系列的有9种处理器模式
处理器模式是指系统运行的时候如果出现崩溃的时候,切换CPU模式,来完成安全,效率,节能控制。因为系统崩溃的时候cpu的工作是没有意义的,所以这时候为了节能等其他方面的考虑,必须切换处理器模式。
下面以cotex A系列的九种处理器模式进行介绍,
一种非特权模式,8种特权模式
模式编码也会存放在指令(也就是32位中占据5位)的某个区域
USR用户模式,大部分程序运行所处的模式,普通模式
FIQ为fast interrupt,快速中断模式,
SVC为超级管理员模式,当开机的时候cpu权限最高,按下reset键的时候,系统就会停止所有工作,执行reset,权限非常大,一般不会随便使用。
MON是cotex A系列增加的,称为监视模式,相当于一个后台的服务ABT退出模式,通常用户程序发生异常的时候,cpu停止代码运行,然后退出。
HYP是超级的监视者,比超级管理员低一点,一般也不常用
SYS当系统自身异常的时候,有一个特点就是与用户模式寄存器共享模式基本都用大写的简写来表示
USR FIQ IRQ SVC MON ABT HYP UND SYS
因为内存不稳定以及访问速度慢等原因,所以在cpu中需要寄存器。
USR模式下寄存器
r1到r12都是通用寄存器
r13为sp,即stack pointer栈指针。存储栈地址,程序跳转的时候,保存程序跳转的目标地址标识
r14为lr,即link register链接寄存器。存储子程序的返回地址。
r15为pc,即program count程序计数器。
APSR/CPSR, PSR即program status register程序状态寄存器,A即apilication应用,C即current当前,所以全称为应用/当前程序状态寄存器。
SPSR中 S即saved已保存的,所以全称已保存的程序状态寄存器,更好听一点称为存储程序状态寄存器或者备份状态寄存器。
举例说明CPSR/APSR与SPSR寄存器:当前程序状态假设是normal状态那么这个状态先保存到CPSR,但之后突然发生异常(exception),这时候exception会存到CPSR寄存器,但处理完异常以后想要返回normal状态,这时候原来的normal状态已经被冲掉了,所以就需要SPSR寄存器对原来状态进行保存,保证可以还原到原来状态。正是因为我们的这种需求,所以处理器的 USR模式下没有SPSR因为 USR模式是正常的模式,所以不需要记录异常模式,或者其他状态模式,这样知识就联系起来了,理解起来也就更容易了。
页:
[1]