目录
认识 ARM
ARM 发展历史
指令集
ARM 公司产品分类
ARM 体系结构
数据类型约定
处理器的 32 位和 64 位含义
指令集
ARM 处理器的工作模式
CPU (内核) 组成
寄存器
时钟
认识 ARM
-  
ARM 可以指:
- 一家公司。
 - 一种技术。
 - 一系列处理器。
 
 -  
架构:ARM 架构包括:
- arm-v4
 - arm-v5
 - arm-v6
 - arm-v7 (32 位)
 - arm-v8 (64 位)
 
这些架构定义了处理器所支持的指令集。
 -  
内核:
- Cortex-A 系列(例如 A9, A53, A73, A77)
 - ARM 将其内核授权给芯片制造商,后者在此基础上添加额外的功能和外设,从而制造出 SoC(片上系统)。
 
 -  
SoC (System On Chip):
- 示例包括 S5P6818、Snapdragon 855(Qualcomm)、Kirin 990(Hisilicon)等。
 
 -  
S5P6818:
- S5P6818 是一个具体的 SoC 示例,但具体细节需要查阅资料来确认。
 
 

ARM 发展历史
- 1978年:CPU 公司(Cambridge Processing Unit,剑桥处理单元)成立。
 - 1979年:Acorn Computer 成立,从事个人计算机组装业务。
 - 1985年:开发出 32 位、8 MHz 的 RISC 架构处理器,该芯片被称为 ARM(Acorn RISC Machine)。
 - 1990年: 
  
- 苹果公司出资 150 万英镑,VLSI 技术公司出资 25 万英镑。
 - 12 名工程师加上技术专利共同创立 ARM 公司(Advanced RISC Machines)。
 - ARM 公司本身不直接生产芯片,而是授权其技术并提供解决方案。
 
 - 2016年:日本软银集团收购 ARM。
 
指令集
- 精简指令集 (RISC):选择了一些较为简单且使用频率高的指令。 
  
- 指令宽度固定,多为单周期指令。
 - 例如,如果有一个加法运算器,则没有乘法运算器,计算 
3 * 3就需要通过3 + 3 + 3来实现。 
 - 复杂指令集 (CISC):注重指令的功能性,指令周期和宽度不固定。
 

eg精简:可以编译后,用反汇编查看代码指令。
编译源代码:
arm-linux-gnueabi-gcc 1.c -o a.out 
  检查文件属性:
file a.out 
  反汇编 ELF 文件:
arm-linux-gnueabi-objdump -D a.out > a.dis 
 ARM 公司产品分类
- Cortex-A:针对高端的基于虚拟内存的操作系统和应用程序设计。 
  
- 高通、联发科、海思、三星、飞思卡尔等公司的产品。
 
 - Cortex-R:针对实时系统的高性能解决方案。 
  
- 例如汽车电子、照相机等。
 
 - Cortex-M:针对成本和功耗敏感的 MCU 和终端应用。 
  
- 通常不运行操作系统,或者运行 RTOS 如 FreeRTOS、μC/OS-II、LiteOS 等。
 - 意法半导体 (ST) 的 STM32 系列等。
 
 
ARM 体系结构
- ARM-v8 (A):Cortex-A53 (8 核) → S5P6818 → 主频 1.4 GHz
 
数据类型约定
- ARM-v7 架构:32 位处理器 
  
- char:8 位
 - halfword:16 位
 - word:32 位
 - doubleword:64 位 (Cortex-A)
 
 - ARM-v8 架构:64 位处理器 
  
- 向下兼容 32 位
 - char:8 位
 - halfword:16 位
 - word:32 位
 - doubleword:64 位 (Cortex-A)
 - quadword:128 位 (ARM-v8)
 
 

处理器的 32 位和 64 位含义
- 32 位:一条指令可以处理 32 位的数据。
 - 64 位:一条指令可以处理 64 位的数据。
 
指令集
- ARM-v7 架构: 
  
- ARM 指令集 (32 位)
 - Thumb 指令集 (16 位)
 
 - ARM-v8 架构: 
  
- 向下兼容 ARM-v7 架构
 - ARM 指令集:A64, A32
 - Thumb 指令集:T32, T16
 - 不论是 A64 还是 A32,每条指令都占用 32 位空间。
 - 不论是 T32 还是 T16,每条指令都占用 16 位空间。
 
 
ARM 处理器的工作模式
-  
ARM7 至 ARM11 有七种基本工作模式:
- User:非特权模式,大多数任务在此模式下执行。
 - FIQ:当发生高优先级中断时进入该模式。
 - IRQ:当发生低优先级中断时进入该模式。
 
 
FIQ和IRQ打断当前正在做的事去做其他的事情,做了再回来继续做自己的事情。鼠标键盘等都是这样实现的。(Linux内核会有中断,驱动写中断驱动代码)

-  
  
- Supervisor (SVC):当复位或软中断指令执行时进入该模式。
 
 
(任务的切换会切入这个模式,权限最高的模式,刚启动的时候在这个模式下,权限高,可以做一些核心的操作。进行系统调用的时候会切换这个模式。)
-  
  
- Abort:当指令存取异常时进入该模式。
 - Undef:当执行未定义指令时进入该模式。
 - System:具有与 User 模式相同寄存器集的特权模式。
 
 
保证不同任务每次调用同一个函数都是从头开始。
-  
Cortex-A 系列特有的模式:
- Monitor:为了安全性而扩展出来的用于执行安全监控代码的模式;也是一种特权模式。
 
 
特定的模式拥有特定的权限,执行特定的代码,完成特定的功能

CPU (内核) 组成
- 运算器:执行加法等运算。
 - 控制器:控制指令执行流程。
 - 寄存器:存储机器码,由 ARM 公司集成到 CPU 内部。 
  
- A32:每个寄存器可以存储一个 32 位数据。
 - A64:每个寄存器可以存储一个 64 位数据。
 
 

寄存器
-  
ARM7, ARM9, ARM11 有 37 个 32 位寄存器:
- 1 个作为 PC (program counter)。
 - 1 个作为 CPSR (current program status register)。
 - 5 个作为 SPSR (saved program status registers)。
 - 30 个通用寄存器。
 
 -  
Cortex-A 系列 多出 3 个寄存器,共有 40 个 32 位寄存器:
- Monitor 模式的 r13_mon, r14_mon, spsr_mon。
 
 -  
R0-R15, CPSR, SPSR:由 ARM 公司提供的寄存器,每个都是 32 位宽。
- 这些寄存器没有物理地址,只有唯一的编号,通过编号可以访问相应的地址空间。
 
 -  
R13:栈指针寄存器 (stack pointer, sp):存放栈顶地址。
 

-  
R14:链接寄存器 (link register, lr):函数调用时保存返回地址。
 

-  
R15:程序计数寄存器 (program counter, pc):存放当前取指指令的地址。
 

-  
CPSR:当前程序状态寄存器 (current program status register, cpsr):存储当前程序运行状态。
 

-  
SPSR:保存程序状态的寄存器 (saved program status register, spsr):用于保存 CPSR。
 

时钟
- 负责发出 CPU 开始计时的时钟信号。
 

















![[翻译] Asset Administration Shells](https://i-blog.csdnimg.cn/direct/41ce485b4c6d41ffa720e73b4d5ec559.png)

