ARM学习1
ARM相关概念
1.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万英镑
ARM公司12工程师+技术专利:150万英镑
ARM公司-> Advanced RISC Machine
注:
ARM公司不生产芯片,做技术的授权,
提供解决方案。芯片厂家拿到技术授权之后,
根据需求设计生产自己的SOC。
5. 2016年
日本软银收购
2.ARM精简指令集和复杂指令集的区别
精简指令集:RISC
在赋值指令集中提取一些比较简单的指令,
并且使用频率较高的指令,作为简单指令集,
精简指令集的宽度和周期固定。
宽度:一条指令在内存中所占空间的大小
周期:一条指令执行所需要的时间
处理器的工作频率:2.7GHz 1.8GHz 1.0GHz
处理器的主频就是处理器工作的时钟。

复杂指令集:CISC
复杂指令集,注重的是指令的功能性和运算能力,
复杂指令集,指令的周期和宽度都是不固定的。

3.ARM产品的分布
ARM内核:
早期ARM内核命令规范:
ARM7,ARM9,ARM10,ARM11
从ARM11之后,ARM公司对ARM内核命名规范为:Cortex
Cortex-A系列:
针对于高端,高性能处理器,
可以运行linux系统或者Android系统。
高通:
海思:
联发科:
NXP:
瑞星微:
Cortex-R系列:
主要针对于实时处理,摄像机,照相机
Cortex-M系列:(二线城市)
低端处理器,主要用于消费类电子产品,
一般不跑操作系统都是裸机开发。
ucosII LiteOS FreeRTOS AliOS
意法半导体(ST) : STM32 STM8
4.ARM中的数据宽度的约定
arm-v7架构:
char : 8bits
half world : 16bits
word : 32bits
double word : 64bits (cortex-A)
arm-v8架构:
char : 8bits
half world : 16bits
word : 32bits
double word : 64bits (cortex-A)
quad word : 128bits (arm-v8架构支持)
5.架构指令集的支持
1.ARM-v7架构指令集的支持
A32:ARM32位指令集
一条指令占32位宽度,
一条指令可以完成32位数据的运算
T16:Thumb16位指令集
一条指令占16位宽度,
一条指令可以完成32位数据的运算
2.ARM-v8架构指令集的支持
ARM-v8架构向下兼容ARM-v7架构。
Aarch32:
A32:ARM32位指令集
一条指令占32位宽度,
一条指令可以完成32位数据的运算 ---> ?寄存器的位数
T16:Thumb16位指令集
一条指令占16位宽度,
一条指令可以完成32位数据的运算
Aarch64:
A64:ARM64位指令集
一条指令占32位宽度,
一条指令可以完成64位数据的运算 ---> ?寄存器的位数
T32:Thumb32位指令集
一条指令占16位宽度,
一条指令可以完成64位数据的运算
6.ARM处理器的工作模式
目的:为了提高ARM处理器的工作效率,
ARM处理器有很多中工作模式,
在不同的工作模式下,执行不同的代码,完成特定的功能。
ARM 有7个基本工作模式:
User : 非特权模式,大部分任务执行在这种模式
FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor(SVC) :当复位或软中断指令执行时将会进入这种模式
Abort : 当存取异常时将会进入这种模式
Undef : 当执行未定义指令时会进入这种模式
System : 使用和User模式相同寄存器集的特权模式
Cortex-A特有模式:
Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;
也是一种特权模式

异常模式参考图:

|----特权模式--|--异常模式-|-->fiq(快速中断)
| | |-->irq(普通中断)
| | |-->svc(特权模式/管理模式)
工作模式--| | |-->abort(中止异常模式)
| | |-->undef(未定义异常模式)
| |
| |
| |--非异常模式-->system
|
|----非特权模式--->user
7.ARM内核中的寄存器组织
Cortex-A9内核 = 运算器 + 处理器 + 存储器。
存储器:指寄存器(Register/REG/reg)
寄存器理解参考图:

寄存器组织参考图:

不带三角的表示公有的,带三角的表示私有的。
在不同的工作模式下访问公有的寄存器,访问的是同一块空间。
在自己的工作模式下,如果说有私有的寄存器,
只能访问私有的寄存器,编号相同的公有的不能访问。
在ARM7, 9 , 11内核中有37个寄存器。
在cortex-A9内核中有40个寄存器。
在不同的工作模式下,只能使用自己本模式下的所有的寄存器,
不能使用其他模式下的寄存器。
ARM 有37个32-Bits长的寄存器.
1 个用作PC( program counter)
1个用作CPSR(current program status register)
5个用作SPSR(saved program status registers)
30 个通用寄存器
Cortex体系结构下有40个32-Bits长的寄存器
Cortex-A多出3个寄存器,Monitor 模式 r13_mon , r14_mon, spsr_mon
8.特殊的寄存器
r13 别名 sp (the stack pointor)
: 栈指针寄存器
用于存放栈顶的地址
r14 别名 lr (the Linking Register)
: 链接寄存器
用于存放返回地址
r15 别名 pc (the program counter)
: 程序计数寄存器
存放当前取指指令的地址
cpsr (current program status register)
: 当前程序状态寄存器
保存当前程序的运行状态
比如:程序的工作模式
spsr (saved program status register)
: 保存程序状态寄存器
模式切换是保存当前程序运行状态的寄存器
用于记录CPSR
9.cpsr详解
N[31] : 运算结果为负数,
N位被自动置1,否则为0
Z[30] : 运算结果为0,
Z位被自动置1,否则为0
C[29]:
加法 :
产生进位,C为被置1,否则为0
进位: 低32位向高32位进位。
减法 :
产生借位,C为被清0,否则为1
借位: 低32位向高32位借位。
比如: add R0, R1, R2 // R0 = R1 + R2
V[28]: 符号位发生变化,V位被自动置1,否则为0
I[7]:IRQ中断禁止位 全局中断禁止位
I = 0 使能IRQ中断
I = 1 禁止IRQ中断
F[6]:FIQ中断禁止位 全局中断禁止位
F = 0 使能FIQ中断
F = 1 禁止FIQ中断
T[5]:状态位
T = 0 ARM状态,执行ARM指令集
T = 1 Thumb状态,执行Thumb指令集
M[4:0]:模式位
0b10000 User mode;
0b10001 FIQ mode;
0b10011 SVC mode;
0b10111 Abort mode;
0b11011 Undfined mode;
0b11111 System mode;
0b10110 Monitor mode;
0b10010 IRQ mode;
其他没有使用的就是保留
10.大小端问题
大端对齐:
小端对齐:
编写代码测试大小端?
1> 强制类型转换
2> 联合体/共用体(union)
11.指令流水线(三级流水线)
ARM7内核 三级流水线
ARM9内核 五级流水线
ARM11内核 八级流水线
Cortex-A9 十三级流水线 arm公司未开源哪13级
流水线好处:提高代码的执行效率。
三级:取指器,译码器,执行器
以上三个器件是独立运行,互不干扰,每个都是单周期的器件。
取指器:从内存中根据PC中的值,一条一条的取出指令,给到译码器。
译码器:对指令进行翻译,给打对应的执行器。
执行器:执行对应的指令,将结果写到对应的寄存器中。
指令1 指令2 指令3 指令4 指令5 指令6
1T 取指
2T 译码 取指
3T 执行 译码 取指
4T 执行 译码 取指
5T 执行 译码 取指
6T 执行 译码 取指
7T 执行 译码 取指
8T 执行 译码 取指
8 / 6 约等于 1
以上流水线是理想情况,实际不可能达到这种理想的情况,
会有很多情况会打断流水,比喻函数的调用,中断。
PC寄存器取指完成之后,PC寄存器中地址值会自动加4指向下一条指令。
ARM学习1的更多相关文章
- 2015-10-11 Sunday 晴 ARM学习
基础的知识看得差不多了,linux系统相关的,最主要是c语言基础知道,还有linux系统编程,网络编程socket等相关的.这些内容最最基础的看完了,接下来我在考虑看什么呢?是看ARM以及驱动编程系列 ...
- arm学习——有关位操作的总结
在学习arm的过程中,感觉寄存器,基本不会提供位操作,而是整体的操作, 整体操作的就是要注意在对某位赋值的时候不要影响到其他位,看上去不简单, 其实,整体操作有技巧, 那么就来总结一下: 1.首先要理 ...
- 【arm学习】我的第一个裸板程序
初学ARM感觉写个裸板程序还真的不容易,可能是没有用到ADS,keil之类的开发平台的缘故吧.编译,链接过程在linux平台上完成,这样学起来更有实感,还能顺便熟悉linux环境,以及命令,何乐而不为 ...
- 《转》我的ARM学习经历
1.基础阶段 话说06年第一份工作从事的是PLC开发,用protel画原理图和PCB,写AVR单片机程序,焊焊板子,还去过华强北买器件,比较杂,但是接触面比较广,为进一步学ARM打下了基础. ...
- linux+ARM学习路线
学习步骤如下: 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系 ...
- arm学习笔记
学习ARM也有一定时间了,想想还是记点东西,要不以后就忘了.这是我的第一片,简简单单.但比较基础.1. ARM中一些常见英文缩写解释MSB:最高有效位:LSB:最低有效位:AHB:先进的高性能总线:V ...
- ARM学习 之 如何在向内核写入系统调用
本文主要介绍两个例子:1-系统调用打印“hello kernel” 2-驱动开发板的蜂鸣器 使用的是友善之臂(Friendly ARM)的开发板,三星2440 =================== ...
- ARM学习篇 SDRAM理解
1.SDRAM单管存储单元 SDRAM单管电路图 C记忆单元 T控制门管 Z字线 W位线 注:图示为N沟道耗尽型MOS管 写入:Z加高电平,MOS导通,W状态决定了电容C的状态 读出:Z加高电平,MO ...
- ARM学习篇一 点亮LED
要点亮LED,先决条件是什么,当然得有相应的硬件设施.板子的整个电路图比较大,我就直接取相关部分. 给发光二级管加上3.3v电压后,通过1k电阻,直接与S3C2440连接.至于为什么要加电阻,大家应该 ...
- ARM学习篇 中断定时理解
1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...
随机推荐
- 以&#开头的是什么编码?
今天遇到了一个网页时繁体的,它的title和meta信息在浏览器中显示正常,但是查看其源码是却是"最新發"这种. 在网上找了半天资料,终于搞明白了. 以在网页中&#开头的是 ...
- jboss7学习3-jboss安装 访问(外网)添加用户
一.下载安装 1.下载地址: http://www.jboss.org/jbossas/downloads ,下载Certified Java EE 6 Full Profile版本. 2.解压 jb ...
- 如何利用MHA+ProxySQL实现读写分离和负载均衡
摘要:本文分享一下"MHA+中间件ProxySQL"如何来实现读写分离+负载均衡的相关知识. 本文分享自华为云社区<MySQL高可用架构MHA+ProxySQL实现读写分离和 ...
- Mybatis-Dao层实现(通过代理方式)
1.代理方式开发是主流 2.Mapper接口开发方法只需要编写Mapper接口(相当于Dao接口),然后由Mybatis根据接口创建动态代理对象 Mapper接口开发需要遵循以下规范 一一对应 Use ...
- 数组-LeetCode-笔试
目录 数组理论基础 二分查找 二分法第一种写法 二分法第二种写法 ACM 移除元素 暴力解法 双指针法(快慢指针) ACM 有序数组的平方 暴力排序 双指针法 长度最小的子数组 暴力解法 滑动窗口 相 ...
- C++STL 中的数值算法(iota、accumulate、adjacent_difference、inner_product、partial_sum)
以下算法均包含在头文件 numeric 中 ##1.iota 该函数可以把一个范围内的序列从给定的初始值开始累加 先看用法. 例: 假设我需要一个长度为10,从5开始递增的序列 vector<i ...
- 使用java生成备份sqlserver数据表的insert语句
针对sqlserver数据表的备份工具很多,有时候条件限制需要我们自己生成insert语句,以便后期直接执行这些插入语句.下面提供了一个简单的思路,针对mysql或oracle有兴趣的以后可以试着修改 ...
- Failed to load resource: the server responded with a status of 404 ()
今天遇到了一个一开始感觉很莫名其妙的报错 在编写页面的时候把原先写在html页面里的js代码单独拿出来做成一个JavaScriptUtil文件,放在了和html页面同一个目录下.运行之后在对应的页面c ...
- 数据库基础知识详解五:MySQL中的索引和其两种引擎、主从复制以及关系型/非关系型数据库
1.MySQL中的索引 在MySQL,索引是由B+树实现的,B+是一种与B树十分类似的数据结构. 形如下面这种: 其结构特点: (1)有n课子树的结点中含有n个关键码. (2)非根节点子节点数: ce ...
- Springmvc01-什么是Springmvc
首先,我们回顾一下什么是MVC 1.什么是MVC MVC是模型(model),视图(View),控制器(Controller)的简写,是一种软件基本规范 Model(模型):数据模型,提供要展示的 ...