嵌入式之ARM(架构,寄存器,处理器模式,所用工具)

ARM架构和处理器

  • ARM系列处理器:
    在这里插入图片描述

  • 各个系列区别与功能演变
    在这里插入图片描述

  • 相关术语介绍
    (1)流水线:CPU运转机制:取指令(F) —> 译指令 (D)—> 执行(E)三级流水,还有多级流水
    (2)DSP:数据信号处理
    (3)Jazelle :ARM里针对JAVA的编程模型
    (4)ThumbEE:Thumb指令(辅助ARM指令的16位指令)的环境变量
    (5)Thumb-2:(16位和32位指令并存)
    (6)TrustZone:ARM架构中的安全架构
    (7)VFP:Vector Floating-Point(矢量浮点运算机制)
    (8)Advanced SIMD(NEON)
    (9)Lararge Physical Address Extension(LPAE)
    (10)Virtualization
    (11)Big LITTLE :例如主处理器:A15,协处理器:A8,解决能耗问题

  • ARM v7-A系列关键技术点
    (1)32位 RISC 处理器,有16个32位可见寄存器
    (2) 哈弗结构(不是普林斯顿结构)(指令和数据分开存储)
    (3)Thumb-2指令支持
    (4)VFP 和 NEON 可选
    (5)向后兼容
    (6)4GB虚拟地址大小和最小4GB物理地址(4GB寻址)
    (7)大小端数据访问支持

一些常用工具

  • QEMU
    QEMU 是一套由Fabrice BElla让的所编写的模拟处理器的自由软件。它类似与Brochs,PearPC,但其具有某些后两者都不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度

  • BusyBox
    BusyBox是一个集成了一百多个常用linux命令和工具的软件。别称为linux工具中的瑞士军刀。它集成压缩理论linux的许多工具和命令,也包含了Andriod系统自带的Sheel。

  • Scratchbox
    Scratchbox是一个帮助嵌入式Linux跨平台编译工具的集合,其主要目的是使得嵌入式Linux应用程序开发更加容易,他也提供了完整的集成工具链以用来跨平台编译集成一个Linux发布版。

  • U-Boot
    U-Boot,大名鼎鼎的开源BootLoader

  • UEFI and Tianocore
    UEFI 统一可扩展部件接口

ARM软件工具链

GNU-包含gcc and ARM-包含 armcc

用工具链生成镜像(Image)过程如下:
在这里插入图片描述

  • GNU工具链可以用来开发内核也可以用来开发应用程序,包含如下组件:
    – GNU make
    – GNU Compiler Collection (GCC)
    – GNU binutils linker,assembler and other object/library manipulation tools
    – GNU Debugger(GDB)
    – GNU build system (autotools)
    – GNU C library (glibc or eglibc)

  • Ubuntu 安装标准工具链
    sudo apt-get install gcc g+±doc

  • Ubuntu 安装交叉工具链
    sudo apt-get install gcc-arm-linux-gnueabi

ARM寄存器,处理器模式和指令集

  • CPU组成
    在这里插入图片描述

  • 处理器模式
    Cortex-A系列有:ARM架构有9种处理器模式8种特权模式,一种非特权模式即用户模式
    在这里插入图片描述
    其中User模式称为非特权模式,而其他8种称为特权模式

  • Cortex-A系列的寄存器
    在这里插入图片描述
    用户模式:R0-R12 13个通用寄存器 4个特殊寄存器,
    FIQ等特权模式下:R0-R7寄存器与用户模式的R0-R7寄存器共享(其他模式类似(根据上图可以得出)

  • 寄存器总结
    (1)R0 - R12 通用寄存器,方通用数据,32BIT
    (2)各个模式的 R0 -R12 与 USER 模式是共享的(处理FIQ,R8 - R12),PC,CPSR 共享的
    (3)USER模式没有SPSR

    解释
    (1)SP --栈指针(存储栈地址)
    (2)LR --链接寄存器,存储子程序返回地址
    (3)PC --程序计数器
    (4)APSR/CPSR --应用程序状态寄存器、当前程序状态寄存器
    (5)SPSR --已存储程序状态寄存器

  • 举例sample
    (1)程序返回,其实就是MOV PC LR
    (2)跳转 BL

  • CPST 指令格式:
    在这里插入图片描述
    其中:
    N — ALU负数
    Z — ALU零位
    C — ALU进位操作
    V — ALU操作溢出
    Q — 累积饱和 instructions
    J — 是否 Jaelle 状态
    GE[3:0] — SIMD 指令使用
    IT[7:2] — Thumb-2 指令的 if ,then 条件执行
    E — 操作存储的字节顺序
    A — 是否 disable 异步 abort
    I — disables IRQ 是否禁用IRQ
    F — disables FIQ,是否禁用FIQ

  • 小端存储和大端存储
    (1)大端存储:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。
    (2)小端存储:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
    如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示
    在这里插入图片描述
    小端:较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址。
    大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。

  • 指令流水线Pipeline
    在这里插入图片描述
    扩展到5级流水

分解指令过程:
(1)指令预读取:决定从内存哪儿去取指令 PreFetch
(2)指令读取:从内存系统中读取指令 Fetch
(3)指令译码:解读指令并且生成控制信号
(4)寄存器读取:提供寄存器的值给操作单元执行
(5)分配:分配指令给执行单元
(6)执行:实际的ALU单元处理
(7)内存访问:数据的存取
(8)寄存器回写:更新运行结果到寄存器

猜你喜欢

转载自blog.csdn.net/qq_41782149/article/details/96138374