ARM体系结构学习分享

花了好长时间整理的转载请注明出处:

一提起ARM芯片就会跟出来好多介绍,例如是什么哈佛体系结构啊,什么Cortex-M系列啊,什么ARM指令集啊等介绍,而这些东西又都是什么意思呢,又是怎么起源的呢,让我们逐个的进行梳理,防止以后看到一款芯片,根本看不懂是什么意思。

 

一.ARM概念区分
1.经常有人提起stm32会有人叫他cortex-M3(M4),为什么叫Cortex-m3呢

ARM公司在经典的ARM11以后的产品改用cortex命名,并分为A,R和M三类(针对不同市场需求),cortex系列属于ARMv7架构,ARMv7架构定义了三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器。我们所用的stm32就属于M系列。

那上面的ARMv7又是什么鬼?
 ARM体系结构学习分享
这么一分好像清晰了很多,架构是架构,系列是系列。

其中ARM7还包括,ARM7TDMI,ARM7TDMI-S,ARM720T,ARM7EJ-S 几种类型的核。
ARM9包括:ARM920T,ARM922T
ARM9E:ARM926EJ-S ARM946E-S ARM966E-S ARM968E-S ARM966HS
ARM10E:ARM1020E,ARM1022E,ARM1026EJ-S
ARM11:ARM11 MPCore.ARM1136(F)-s,ARM1156T2(F)-s,ARM1176JZ(F)-S
ARM体系结构学习分享

所以stm32就是基于ARMv7架构 Cortex-m处理器系列中的一员。
AX7020 的arm部分是cortex-A9
am335x cortex-A8
s3c2440 属于ARM9(ARM920T)处理器系列 ARMV4T架构
等等等等

ARM体系结构学习分享

这里要注意 架构 处理器系列 核的概念
例如s3c2440就是ARMV4架构,ARM9处理器系列ARM920T类型的核
stm32就是ARMV7架构,Cortex-M3处理器系列。


2.在处理器中又经常提到冯.诺依曼总线结构和哈佛总线结构
按照数据(全局变量,局部变量)和代码(函数)的存储方式的不同,可以分为冯.诺依曼结构和哈佛结构
冯.诺依曼结构:数据和代码放在一起。
哈佛结构:数据和代码分开存放。(取指令和数据访问可以同时进行)


3.处理器中又经常提到RISC和CISC,这两个又是什么?
RISC:精简指令集计算机原理(解决CISC的一些弊病)
CISC:复杂指令集计算机原理
ARM体系结构基于RISC
常见的X86就是CISC结构的处理器。

4.许多处理器都标注为16位和32位双指令集,又是什么意思,还有就是为什么需要双指令集呢。
32位ARM指令集执行效率高,但是代码密度相对较低,而16位Thumb指令集是ARM指令集的子集,具有很好的代码密度,而且保持了ARM的大多数性能上的优势。
他们之间的切换开销可以忽略不计,感觉像是好基友,互补的关系。

一般启动代码中对执行效率要求较高,采用汇编指令,这些指令属于ARM指令。Thumb指令一般也是在启动代码中配合ARM指令使用,一般我们不怎么留意。
ARM体系结构学习分享


二.程序编译过程

5.一个C/C++文件需要经过预处理,编译,汇编和连接四步才能变成可执行文件
2.Makefile一般的执行流程:
(1)预处理
(2)编译        .cà.s汇编文件
(3)汇编        .sà.o文件
(4)链接        多个.o文件生成elf格式文件
    (5)然后生成机器可识别的二进制文件。


上面这是我们在arm中执行make编译后的一个过程。

我们平时在编译stm32的时候流程也是差不多的
 ARM体系结构学习分享
我们平时用的编译器其实可以理解为别人把好多工具链集成好了,然后给你整了一个用户界面,方便调试,linux开发中就是直接安装各种工具链(gcc),然后通过命令行指令进行整个过程,由于命令较多,又引入了makefile.


6.
ARM体系结构学习分享


7.多少位CPU指的就是数据总线位数。(数据线越多,肯定一次传输处理的数据就越多),2的32次方,也就意味着地址空间最大4GB。

8.cortex 系统异常列表
 
ARM体系结构学习分享

ARM体系结构学习分享
三.工作模式

cortex-M3 支持两种工作模式:线程模式和处理模式
线程模式:
在复位时处理器进入线程模式
异常返回时处理器进入线程模式
特权和用户都能在线程模式下
处理模式:
出现异常时处理器进入处理模式
只有特权才能在处理模式

ARM体系结构学习分享
 

ARM体系结构学习分享

ARM体系结构学习分享

控制寄存器用于进行模式的切换


扩展:
ARM(2440等)处理器有7种工作模式:
ARM处理器的工作模式分为用户模式和特权模式,除用户模式外的6钟工作模式为特权模式。此外除用户模式和系统模式外的其他
5种工作模式称为异常模式。
ARM体系结构学习分享

利用CPSR程序状态寄存器进行模式切换。

四.寄存器

当我们在写51程序的时候,会遇到很多的寄存器,其实现在也一样本质就是操作很多寄存器,只是现在的代码封装层数太多,看不到而已
所以搞清楚寄存器,其他任何的操作你就都能理解。(debug时看到在汇编指令中来回跳转,其实多看看它的执行过程是很有帮助的)

ARM体系结构学习分享
寄存器:
 
R13 堆栈指针寄存器 R14(LR)链接寄存器 R15(PC)程序计数器,芯片不断的发展,但是这些基本的还是不会变的都会有这么几个寄存器。

Cortex-M3 内核有两个堆栈指针:MSP(主堆栈)和PSP
ARM体系结构学习分享

ARM体系结构学习分享


R14(LR)链接寄存器主要保存PC的返回地址。
主要保存子程序返回地址,也用于异常返回。(函数调用过程中用到了,执行完子函数后还能回到主函数继续执行)

R15(PC)总是指向正在取指的指令。

ARM体系结构学习分享

 


五.说完寄存器肯定要提到总线。
在使用芯片的过程中经常会提到总线的概念,那总线又是什么呢?
总线是CPU与存储器和设备通信的机制,是计算机各部件之间传输数据,地址和控制信息的公共通道。(一个处理器可能含有多条总线)

ARM体系结构学习分享

片上总线标准很多,ARM用的AMBA(片上总线),该规范主要包括了,AHB(系统总线),APB(外设总线)--》程序中经常遇到,哈哈。

ARM体系结构学习分享


ARM体系结构学习分享

 

ARM体系结构学习分享

ARM体系结构学习分享
六.流水线
经常会提到几级流水线,流水线是什么东西?
处理器执行一条指令的三个阶段,取指,译码和执行(5级流水线,取指,译码,运算,写存储器,写寄存器)
 ARM体系结构学习分享
1.第一周期,PC指向指令1,此时指令1进入流水线取指阶段
2.第二周期,PC指向指令2,此时进入译码阶段,同时取出指令2
3.第三周期,PC指向指令3,此时进入执行阶段,同时指令2进入译码阶段,指令3取指
4.第四周期,指令1执行完成,指令2和三同时推进一级,开始指令4取指。。
就想水一样,一级级推进。。(有同时执行的时候)

七,异常和中断
这个是比较重要的一环了,异常。
中断:来自于片上外设或外扩的外设
异常:由CM3内核的活动而产生的。
 
ARM体系结构学习分享

ARM体系结构学习分享

ARM体系结构学习分享