ARM体系结构第一篇,主要是一些概念性的东西,需要仔细理解。
- 可编程器的编程特点和原理
- 在固定频率的时钟控制下有节奏的运行
- 可以通过总线获取外部存储中的二进制指令,从而解码执行
- 这些二进制指令是CPU设计的时候决定的,由CPU的设计者定义,这就是CPU汇编指令集
- CPU的指令集
- 指令集就是ARM汇编指令集
- 汇编语言相对C等高级语言比较复杂,且移植性差,不适合较大型的项目,但是汇编语言效率高
- 汇编语言的本质就是机器指令的助记符,是一种低级符号语言,我们常见的ABI就指的是机器指令的接口,我们就是通过这些ABI来调用CPU的机器指令接口
- RISC与CISC
- CISC又称复杂指令集,设计的理念是使用最少的指令来完成任务,因此CISC设计复杂,工艺复杂,但是CISC的编译器好设计,CISC指令出现比较早,并且一直沿用至今
- CISC的功能扩展依赖于指令集的扩展。是CPU内部逻辑组合电路的扩展
- RISC叫做精简指令集,设计的理念是让软件来完成任务,CPU仅提供基本指令集,因此RISC仅有很少的指令,相对于CISC,设计和工艺简单,但是编译器的设计变的困难了,功能的扩展由使用CPU的人利用基础架构来灵活实现
- 内存编址与CPU结构
- 内存IO编址分为同一编址与独立编址
- CPU通过地址总线寻址定位,通过数据总线进行读写,CPU的地址总线在CPU设计时就已经确定了所以一款CPU的寻址范围是一定的,而内存是需要占用CPU的寻址范围的,
- IO的访问方式有两种,
- 一种是类似于内存的访问方式,把外设的寄存器当做内存来操作,叫做IO与内存统一编址,这样编程简单,但是需要占用一定的CPU地址空间
- 另外一种是只用专用的CPU指令来访问特定外设,叫做CPU与IO独立编址,这种编址方式不占用CPU地址空间,但是编程复杂
- 程序和数据都放在内存中,且彼此不分离的结构成为冯诺依曼结构,例如Intel的CISC,这种结构处理起来比较简单,但是会影响安全和稳定性
- 程序和数据分开独立放在不同的内存位置中,称为哈佛结构例如ARM的CPU,程序一般放在ROM或者Flash中,数据放在RAM中,所以安全和稳定性高,缺点是需要统一规划链接地址,处理起来比较复杂
- 寄存器
- 寄存器属于CPU外设的硬件组成部分,CPU可以像访问内存一样访问寄存器 ,寄存器是CPU的硬件设计者决定的,是留作外设被编程控制的”活动开关”
- 寄存器是外设硬件的软件编程接口API,使用软件编程控制某个硬件,其实就是读写该硬件的寄存器
- 编程操作寄存器类似于访问内存,寄存器的每一位都有特定的含义,因此编程操作需要位操作,单个寄存器的位宽一般和CPU的位宽保持一致,以实现最佳访问效率
- 寄存器一般分为通用寄存器与特殊功能寄存器SFR
- 通用寄存器是CPU的组成部分,CPU的很多功能需要通用寄存器参与
- SFR存在于CPU的外设中,我们通过访问外设的SFR来操作该外设,这就是编程控制硬件
- ARM的CPU架构
- ARM属于RISC架构
- 常用的ARM汇编指令只有二三十条
- ARM属于低功耗CPU
- ARM架构适用于单片机,嵌入式
- ARM是统一编址的,通过访问外设的SFR寄存器,以类似于访问内存的方式来访问外设
- ARM属于哈佛结构,保证了稳定性和安全性,但是ARM裸机程序使用了物理地址,所以链接起来比较麻烦,必须使用复杂的链接脚本显示的告诉链接器如何组织程序,但是,对于工作在虚拟地址的OS之上的程序,则不需要考虑这么多