arm初识

一.CPU从指令集角度分类

  1.1. CISC  (X86)

    1.1. 1. CISC CPU 指complex instruction set computer复杂指令集CPU

    1.1.2. CISC体系的设计理念:

      a. 是用最少的指令来完成任务(譬如计算乘法只需要一条MUL指令即可),因此CISC的CPU本身设计复杂、工艺复杂,但好处是编译器好设计。CISC出现较早,至今Intel还一直采用CISC设计

  1.2. RISC (RAM)

    1.2.1. RISC CPU 指:Reduced Instruction-Set Computer精简指令集CPU

    1.2.2. RISC的设计理念:

      a. 让软件来完成具体的任务,CPU本身仅提供基本功能指令集。因此RISC CPU的指令集中只有很少的指令,这种设计相对于CISC,CPU的设计和工艺简单了,但是编译器的设计变难了。

  1.3. RISC和CISC对比

    1.3.1. 从指令角度

      a. 一般典型CISC CPU指令在300条左右

      b. ARM CPU常用指令30条左右

      c. RISC 设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。因此,在RISC 机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而CISC 计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高

    1.3.2. 从CPU芯片电路

      a. RISC CPU 包含有较少的单元电路,因而面积小、功耗低;而CISC CPU 包含有丰富的电路单元,因而功能强、面积大、功耗大。

二. IO与内存编址

  2.1. 什么是IO?

    2.1.1. IO(input and output)是输入输出接口,是CPU和其他外部设备(如串口、LCD、触摸屏、LED等)之间通信的道路。一般的,IO就是指CPU的各种内部或外部外设。

  2.2. 什么是内存?

    2.2.1. 内存是程序的运行场所,内存和CPU之间通过总线连接,CPU通过一定的地址来访问具体内存单元

  2.3. IO与内存的编址

    2.3.1. IO与内存统一编址(ARM)

      a. 把外设寄存器类似于访问内存的方式,即把外设的寄存器当作一个内存地址来读写,从而以访问内存相同的方式来操作外设,叫IO与内存统一编址方式

    2.3.2. IO与内存独立编址(X86)

      a. 使用专用的CPU指令来访问某种特定外设,叫IO与内存独立编址方式

    2.3.3. 统一编址和独立编址区别

      a. 由于内存访问频率高,因此采用总线式连接,直接地址访问,效率最高

      b.  IO与内存统一编址方式,优势是IO当作内存来访问,编程简单;缺点是IO也需要占用一定的CPU地址空间,而CPU的地址空间是有限资源

      c.IO与内存独立编织方式,优势是 不占用CPU地址空间,缺点是CPU设计变复杂了

三. 哈佛结构和冯诺依曼结构

  3.1. 代码的构成元素

    3.1.1. 代码的两大核心元素:程序部分 + 数据部分

    3.1.2. 程序部分

      a. 程序是我们写好的源代码经过编译、汇编之后得到的机器码,这些机器码可以拿给CPU去解码执行,CPU不会也不应该去修改程序,所以程序是只读的。

    3.1.3. 数据部分

      a. 数据是程序运行过程中定义和产生的变量的值,是可以读写的,程序运行实际就是为了改变数据的值。

  3.2. 冯诺依曼结构

    3.2.1. 程序和数据都放在内存中,且不彼此分离的结构称为冯诺依曼结构。譬如Intel的CPU均采用冯诺依曼结构。

  3.3. 哈佛结构

    3.3.1. 程序和数据分开独立放在不同的内存块中,彼此完全分离的结构称为哈佛结构。譬如大部分的单片机(MCS51、ARM9, cortex-A等)均采用哈佛结构。

    3.3.2. 哈佛结构也决定了ARM裸机程序(使用实地址即物理地址)的链接比较麻烦,必须使用复杂的链接脚本告知链接器如何组织程序;对于OS之上的应用(工作在虚拟地址之中)则不需考虑这么多

  

  3.4. 两个结构对比

    3.4.1. 冯诺依曼结构中程序和数据不区分的放在一起,因此安全和稳定性是个问题,好处是处理起来简单

    3.5.2. 哈佛结构中程序(一般放在ROM、flash中)和数据(一般放在RAM中)独立分开存放,因此好处是安全和稳定性高,缺点是软件处理复杂一些(需要统一规划链接地址等)

四. 寄存器

  4.1. 寄存器分类

    4.1.1. 分为两大类

      a. 通用寄存器

      b. SFR(special function register,特殊功能寄存器)

    4.1.2. 通用寄存器

      a. 通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与

    4.1.3. SFR

      a. SFR(special function register,特殊功能寄存器)不在CPU中,而存在于CPU的外设中,我们通过访问外设的SFR来编程操控这个外设

    4.1.4.寄存器操作示例

汇编:
ldr r1, =0xE0200280
str r0, [r1]
mov r0, #0


C:
int *p = (int *)0x30008000;
*p = 16;
View Code

 

参考《朱老师.1.2ARM裸机课件》         

    

posted @ 2019-01-02 23:48  三七鸽  阅读(273)  评论(0编辑  收藏  举报