目录
arm基础知识
谈谈对嵌入式的理解?
计算机基本理论
计算机的组成
指令的解析
编译原理
ARM相关知识介绍
1.认识ARM
ARM含义?
架构:
内核:
SOC:
ARM的发展历史
指令集
ARM公司产品分布
ARM体系结构:
ARM-v8(A)--->Cortex-A53(8核)-->S5P6818 主频:1.4GHZ
ARM数据类型的约定
ARM-v7架构:
arm基础知识
基础:c语言 具有一定硬件基础
特点---》前后联系
arm目标:
看懂简单的汇编代码
会看电路图、芯片手册
学会如何用软件控制硬件思想
解决问题的办法
谈谈对嵌入式的理解?
以计算应用为中心,软硬件可裁剪的专用计算机系统。对功耗、体积、性能,成本等有一定要求。
特点:专用性强,专用的计算机;运行环境差异性大;比通用PC机资源少(适用性,够用就好);功耗低,体积小,集成度高,成本低;具有较长的生命周期
学习arm重点学习两方面:程序运行原理、硬件控制原理。
计算机基本理论
计算机系统中用高、低电平来表示逻辑1和0
数据在计算机中的存储、传输、运算(对数据的处理方式)都是以二进制的形式进行的
数据的传输通过总线真正传递的是电信号,高低电平(0、1)。内存只有高低电平。运算在电路中运行的,集成电路中完成运算。
计算机的组成
输入设备、输出设备、存储器、运算器、控制器共同组成了cpu
1.输入设备:将其他信号转换为计算机可以识别的信号(电信号) 。
2.输出设备:将电信号(0、1)转为人或其他设备能理解的信号。
3.存储器:存放程序和数据的部件,也是计算机能够实现“存储程序控制”的基础。
程序:指令的有序集合 //汇编指令
特点:
有穷性:算法必须保证在执行有限步骤后结束。
可行性:算法是确切可行的,即使在数学中,该算法可行,但若在实际应用中,程序不可以被执行,那么 ,该算法也是不具有可行性的。
确切性:算法的每一个步骤必须具有明确的意义。
输入:一个算法必须要有0个或多个输入。输出:一个算法必须要有1个或多个输出。
ROM: flash (EMMC)、磁盘空间 、掉电不丢失数据 只读寄存器
RAM: 内存、掉电丢失数据 随机存储器
+ -->求和指令
32为操作系统,寻址为32位。寻址空间位2^32,4G一个32根总线。裸机只能执行一条任务要想执行其他任务需要借助中断,如过有8G那么就会浪费掉4G空间
4.运算器:CPU对信息处理和运算的部件,常进行算术运算和逻辑运算,其核心是算术逻辑单元ALUCPU中用各种各样的数字电路搭配成各种各样的运算电路,如:加法、减法等。
如加法运算器:
程序存放在磁盘空间 但当他被运行时会加载到内存条上 因为再讲库的时候说过静态库会被加载一次 当动态库会被加载两次 所以每次程序运行时都会被加载到内存条上 然后当我要去执行的时候 要去内存条上把这些程序的有序的指令 拿过去然后cpu通过译码器解析
5.控制器:整个计算机的指挥中心
重点想学习的是:程序运行的原理
思考:
1.如果有一个运算程序3*3 但是cpu中没有乘法运算器会怎么处理
会把3*3解析成3+3+3用加法运算器来运算
2.游戏本为什么性能好
因为他的运算器多所以运算速度快 缺点就是体积较大
3.运算器不同(说明指令集不同),处理指令不同,及对应指令集不同。不同的处理器上如何运行同一个c语言程序?
(几个U就是几核就是有几个cpu 相当于有几个人再给你打工 不同的cpu指令集不同)
指令的解析
一条指令(机器码)的执行通常分为三个阶段:
1)取指:控制器将PC寄存器中的值发送给内存,内存将对应地址中的指令(机器码)传送回CPU的指令寄存器IR中
2)译码:指令译码器对IR中的指令进行识别,即将指令(机器码)翻译成具体的运算操作(+/-/*...)
3)执行:运算器执行对应的指令并将结果写入寄存器
执行完一条指令后CPU内对应的硬件会将PC的值自动增加使PC指向内存中的下一条指令
- 指令的执行是按照流水线
- 取指--》取指器 根据PC值取指令
- 译码--》译码器
- 执行--》执行器
以上三个器件,都是单周期的器件,三个器件的工作是独立,
指令1 指令2 指令3 指令4 指令5
1 取指
2 译码 取指
3 执行 译码 取指
4 执行 译码 取指
5 执行 译码 取指
6 执行 译码
7 执行
- PC永远指向当前正在取指指令的地址,一旦取到指令,pc后移4byte,保存下一条指令地址。
编译原理
C语言写的代码想在不同的计算机上运行 为什么需要编译器
CPU能够识别的唯一的语言是机器码,一个CPU能够识别哪些机器码是由处理器的硬件(运算器种类)决定的不同的机器码代表不同的运算,同样不同的CPU的机器码是不通用的即不可以移植,汇编是用一个标识符来代表一个机器码,所以不同的CPU汇编也不一样,即汇编语言不可以移植。
C语言编译的时候我们可以使用不同的编译器将C编译成不同的汇编和机器码,所以C可以不依赖CPU架构
总结面试题:
1.指令解析的过程
2.为什么不同处理器,要用不同的编译器编译程序代码?编译原理
ARM相关知识介绍
1.认识ARM
-
ARM含义?
1. ARM代表一个公司
2. ARM表示一种技术
3. ARM可以表示一些处理器的统称
-
架构:
m-v4,arm-v5,arm-v6,arm-v7(32Bits),arm-v8(64Bits)
架构指支持的汇编指令集 架构不同指令集也不同
-
内核:
cortex-a9,a53,a73,a77
ARM公司授权芯片的公司,芯片产家在内核的基础上,增加了一些外设,发布一款芯片,这些芯片可以统称为SOC
-
SOC:
System Of Chip:片上系统),S5P6818,骁龙855(高通),麒麟990(海思)
s5p6818:
-
ARM的发展历史
1. 1978年,CPU公司
Cambridge processing Unit(剑桥仓库)
2. 1979年 Acorn(组装计算机)
3. 1985年, 32位,8MHz,
使用的精简指令集RISC
芯片的名字ARM ----》 Acorn RISC machine(爱康精简指令集计算机)
4.1990年,
iphone 150万英镑 VLSI: 25万英镑
12工程师+技术专利:150万英镑
ARM公司-》 Advanced RISC Machine(高级精简指令集计算机)
ARM公司不生产芯片,做技术的授权,提供解决方案。
例如:小米手机(买了高通芯片+UI+摄像头优化等)
5. 2016年,日本软银收购
-
指令集
- 精简指令集(RISC)-->微处理器
在复杂指令集里边选取了一些比较简单,使用频率较高的指令
指令的宽度固定,多为单周期指令。
举例:如有加法运算器 ,没有乘法运算器 3*3 ---》3+3+3
- 复杂指令集(CISC)-->电脑CPU
注重的指令的功能性,指令的周期,指令的宽度不固定
eg精简:可以编译后,用反汇编查看代码指令。
使用交叉编译工具编译程序,生成arm的可执行程序
arm-linux-gnueabinf-gcc 1.c
file a.out -->查看可执行文件属性
使用反汇编的命令将elf文件转换为反汇编文件.dis
arm-linux-gnueabinf-objdump -D a.out > a.dis
查看ubuntu复杂指令集的指令:
gcc 1.c --->编译生成a.out可执行文件
file a.out 查看文件属性
objdump -D a.out > a.dis ---->反汇编
-
ARM公司产品分布
- Cortex-A:
高通,联发科,海思,三星,飞思卡尔、面向尖端的基于虚拟内存的操作系统和用户应用。
- Cortex-R:
实时处理器为要求可靠性、容错功能和实时响应的嵌入式系统,提供高性能解决方案。汽车电子,照相机摄像机。
- Cortex-M:单片机
针对成本和功耗敏感的MCU和终端应用,一般不跑操作系统,可以运行实时操作系统:FreeRTOS,uCosII,LiteOS(华为),意法半导体(ST)STM32系列
-
ARM体系结构:
-
ARM-v8(A)--->Cortex-A53(8核)-->S5P6818 主频:1.4GHZ
-
-
ARM数据类型的约定
ARM-v7架构:32bit处理器
- char:8位
- halfword:16位
- word:32位
- doubleword:64位(cortex-a)
ARM-v8架构:64bit处理器 ,向下兼容32位(我们学习32位)
- char:8位
- halfword:16位
- word:32位
- doubleword:64位(cortex-a)
- quadword:128位(ARM-v8)
- 处理器的32位和64位什么含义?
- 32位:一条指令可以进行32位数据的运算
- 64位:一条指令可以进行64位数据的运算
- 大部分ARM core 提供:
ARM-v7架构:
- ARM 指令集(32-bit)
一条指令占32位内存空间
- Thumb 指令集(16-bit )
一条指令占16位内存空间
ARM-V8:向下兼容ARM-v7架构
- ARM指令集:A64,A32
- Thumb指令集:T32,T16
- 不管是A64还是A32,每条指令都占32位空间
- 不管是T32还是T16,每条指令都占16位空间
ARM-v7:
ARM指令集:A32
Thumb指令集:T16
ARM指令集功能更全,性能更高
thumb指令集比ARM指令集指令密度要大
-
ARM处理器的工作模式
ARM内核的命名规格历史
ARM7 ARM9 ARM10 ARM11 ,ARM11之后,命名规格改变
Cortex-A9 A53 A75
ARM7-11 有7种基本工作模式:
-
User : 非特权模式,大部分任务执行在这种模式
- FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
- IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
FIQ和IRQ打断当前正在做的事去做其他的事情,做了再回来继续做自己的事情。鼠标键盘等都是这样实现的。(Linux内核会有中断,驱动写中断驱动代码)
中断的概念:
- Supervisor(SVC) : 当复位或软中断指令执行时将会进入这种模式
(任务的切换会切入这个模式,权限最高的模式,刚启动的时候在这个模式下,权限高,可以做一些核心的操作。进行系统调用的时候会切换这个模式。)
- Abort : 当指令存取异常时将会进入这种模式
- Undef : 当执行未定义指令时会进入这种模式(执行乘法没有乘法运算器也没有可代替的)
- System : 使用和User模式相同寄存器集的特权模式
保证不同任务每次调用同一个函数都是从头开始。
Cortex-A特有模式:
- Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;
也是一种特权模式
特定的模式拥有特定的权限,执行特定的代码,完成特定的功能
-
CPU(内核)组成:
- 运算器
加法运算 --》加法器 --》加法指令
- 控制器
- 存储器---》REG Register:此寄存器由ARM公司集成到CPU的内部来存放机器码
-
A32:每个寄存器可以存储一个32位数据
- A64:每个寄存器可以存储一个64位数据
总结:
- ARM7,9,11 有37个32-Bits长的寄存器
- 1 个用作PC( program counter)
- 1个用作CPSR(current program status register)
- 5个用作SPSR(saved program status registers)
- 30 个通用寄存器
- Cortex-A多出3个寄存器及有40个32-Bits长的寄存器
- Monitor 模式 r13_mon , r14_mon, spsr_mon
- R0-r15, CPSR,SPSR 这些寄存器是由ARM公司提供,每个寄存器都是32位的。
这些寄存器没有地址,只有一个唯一的编号,通过这些编号,就可以访问对应的地址空间。R0- R15,cpsr,spsr就是对应的编号,每个编号都对应的几位二进制?32
- R13:栈指针寄存器
the stack pointer, sp
存放栈顶的地址
- R14:链接寄存器
the link register, lr
- 函数调用时,保存返回地址
(保存调用函对应指令的下一条指令地址,返回的时候把lr值给pc,可以继续执行接下来的代码)
- R15:程序计数寄存器
the program counter, pc
- 存放当前取指指令的地址
cpu从内存中一条一条的拿指令(取值)
- CPSR:当前程序状态寄存器
- 存储当前程序运行状态
current program status register, cpsr
第五位的T状态为的含义 一旦你被切换到异常模式或者其他模式他会让你强制切换到微秒的arm模式 用arm指令集处理
第六位和第七位中断禁止的含义 如果没有禁止就会来一个中断去处理中断中又有中断再去处理然后再回来执行当前程序 要是中断过多就可能没法回来,把他禁止的话就是当前只执行一个中断这个中断处理完再去执行其他中断,防止中断叠加。
NZCV这几位叫条件位,后边八位叫控制位(C表示)
- SPSR:保存程序状态的寄存器
saved program status register文章来源:https://www.toymoban.com/news/detail-649493.html
- 用于保存cpsr
文章来源地址https://www.toymoban.com/news/detail-649493.html
- 时钟:负责发出CPU开始计时的时钟信号。
到了这里,关于arm基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!