华清远见嵌入式学习day24——ARM体系架构


*********************************
        预备知识
*********************************
【1】逻辑0和1:高电平表示1
            低电平你表示0

【2】二极管
    特性,单向导电性,正向导通,反向截止

【3***】三极管
    特性:放大特性,开关特性
    NPN:高电平导通,低电平截止
    PNP:低电平导通,高电平截止

【4*****】位和位域的操作
    位运算符:& | ^ ~ <<  >> 
    逻辑运算符:&&  ||  !
    1> unsigned int a; 
        将a的第15位置1,其他位不变
        总结:或1置1,或0不变
       31                                 0
        ******** ******** 1******* ********
        a = a | 0x8000;
        二进制转换为十六进制:
        ****  二进制
        8421
        
        a |= 0x8000;
        
        a = a | (1 << 15);

    2> unsigned int a; 
        将a的第15位清0,其他位不变
        总结:与0清0,与1不变
        ******** ******** 1******* ********
        11111111 11111111 01111111 11111111
        a = a & 0xFFFF7FFF;
        a = a & (~(1 << 15));
        
        a = a & (0x0 << 15);切记不要使用,错误
        
    位域操作:
    位域:几个连续的位,称为位域--->[7:4]
    1>unsigned int a; 
        将a的[7:4]清0,其他位不变
        ******** ******** ******** 1111****
        00000000 00000000 00000000 00001111  0xF 
        00000000 00000000 00000000 11110000  0xF << 4 
        11111111 11111111 11111111 00001111  ~(0xF << 4)
        a = a & (~(0xF << 4));
    2>unsigned int a; 
        将a的[7:4]置1,其他位不变
        a = a | (0xF << 4);
    3>unsigned int a; 
        将a的[7:4]修改为1010,其他位不变
        1. 先清零,
        a = a & (~(0xF << 4));
        2. 再把相应的位置1
        a = a | (0xa << 4);
        a = a & (~(0xF << 4)) | (0xa << 4);
        a &= (~(0xF << 4)) | (0xa << 4);  错误
        #############################

        1. 先置1 
        a = a | (0xF << 4);
        2. 再把相应的位清0
        a = a & (~(0x5 << 4));
                
    4>unsigned int a; 
        将a的[9:4]修改为101010,其他位不变
        a = a & (~(0x3F << 4)) | (0x2a << 4);

    总结:与0清零,或1置1,异或1取反
        先清零,后把相应的位置1

###########################################
        ARM体系结构
###########################################
【1】面试题:谈谈你对ARM的理解
    1. ARM代表一个公司    
        ARM公司只做技术的授权,不生产芯片
    2. ARM代表一种技术,采用精简指令集(RISC)的内核
    3. 携带ARM核的处理器,统称ARM处理器
    
    内核:ARM7 ARM9 ARM11 Cortex-A:a7 a8 a9 a53 a75 a76
    架构:arm-v3 arm-v4,arm-v5,arm-v6,arm-v7,arm-v8
        arm-v7 : 32位架构 ---》 cortex-a9 exynos-4412
        arm-v8 : 64位架构 ---》 cortex-a53 s5p6818
    CPU:处理器
        三星:s5p6818  8*a53     arm-v8
        高通:骁龙855  4*A76+4*A55  arm-v8
        华为:麒麟980  4*A76+4*A55  arm-v8
        飞思卡尔:IMX6 4*a9  arm-v7 
    
    
    SOC:system of chip 片上系统
    s5p6818 
    骁龙855 
    麒麟980 
    IMX6  以上芯片都可以叫SOC

    ARM公司研发架构--->研发内核--》授权芯片公司
    --》芯片公司给予内核添加外设,研发出自己的SOC
    --》给这个SOC定义一个名字
    
【2】ARM发展历史
    1979年   Acorn
    
    1985年  32位  8MHz  RISC  名字:ARM
        ARM:Acorn  RISC Machine
        
    1990年:iphone 125万英镑
            VLSI   25英镑
            12工程师+技术专利 125万英镑 
            名字:ARM公司  Advanced RISC Machine 
            
    2016年:软银
【3】RISC和CISC区别        
        
    RISC:精简指令集
        选取了一些比较常用简单的指令,
        指令的功能简单,指令的宽度固定,
        指令的周期固定,多为单周期指令
        
        指令的宽度固定:单条指令存储在内存中,
        占用多大的空间
        
    CISC:复杂指令集(X86)
        注重指令的功能性,指令的宽度不固定,
        指令的周期不固定
###########################################    
【1】回顾
    1. 二极管 三极管
    2. 位和位域的操作 
    3. ARM的认识
    
【2】ARM公司产品分布
    Cortex-A:嵌入式,高端芯片,跑操作系统
            linux内核
    Cortex-R:针对实时性
    Cortex-M:简单的电子产品,不跑操作系统
            小型的实时操作系统:FreeRTOS,ucos III 
        
【3】ARM约定数据所占空间
    arm-v7 
        字节--》8bits
        半字--》16bits
        字  --》32bits
        doubleword --》64bits (arm-v7)
        
        quadword   --》128位(arm-v8)
        
【4】ARM处理器32位和64位的区别
    位数指:一条指令可以完成多少位数据的计算
    
    ARMv7:
        ARM指令集 每条指令占32位内存空间
        Thumb指令集 每条指令占16位内存空间
        
    ARMv8:
        Aarch64 每条指令占32位内存空间
        Aarch32 每条指令占32位内存空间
        
        T32 每条指令占16位内存空间
        T16 每条指令占16位内存空间
【5】ARM处理器的工作模式
    ARM7、ARM9、ARM11 有7种基本工作模式:
    cortex-a 有8种基本工作模式:
    User : 非特权模式,大部分任务执行在这种模式
    FIQ :   当一个高优先级(fast) 中断产生时将会进入这种模式
    IRQ :   当一个低优先级(normal) 中断产生时将会进入这种模式
    Supervisor :当复位或软中断指令执行时将会进入这种模式
    Abort : 当存取异常时将会进入这种模式
    Undef : 当执行未定义指令时会进入这种模式
    System : 使用和User模式相同寄存器集的特权模式
    Cortex-A特有模式:
    Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;
    也是一种特权模式
    
    总结:特定的模式下,执行特定的代码,完成特定的功能
    
【6】ARM寄存器组织
    每种模式下,只能使用自己模式下的寄存器,
    cortex-a总共有40个寄存器
    ARM7,9,11总共有37个寄存器
    
    R0-R15,cpsr spsr
    
    ARMv7-》每个寄存器可以存放32位数据
    ARMv8-》A64-》每个可以存放64位数据
            A32-》每个可以存放32位数据
    
    寄存器由ARM公司提供的,每个寄存器可以存放一个
    32位(64位)的数据,这个存放数据的空间没有地址。
    每个地址都给了一个编号--》r0-r15,cpsr,spsr 
    r0-r15,cpsr,spsr寄存器表示地址空间。
    
    r13->sp  the stack pointer
        栈指针寄存器
        栈顶的地址
    


    r14->lr   the link register 
        链接寄存器
        存放程序的放回地址
    
    r15->pc  the program counter register 
        程序计数寄存器
        存放当前取指指令的地址
        ARM指令--》PC自动加4  (以字节对齐)
        Thumb指令--》PC自动加2


    cpsr->  current program status register
        当前程序的运行状态
        ARM状态 THUMB状态
        当前程序的运行模式

    spsr-> saved program status register
        保存程序状态寄存器
        用于保存cpsr
        
【7】CPSR寄存器详解
    N[31]:运算结果为负数  N位被自动置1,否则为0、
    Z[30]:运算结果为0  Z位被自动置1,否则为0
    c[29]:
        加法:如果产生进位,C位被自动置1,否则为0
            进位:低32位向高32位进位
        减法:如果产生借位,C位被自动清0,否则为1
            借位:低32位向高32位借位
    v[28]:符号位发生变化,v位被自动置1,否则为0
    
    I[7]:IRQ使能位
        I = 1: 禁止IRQ中断
        I = 0:使能IRQ中断
    
    F[6]:FIQ使能位
        F = 1: 禁止FIQ中断
        F = 0:使能FIQ中断
    
    T[5]:状态位
        T = 0:ARM状态
        T = 1:Thumb状态
    
    M[4:0]:模式位
        10000      User mode;    
        10001     FIQ mode;
        10010     IRQ mode        
        10011     SVC mode;
        10111      Abort mode;  
        11011     Undfined mode;  
        11111     System mode;      
        10110     Monitor mode;   
        
【8】PC程序计数寄存器
    当前程序处于ARM状态,执行ARM指令集
    ARM指令每条指令占32位内存空间
    ARM指令必须以字为单位对齐
    指令存放的地址,地址必须为4的整数倍
    PC值由[31:2]位决定,[1:0]位没有定义
    
    (所以指令不能halfword / byte对齐).        
    0b0000 0000
    0b0000 0100
    0b0000 1000
    0b0000 1100
    ……
    
    当前程序处于Thumb状态,执行Thumb指令集
    Thumb指令每条指令占16位内存空间
    Thumb指令必须以半字为单位对齐
    指令存放的地址,地址必须为2的整数倍
    PC值由[31:1]位决定,[0]位没有定义
            
    0b0000 0010
    0b0000 0100
    0b0000 0110
    0b0000 1000
    ……
    
【9】大小端对齐
    

    大端对齐:低地址放高有效位,高地址放低有效位
    小端对齐:低地址放低有效位,高地址放高有效位
    ARM采用的小端对齐
    
【10】三级流水线
    取指   译码   执行 
    取指:从地址中将指令取出,交给译码器
    译码:翻译指令,交给执行器
    执行:完成一定的功能,将结果返回给寄存器
    
    取指器,译码器,执行器:三个独立的硬件,执行互不干扰。
    每个都是单周期的器件。
    
周期    指令1    指令2    指令3    指令4    指令5
  1        取指 
  2        译码    取指 
  3        执行      译码     取指 
  4                执行      译码     取指 
  5                        执行      译码     取指 
  6                                执行      译码 
  7                                        执行

    ARM7:三级流水线
    ARM9:五级流水线
    ARM10:六级流水线
    ARM11::八级流水线       
    cortex-a9:十三级流水线
    cortex-a53:简单的8级流水线

 

猜你喜欢

转载自blog.csdn.net/UemTuBXuR/article/details/89348612