ARM相关概念

ARM课程大纲

ARM相关的基本概念

机器码

计算机能够识别由1和0组成的编码格式
汇编:将汇编文件转换为二进制文件(.bin/.elf)

汇编指令

是一条具备特殊功能的指令
编译:生成汇编文件
int a = 10;      ------>    mov r0 #10    
                    编译 

汇编指令集

由多条不同功能的汇编指令组成的集和

架构

由不同的汇编指令集设计出来的架构

x86汇编指令集设计出x86-64架构
arm汇编指令集设计出arm架构

arm v1-v6架构     目前已经淘汰
arm v7架构:只支持32位ARM指令集的架构   ----> stm32mp157a
arm v8架构:支持64位ARM指令集的架构,并且向下兼容arm v7架构
arm v9架构:最新的架构,未来十年的发展趋势


四大主流芯片架构:
    x86架构、       ARM架构、       RISC-V架构、       Mips架构
     inter         苹果、华为       nivida、三星       龙芯中科(龙架构)
     不开源           不开源           开源          、

主流的芯片厂商:
      ST、NXP、海思(麒麟)、高通、MTK(联发科)、TI(德州仪器)、SAMSUNG(Exynos猎户座)
    新唐科技、展瑞、瑞芯微、中芯国际、阿里(平头哥)、小米(澎湃)、全志
    兆易创新(GD32)、龙芯中科(电脑cpu)

内核

基于不同的架构设计出来不同的内核

ARM架构 ---> Cortex-A核     Cortex-M核

CPU:中央处理器,可以叫MPU MCU SOC
MCU:微控制器,一般指的是裸机,无法运行像Linux这种大型的操作系统的,但是它可以运行os实时操作系统(FreeRTOS、lite-os、RT Thread)
MPU:微处理器,一战指的是可以跑大型的操作系统的处理器
SOC:片上系统

ARM公司基于ARM指令集设计出ARM架构,ARM公司再基于ARM架构设计出了Cortex-A7内核
ARM将Cortex-A7内核授权给了ST(意法半导体)公司,ST公司基于Cortex-A7内核研发出了STM32MP157AAA芯片
ST公司将这个芯片卖给了华清远见,华清远见研发部基于STM32MP157A芯片添加很多的外设
最后构成了开发板

精简指令集和复杂指令集的区别

精简指令集 - RISC

汇编指令集相对于来说比较简单,易阅读
特点:指令的宽度和指令的周期固定
指令宽度:一条指令所占的空间,arm-v7架构的指令占32位(4个字节)的空间
指令周期:一条指令执行需要的时间

精简指令集:ARM架构、RISC-V、Mips架构、PowerPC架构

复杂指令集

特点:指令的周期和指令的宽度不固定

复杂指令集:x86架构

验证

复杂指令集

精简指令集

ARM处理器具备默认的汇编指令集 -> Thumb指令
Thumb指令集是ARM指令集的子集(儿子)
Thumb指令集每条指令占16位,及2字节的空间
ARM指令集每条指令占32位,及4字节的空间

ARM处理器的工作模式

Cortex-M核的工作模式

两种模式:线程模式、异常模式

Cortex-A核的工作模式

ARM v7架构的寄存器组织

存储类型

在c语言中我们学习过的6种存储类型?

auto static const extern volatile register
register:访问速度快,不允许取地址
volatile:防止编译器对代码进行优化,直接从内存中取最新的值

核内寄存器:不存在地址,只允许用编号访问,R0-R15 CPSR SPSR
定义变量的过程:存储类型+数据类型+变量名

寄存器位置

寄存器是一块具备特殊功能的存储空间

arm v7架构的寄存器组织

1、每个小方格都是一个寄存器,对于ARM V7架构而言,每个寄存器的大小是32位,4个字节
2、在user、sys模式下存在17个可控制的寄存器
3、在fiq、irq、abt、udf、svc、mon模式下存在18个可控制的寄存器
4、在hyp模式下存在19个可控制的寄存器
5、核内寄存器不存在地址,只能通过编号进行访问,编号由R0-R15, CPSR, SPSR

白色底的寄存器代表的是共有的寄存器,蓝色底的寄存器代表的是私有的寄存器
在异常模式下,如果存在私有的寄存器,只能访问私有的寄存器,不允许访问共有的寄存器
如果在工作模式下,没有私有的寄存器,就访问共有的寄存器
一共有43个可控制的寄存器

特殊功能寄存器( 重点

R13寄存器

R13寄存器   ----> sp寄存器 ---->  the stack pointer  ---->  栈指针寄存器
栈指针寄存器的作用:这个寄存器中存放的是栈空间的一块地址,用于压栈保存现场和出栈恢复现场
不同场景下栈的作用
内存划分中的栈:用于存储数据,存放的是局部变量、函数参数.....
数据结构中的栈:用于存储数据,一种特殊的数据结构
arm裸机开发中的栈:用于存储数据,压栈保存现场、出栈恢复现场

栈的特点:在不同的场景下,栈都用于存储数据,并且遵循FILO(先入后出)的特性

R14寄存器

R14寄存器  ---> lr寄存器    ---->   the linking register   ---->  链接寄存器
作用:用于保存函数的返回地址

R15寄存器

R15寄存器 ---->  pc寄存器  ------->  the program counter ------->  程序计数寄存器
作用:用于保存下一条取值指令的地址

CPSR寄存器

CPSR寄存器   ---->  the currented program statue register -----> 当前程序状态寄存器
作用:用于保存当前程序状态的寄存器

SPSR寄存器

SPSR寄存器   ---->  the saved program statue register   -----> 备份程序状态寄存器
作用:用于备份当前的程序状态的寄存器

CPSR寄存器中位的作用

N[31]:负数标志位
    当指令执行结果为负数时,N位置1,否则清0(可以用于比较大小)
Z[30]:零标志位
    当指令执行结果为0时,Z位置1,否则清0(用于判断是否相等)
C[29]:进位/借位标志位
    加法:低32位向高32位进位时,C位置1,否则清0
    减法:高32位向低32位借位时,C位清0,否则置1
V[28]:符号标志位
    当符号位发生变化时,V位置1,否则清0

I[7]:IRQ屏蔽位
    i = 1时,屏蔽IRQ(普通中断)
    i = 0时,不屏蔽IRQ
F[6]:FIQ屏蔽位
    f = 1时,屏蔽FIQ(快速中断)
    f = 0时,不屏蔽FIQ
T[5]:状态位
    t = 0时,arm状态,执行ARM指令集(32位)
    t = 1时,thumb状态,执行thumb指令(16位)
    Cortex-A核一般使用的是ARM指令集,Cortex-M核一般使用的是Thumb指令集
M[4:0]:模式位
    10000 User mode;    
    10001 FIQ mode;         
    10011 SVC mode;
    10111 Abort mode;  
    11011 Undef mode;  
    11111 System mode;     
    10110 Monitor mode;   
    10010 IRQ mode; 
相关推荐
韦德斯21 小时前
嵌入式Linux的RTC读写操作应用
linux·运维·c语言·arm开发·实时音视频
byte轻骑兵1 天前
嵌入式 ARM Linux 系统构成全解:从硬件到应用层层剖析
linux·arm开发·arm·嵌入式开发
思尔芯S2C1 天前
面向未来的智能视觉参考设计与汽车架构,思尔芯提供基于Arm技术的创新方案
arm开发·架构·汽车·iot·fpga原型验证·prototyping·智慧视觉
Eternal-Student2 天前
【docker了解】如何将x86镜像转换为适用于Jetson的ARM镜像
arm开发·docker·容器
不怕犯错,就怕不做2 天前
修复kernel编译栈帧大小异常问题error: the frame size of 1928 bytes is larger than 1024 bytes
linux·arm开发·驱动开发
憧憬一下3 天前
UART硬件介绍
arm开发·嵌入式硬件·串口·嵌入式·linux驱动开发
Petal9909124 天前
UEFI学习笔记(十八):ARM电源管理之PSCI和SCMI概述
arm开发·笔记·学习·uefi
古月居GYH4 天前
一文了解ARM内部架构
arm开发·架构
白书宇4 天前
13.100ASK_T113-PRO RTC实验
linux·arm开发·驱动开发·嵌入式硬件·物联网·硬件工程
简简单单一天吃六顿5 天前
rootfs根文件系统在Linux下制作动态库
linux·服务器·arm开发·iot