IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM基础知识汇总 -> 正文阅读

[嵌入式]ARM基础知识汇总

ARM基础知识汇总

一.相关概念

1.机器码:计算机可以识别的0或者1的组合,计算机只认识高低电平(1代表高电平 0代表低电平)

2.汇编指令:编译器可以将汇编指令生成一个32位的机器码,执行机器码可以完成特定的功能

3.汇编指令集:很多条具有不同功能的汇编指令的集合

4.ARM架构:ARM公司根据不同的ARM汇编指令集对其进行的版本的命名

? ARM-v1 ~ARM-v6架构 目前已经被淘汰

? ARM-v7架构:32位的架构,支持ARM-32位的汇编指令集

? ARM-v8架构:64位的架构,支持ARM-64位的汇编指令集,向下兼容ARM-v7架构

5.ARM内核:ARM公司根据不同的ARM架构设计的不同需求的ARM内核

? 部分ARM内核:

? 在这里插入图片描述

6.处理器:ARM公司不生产芯片,只将内核授权给第三方的芯片厂家,厂家基于ARM内核,添加外设资源从而设计出不同ARM内核的处理

image-20220919102030640

7.CPU:(central processing unit)中央处理单元

8.SOC:(System On chip)片上系统 如果一个芯片使用内核外加很多外设封装到一个芯片之上,这样的处理器统称为SOC

9.MPU:(Micro processor Unit)微处理单元, 可以运行操作系统(比如linux系统,HarmonyOS) 也可以叫CPU,SOC

10.MCU:(Micro Control Unit) 微控制单元 运行的裸机程序,一般指单片机

二.ARM公司产品分布

2.1 Cortex-A/Cortex-X系列

	高端的系列,可以运行操作系统,比如Android系统,鸿蒙OS, linux系统,

	主要应用于高端的电子产品,价格一般比较昂贵。

2.2 Cortex-R系列

主要针对于对实时性要求比较高的场合,使用频率不高

2.3 Cortex-M系列

主要用于低端的电子产品,成本一般比较低,

	cortex-M系列的处理器主要运行的裸机程序,M系列属于单片机,

	cortex-M系列的处理器也可以运行实时性的操作系统,比如FreeRTOS  LiteOS uCos-II  RT-thread

三.RISC和CISC

3.1 RISC

RISC (Reduced Instruction Set Computer):精简指令集

? 精简指令集是在复杂指令集中选取一些相对比较简单,使用频率较高的指令作为精简指令。

? 精简指令集的指令的周期和指令的宽度是固定的。

指令周期:执行1条指令所需要的时间,RISC大多数属于单周期的指令

? CPU的主频(F) = 1 / T(周期)

指令宽度:指令被编译生成机器码所占用的内存空间是固定的

ARM-v7.V8.V9架构汇编指令编译生成的机器码占32bit位(4字节)的内存空间。

arm-linux-gnueabihf-gcc -marm hello.c -o hello  

# arm-linux-gnueabihf-gcc:交叉编译器,将源文件编译生成ARM架构的可执行程序

arm-linux-gnueabihf-objdump -D hello > hello.dis

# arm-linux-gnueabihf-objdump:交叉编译器中的反汇编的命令,将可执行程序(.elf)反汇编生成反汇编文件(.dis)
 241 000103d0 <main>:
 
 	   内存地址  机器码       反汇编代码(由机器码反汇编得到汇编代码)
 242    103d0:   e92d4800    push    {fp, lr}
 243    103d4:   e28db004    add fp, sp, #4
 244    103d8:   e24dd008    sub sp, sp, #8
 245    103dc:   e50b0008    str r0, [fp, #-8]
 246    103e0:   e50b100c    str r1, [fp, #-12]
 247    103e4:   e300044c    movw    r0, #1100   ; 0x44c
 248    103e8:   e3400001    movt    r0, #1                                        
 249    103ec:   ebffffbb    bl  102e0 <puts@plt>
 250    103f0:   e3a03000    mov r3, #0
 251    103f4:   e1a00003    mov r0, r3
 252    103f8:   e24bd004    sub sp, fp, #4
 253    103fc:   e8bd8800    pop {fp, pc}

# 全部都占4字节  指令的宽度确定

3.2 CISC

CISC(Complex Instruction Set Computing) :复杂指令集

复杂指令集更加注重指令的功能性,指令的周期和指令的宽度不固定。

复杂指令集主要应用在电脑CPU上,intel AMD

gcc hello.c -o hello

linux@ubuntu:~/DC22061$ objdump -D hello > hello.dis
# objdump : 反汇编的命令,将可执行程序(.elf)反汇编生成反汇编文件(.dis)
418 0000000000001149 <main>:  
	   内存地址  机器码                 反汇编代码(由机器码反汇编得到汇编代码)
419     1149:   f3 0f 1e fa             endbr64 
420     114d:   55                      push   %rbp
421     114e:   48 89 e5                mov    %rsp,%rbp
422     1151:   48 83 ec 10             sub    $0x10,%rsp
423     1155:   89 7d fc                mov    %edi,-0x4(%rbp)
424     1158:   48 89 75 f0             mov    %rsi,-0x10(%rbp)
425     115c:   48 8d 3d a1 0e 00 00    lea    0xea1(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
426     1163:   e8 e8 fe ff ff          callq  1050 <puts@plt>
427     1168:   b8 00 00 00 00          mov    $0x0,%eax
428     116d:   c9                      leaveq 
429     116e:   c3                      retq   
430     116f:   90                      nop   

# 有的占1字节 有的占4字节  指令的宽度不确定

四.ARM处理器的数据类型

4.1 ARM-v7 架构数据类型

? 字节 Byte 8 bits (1字节)

? 半字 Half Word 16 bits(2字节)

? 字 Word 32 bits(4字节)

? 双字 Double Word 64 bits (8字节)

4.2 ARM-v8 架构数据类型

? 字节 Byte 8 bits (1字节)

? 半字 Half Word 16 bits(2字节)

? 字 Word 32 bits(4字节)

? 双字 Double Word 64 bits (8字节)

? 四字 Quad Word 128 bits (16字节)

4.3 ARM-v7架构与ARM-v8架构的区别

? 不同点1:

ARM-v7架构属于32位架构,支持的是32位的ARM指令集;

ARM-v8架构属于64位架构,支持的是64位的ARM指令集;向下兼容ARM-v7架构。

? 不同点2:

32位的ARM指令集,执行一条指令最多可以完成32位以内的数据的运算;
	
	eg: add r0 , r0, r1    // r0 = r0 + r1  
							// r0和R1是一个32位寄存器,一个寄存器最大可以存储32位的数据。
							// 执行1条指令就可以完成32位以内的数据的运算,需要一个时钟周期
							// 如果向要完成64位数据的运算,需要使用两条指令分别完成低32位							  // 和高32位的运算

64位的ARM指令集,执行一条指令最多可以完成64位以内的数据的运算;
	eg: add x0 , x0, x1    // x0 = x0 + x1  
						  // x0和x1是一个64位寄存器,一个寄存器最大可以存储64位的数据。
						  // 执行1条指令就可以完成64位以内的数据的运算,需要一个时钟周期
						  // 如果向要完成64位数据的运算,需要1条指令就可以完成。
						  
所以支持64位指令集的设备运行速度要快于32位指令集的设备

不同点3:

32位系统的寻址空间为0-4G(0-2^32)

64为系统的寻址空间为0-非常大(0-2^64)

相同点:

32位指令集和64位指令集编译生成机器码都只占4字节的代码段的空间。
	add r0, r0, r1 ---> 占用4字节的空间
	add x0, x0, x1 ---> 占用4字节的空间

五、ARM处理器的工作模式

5.1 Cortex-A核处理器的工作模式

在这里插入图片描述

Monitor Mode(安全监控模式)----> 运行的安全相关的代码
PHY_Mode ----> 对虚拟化技术支持的代码

ARM处理器具有多种工作模式,在不同的工作模式下执行不同的代码,完成特定的功能。

比如在中断的异常模式下,执行的是中断处理的相关的代码。

5.2 Cortex-M核处理器的工作模式

Cortex-M核只有两种工作模式:
	线程模式---> 主要运行的主程序(用户的程序)
	异常模式---> 主要运行的异常处理程序(比如:按键中断处理程序,定时器中断处理程序.....)

六.ARM寄存器组织)

6.1 芯片的内部结构图

image-20220919134824996

6.2 ARM寄存器组织图

在这里插入图片描述

1. 每个小方块表示一个寄存器,每个寄存器的大小是4字节,总共127字节(43 * 4);

2.寄存器是没有地址的,访问寄存器只能通过寄存器的编号进行访问,即R0-R15, CPSR, SPSR;

3.每种工作模式只能访问自己模式下的对应的寄存器,不可以访问其他模式下的寄存器
	user和sys模式最多可以访问17个寄存器;
	fiq,irq,svc,undef,monitor,abort模式最多访问18个寄存器;
	hyp模式最多访问19个寄存器;

4.banked类型的寄存器表示私有的寄存器,私有的寄存器只能被自己所属的模式访问,其他模式不可以访问。
	非banked类型的寄存器表示公有的寄存器,

5.如果某种工作模式下具有私有的寄存器,则不可以访问公有的寄存器,只能访问自己私有的寄存器
	如果某种工作模式下没有私有的寄存器,才可以访问公有的寄存器。
		比如在FIQ模式下,R8--R14只能访问FIQ下的寄存器,R0--R7可以访问User下的寄存器
	
6. 用户模式用系统模式共用一套寄存器组织;

7. ARM-v7架构的处理器总共有43个寄存器

7.特殊的寄存器

7.1 R13寄存器

? R13 --别名–> SP : the stack Pointer(栈指针寄存器)
?
? 栈指针寄存器的作用:栈指针寄存器中保存的是栈空间的地址。

? 用于压栈保存现场,也拥有先进后出的特点。

7.2 R14寄存器

? R14 --别名–> LR : the Linking Register (链接寄存器)

? 链接寄存器中保存的是程序的返回地址。

7.3 R15寄存器

R15 --别名–> PC : the Program Counter (程序计数寄存器)

程序计数寄存器中存放的是当前取指指令的地址,当完成指令的取指之后,PC自动加4指向下一条指令。

7.4 CPSR寄存器

CPSR : Current Program Statued Register (当前程序状态寄存器)

CPSR寄存器中保存的是当前程序的运行状态寄存器,比如处理器的当前的工作模式。

7.5 SPSR寄存器

SPSR : Saved Program Statues Register (保存程序状态寄存器)

SPSR寄存器的作用主要用来对CPSR寄存器进行备份。

八.指令流水线

ARM指令为了提高指令的执行的效率,指令采用流水线的方式执行

三级流水线
	取指器:取指器根据PC寄存器中的值从内存的代码块,完成指令的取指操作,并给到译码器
	译码器:翻译指令对应的功能,根据指令的功能,给到不同的执行器;
	执行器:执行指令,并将指令的执行结果写回到寄存器中。

CPSR寄存器中保存的是当前程序的运行状态寄存器,比如处理器的当前的工作模式。

7.5 SPSR寄存器

SPSR : Saved Program Statues Register (保存程序状态寄存器)

SPSR寄存器的作用主要用来对CPSR寄存器进行备份。

八.指令流水线

ARM指令为了提高指令的执行的效率,指令采用流水线的方式执行

三级流水线
	取指器:取指器根据PC寄存器中的值从内存的代码块,完成指令的取指操作,并给到译码器
	译码器:翻译指令对应的功能,根据指令的功能,给到不同的执行器;
	执行器:执行指令,并将指令的执行结果写回到寄存器中。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:07:48  更:2022-09-30 01:09:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:31:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码