嵌入式学习——ARM学习(1)

1、存储器

高速缓存(Cache)通常分为三级:L1、L2 和 L3。它们的主要功能和特点如下:

这三级缓存的设计旨在通过层次化存储来优化数据访问速度和处理器性能。

1、L1 缓存:

  • 位置:直接集成在处理器核心内。
  • 大小:通常较小(一般为 16KB 到 128KB)。
  • 速度:速度最快,延迟最低。
  • 功能:存储最常用的数据和指令,以提高处理器的访问速度。

2、L2 缓存:

  • 位置:通常也在处理器内,但可能与核心共享。
  • 大小:比 L1 大(一般为 256KB 到 2MB)。
  • 速度:速度较 L1 慢,但仍然比主内存快。
  • 功能:存储不常用但仍然频繁访问的数据和指令,作为 L1 的补充

3、L3 缓存:

  • 位置:通常是多个核心共享的缓存,位于处理器芯片上。
  • 大小:更大(一般为 2MB 到 64MB 或更多)。
  • 速度:速度比 L2 慢,但仍然比主内存快。
  • 功能:存储较少访问的数据,减少对主内存的访问,提高多核处理器的效率。

2、指令

2.1机器指令

机器指令又称机器码,在运算器内部存在各种运算电路,当处理器从内存中获取一条机器指令,就可以按照指令让运算器内部的指定的运算电路进行运算

2.2汇编指令

由于机器指令对人类不友好,每一条汇编指令都可以理解为一条机器指令的标识,当我们编写一条汇编指令时,相当于对应一条机器指令,就可以让运算器进行对应的运算

2.3指令集

指令集就是指令的集合。当设计一个处理器内核是,需要提前设计好内核中需要的运算器的运算电路的种类和数量,每一个运算电路都对应一条指令,所以设计内核之前先将每一条运算电路对应的指令设计出来,组成一个指令集,用于作为内核设计的框架。

2.4一条指令的执行过程分析

1)取指阶段:控制器将要执行的资料地址发送给内存,内存将指令返回给控制器

2)译码阶段:对取到的指令进行译码操作,分析当前指令的意义,通知运算器进行对应的运算

3)执行阶段:指令译码完成后,运算器进行对应的运算操作,将运算的结果进行保存

3、精简指令集和复杂指令集

3.1复杂指令集

CISC:(Complex Instruction Set Computer)侧重于硬件执行指令的功能性,CISC指令集处理器的硬件结构复杂,但是功能强大。

CISC指令复杂,指令长度、周期都不固定,在处理能力上有优势,一般相对应的,功能、体积成本也会更高

指令长度:一条指令占用的存储空间大小

指令的周期:执行一条指令的时间

3.2精简指令集

RISC:Reduced Instruction Set Computer

RISC结构简单,选择了使用频率高的简单指令,指令长度固定,大小固定,多为单周期指令。

在功耗、体积、价格等方面有很大优势,多用于嵌入式领域

3.3其他架构

ARM架构:当前主流的精简指令集架构

RISC-V架构:开源的精简指令集架构

MIPS架构:被中国龙芯收购

4、ARM内核

ARM1-ARMV6 已经不使用了

ARMV7: 32位处理器架构,支持32位指令集

ARMV8: 64位处理器架构,支持64位指令集,同时向下兼容32位指令集

ARMv9: 64位处理器架构,支持64位指令集

//32位处理器表示一条机器指令最大能进行32位的数据运算

//32位指令集表示指令集中的每一条指令的长度是32位

内核 架构

cortex-a7 ARMV7

cortex-a53 ARMV8

cortex-a55 ARMV8

cortex-a77 ARMV8

cortex-a78 ARMV8

cortex-a710 ARMV9

cortex-a720 ARMV9

4.1SOC

soc(system on chlip):片上系统、若干个内核组成了一个处理器,在处理器外部集成各个外设,通过总线完成连接,组成一个微型计算机系统、

MCU:微控制器

MPU:微处理器

4.2 Cortex-A系列

主要用于高性能应用,如智能手机、平板电脑、智能电视和嵌入式系统。适合需要运行复杂操作系统和应用程序的场景。

4.3 Cortex-R系列

专为实时应用设计,常用于汽车、工业控制、医疗设备和其他需要高可靠性和实时性能的领域。

4.4 Cortex-M系列

主要用于低功耗、低成本的嵌入式系统,如物联网设备、传感器、家电和消费电子产品。

4.5 SecurCore系列

SecurCore系列用于对安全性能要求比较高的场景

4.6 Cortex-X系列

cortex-X系列是ARM在2016年新推出的一种内核系列,这系列的内核在云计算、边缘计算方面性能比较优越

5、ARM数据约定

A7采用的是32位架构

ARM约定:

Byte 8 bits.

Halfword 16 bits.

Word 32 bits.

Doubleword 64 bits.

大部分ARM core 提供:

ARM 指令集(32-bit)

Thumb 指令集(16-bit )

6.ARM工作模式

cortex-A特有的模式:

1.monitor模式:执行安全监控代码时进入的模式

2.HYP模式:虚拟化支持模式

7.ARM V-7架构寄存器

8.ARM V-7架构下的一些特殊寄存器

8.1 R15寄存器 PC

R15寄存器又被称为(PC:program counter)程序计数器

PC寄存器保存即将被从内存中取出来的指令的地址

当PC保存的指令地址被处理器发送给内存之后PC的值会自动向下加一条指令的大小,

这也是程序可以继续向下顺序执行的原因

实现程序跳转的本质就是修改PC的值

一条指令的执行过程:

取指:将要执行的指令从内存中取出来

译码:对取出来的指令进行分析和译码操作

执行:将译码之后的指令交给运算器进行运算处理

8.2 R14寄存器 LR

R14又被称为(LR:link register)链接寄存器

LR寄存器的作用是当执行指令时进行程序跳转时,LR会保存跳转指令下一条指令的地址,方便程序返回

8.3 R13寄存器 SP

R13寄存器又被称为(SP:stack pointer)栈指针寄存器

SP寄存器保存栈内存栈顶的地址,对一些临时数据进行压栈出栈操作时需要使用SP的值来找到栈区位置

8.4 CPSR/SPSR

8.4.1 CPSR/SPSR概念

CPSR寄存器又叫(current program status register)当前程序状态寄存器

这个寄存器的作用是保存当前程序的工作状态

工作状态中包含程序的工作模式、中断禁止位以及程序的运算结果条件位等信息

SPSR寄存器又叫(saved program status register)被保存的程序状态寄存器

这个寄存器当处理器因为各种异常切换到异常模式工作时会将CPSR值提前保存到SPSR中,处理器处理完异常之后会将SPSR的值

赋值给CPSR,用于恢复处理器的工作状态

8.4.2 CPSR/SPSR 32位 数据含义

  1. N[31] : 指令的运行结果为负数时,N位被自动置1,否则为0.

eg : 100 - 200

  1. Z[30] : 指令的运行结果为零时,Z位被自动置1,否则为0.

eg:100-100

  1. C[29] : 加法:加法运算如果产生进位,C位被自动置1,否则为0.

32位指令:低32位向高32位进位

ex:两个32位数运算得到超过32位的结果

0XFFFFFFFE+0x3

减法:减法运算如果产生借位,C位被自动清0,否则位1.

32位指令:低32位向高32位借位

1-0XFFFFFFFE

  1. V[28] : 符号位发送变化,V位被自动置1,否则清0.

  2. I[7] : IRQ中断屏蔽位

I = 0 : 不屏蔽IRQ中断

I = 1 : 屏蔽IRQ中断

  1. F[6] : FIQ中断屏蔽位

F = 0 : 不屏蔽FIQ中断

F = 1 : 屏蔽FIQ中断

  1. T[5] : 状态位

T = 0 : 表示ARM状态,执行的是ARM指令集

T = 1 : 表示Thumb状态,执行的是Thumb指令集

ARM指令集 : 一条汇编指令编译生成32位的机器码

thumb指令集:一条汇编指令编译生成16位的机器码

ARM指令集的代码的密度低,而thumb指令记得代码密度高。

ARM指令集的功能性要高于Thumb指令集。

  1. M[4:0] : 模式位

10000 User mode;

10001 FIQ mode;

10010 IRQ

10011 SVC mode;

10111 Abort mode;

11011 Undfined mode;

11111 System mode;

10110 Monitor mode;

相关推荐
Chef_Chen4 小时前
从0开始学习R语言--Day18--分类变量关联性检验
学习
键盘敲没电4 小时前
【IOS】GCD学习
学习·ios·objective-c·xcode
海的诗篇_5 小时前
前端开发面试题总结-JavaScript篇(一)
开发语言·前端·javascript·学习·面试
AgilityBaby5 小时前
UE5 2D角色PaperZD插件动画状态机学习笔记
笔记·学习·ue5
AgilityBaby5 小时前
UE5 创建2D角色帧动画学习笔记
笔记·学习·ue5
武昌库里写JAVA6 小时前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
一弓虽7 小时前
git 学习
git·学习
Moonnnn.9 小时前
【单片机期末】串行口循环缓冲区发送
笔记·单片机·嵌入式硬件·学习
viperrrrrrrrrr710 小时前
大数据学习(131)-Hive数据分析函数总结
大数据·hive·学习
fen_fen10 小时前
学习笔记(26):线性代数-张量的降维求和,简单示例
笔记·学习·算法