当前位置: 首页 > news >正文

ARM 架构与技术综述

目录

认识 ARM

ARM 发展历史

指令集

ARM 公司产品分类

ARM 体系结构

数据类型约定

处理器的 32 位和 64 位含义

指令集

ARM 处理器的工作模式

CPU (内核) 组成

寄存器

时钟


认识 ARM

  • ARM 可以指:

    1. 一家公司。
    2. 一种技术。
    3. 一系列处理器。
  • 架构:ARM 架构包括:

    • arm-v4
    • arm-v5
    • arm-v6
    • arm-v7 (32 位)
    • arm-v8 (64 位)

    这些架构定义了处理器所支持的指令集。

  • 内核

    • Cortex-A 系列(例如 A9, A53, A73, A77)
    • ARM 将其内核授权给芯片制造商,后者在此基础上添加额外的功能和外设,从而制造出 SoC(片上系统)。
  • SoC (System On Chip)

    • 示例包括 S5P6818、Snapdragon 855(Qualcomm)、Kirin 990(Hisilicon)等。
  • S5P6818

    • S5P6818 是一个具体的 SoC 示例,但具体细节需要查阅资料来确认。

ARM 发展历史
  • 1978年:CPU 公司(Cambridge Processing Unit,剑桥处理单元)成立。
  • 1979年:Acorn Computer 成立,从事个人计算机组装业务。
  • 1985年:开发出 32 位、8 MHz 的 RISC 架构处理器,该芯片被称为 ARM(Acorn RISC Machine)。
  • 1990年
    • 苹果公司出资 150 万英镑,VLSI 技术公司出资 25 万英镑。
    • 12 名工程师加上技术专利共同创立 ARM 公司(Advanced RISC Machines)。
    • ARM 公司本身不直接生产芯片,而是授权其技术并提供解决方案。
  • 2016年:日本软银集团收购 ARM。
指令集
  • 精简指令集 (RISC):选择了一些较为简单且使用频率高的指令。
    • 指令宽度固定,多为单周期指令。
    • 例如,如果有一个加法运算器,则没有乘法运算器,计算 3 * 3 就需要通过 3 + 3 + 3 来实现。
  • 复杂指令集 (CISC):注重指令的功能性,指令周期和宽度不固定。

eg精简:可以编译后,用反汇编查看代码指令。

编译源代码

arm-linux-gnueabi-gcc 1.c -o a.out

检查文件属性:

file a.out

反汇编 ELF 文件:

arm-linux-gnueabi-objdump -D a.out > a.dis
ARM 公司产品分类
  • Cortex-A:针对高端的基于虚拟内存的操作系统和应用程序设计。
    • 高通、联发科、海思、三星、飞思卡尔等公司的产品。
  • Cortex-R:针对实时系统的高性能解决方案。
    • 例如汽车电子、照相机等。
  • Cortex-M:针对成本和功耗敏感的 MCU 和终端应用。
    • 通常不运行操作系统,或者运行 RTOS 如 FreeRTOS、μC/OS-II、LiteOS 等。
    • 意法半导体 (ST) 的 STM32 系列等。
ARM 体系结构
  • ARM-v8 (A):Cortex-A53 (8 核) → S5P6818 → 主频 1.4 GHz
数据类型约定
  • ARM-v7 架构:32 位处理器
    • char:8 位
    • halfword:16 位
    • word:32 位
    • doubleword:64 位 (Cortex-A)
  • ARM-v8 架构:64 位处理器
    • 向下兼容 32 位
    • char:8 位
    • halfword:16 位
    • word:32 位
    • doubleword:64 位 (Cortex-A)
    • quadword:128 位 (ARM-v8)

处理器的 32 位和 64 位含义
  • 32 位:一条指令可以处理 32 位的数据。
  • 64 位:一条指令可以处理 64 位的数据。
指令集
  • ARM-v7 架构
    • ARM 指令集 (32 位)
    • Thumb 指令集 (16 位)
  • ARM-v8 架构
    • 向下兼容 ARM-v7 架构
    • ARM 指令集:A64, A32
    • Thumb 指令集:T32, T16
    • 不论是 A64 还是 A32,每条指令都占用 32 位空间。
    • 不论是 T32 还是 T16,每条指令都占用 16 位空间。
ARM 处理器的工作模式
  • ARM7 至 ARM11 有七种基本工作模式:

    • User:非特权模式,大多数任务在此模式下执行。
    • FIQ:当发生高优先级中断时进入该模式。
    • IRQ:当发生低优先级中断时进入该模式。

FIQ和IRQ打断当前正在做的事去做其他的事情,做了再回来继续做自己的事情。鼠标键盘等都是这样实现的。(Linux内核会有中断,驱动写中断驱动代码)

    • Supervisor (SVC):当复位或软中断指令执行时进入该模式。

(任务的切换会切入这个模式,权限最高的模式,刚启动的时候在这个模式下,权限高,可以做一些核心的操作。进行系统调用的时候会切换这个模式。)

    • Abort:当指令存取异常时进入该模式。
    • Undef:当执行未定义指令时进入该模式。
    • System:具有与 User 模式相同寄存器集的特权模式。

保证不同任务每次调用同一个函数都是从头开始。

  • Cortex-A 系列特有的模式:

    • Monitor:为了安全性而扩展出来的用于执行安全监控代码的模式;也是一种特权模式。

特定的模式拥有特定的权限,执行特定的代码,完成特定的功能

CPU (内核) 组成
  • 运算器:执行加法等运算。
  • 控制器:控制指令执行流程。
  • 寄存器:存储机器码,由 ARM 公司集成到 CPU 内部。
    • A32:每个寄存器可以存储一个 32 位数据。
    • A64:每个寄存器可以存储一个 64 位数据。

寄存器
  • ARM7, ARM9, ARM11 有 37 个 32 位寄存器:

    • 1 个作为 PC (program counter)。
    • 1 个作为 CPSR (current program status register)。
    • 5 个作为 SPSR (saved program status registers)。
    • 30 个通用寄存器。
  • Cortex-A 系列 多出 3 个寄存器,共有 40 个 32 位寄存器:

    • Monitor 模式的 r13_mon, r14_mon, spsr_mon。
  • R0-R15, CPSR, SPSR:由 ARM 公司提供的寄存器,每个都是 32 位宽。

    • 这些寄存器没有物理地址,只有唯一的编号,通过编号可以访问相应的地址空间。
  • R13:栈指针寄存器 (stack pointer, sp):存放栈顶地址。

  • R14:链接寄存器 (link register, lr):函数调用时保存返回地址。

  • R15:程序计数寄存器 (program counter, pc):存放当前取指指令的地址。

  • CPSR:当前程序状态寄存器 (current program status register, cpsr):存储当前程序运行状态。

  • SPSR:保存程序状态的寄存器 (saved program status register, spsr):用于保存 CPSR。

时钟
  • 负责发出 CPU 开始计时的时钟信号。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 模型表达方式
  • fastadmin插件市场暂不可用,是否切换到本地插件
  • 【Vue】全局组件和局部组件
  • 四大内存区域揭秘:你真的了解你的程序吗?
  • 用VBA在Word文档中快速查找到黄色底纹内容
  • JAVA项目基于SSM的教师管理系统
  • ClinicalAgent:结合大模型的临床试验多智能体系统
  • WebStock会话
  • Golang内存管理——堆分配
  • 手把手教你OpenCV常见滤波(高斯,中值,均值)C++
  • Spring中是如何实现IoC和DI的?
  • JVM—运行时数据区域
  • 大语言模型时代的挑战与机遇:青年发展、教育变革与就业前景
  • DataStream Connector的JDBC Sink
  • [知识点]-[最小生成树]
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【翻译】babel对TC39装饰器草案的实现
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Facebook AccountKit 接入的坑点
  • HTTP那些事
  • Laravel Mix运行时关于es2015报错解决方案
  • Laravel 实践之路: 数据库迁移与数据填充
  • Laravel核心解读--Facades
  • Promise面试题,控制异步流程
  • SQLServer插入数据
  • Vue ES6 Jade Scss Webpack Gulp
  • 阿里云Kubernetes容器服务上体验Knative
  • 第2章 网络文档
  • 官方解决所有 npm 全局安装权限问题
  • 京东美团研发面经
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • #QT(一种朴素的计算器实现方法)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (超详细)语音信号处理之特征提取
  • (分布式缓存)Redis持久化
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (过滤器)Filter和(监听器)listener
  • (六)Hibernate的二级缓存
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (四)js前端开发中设计模式之工厂方法模式
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转) Android中ViewStub组件使用
  • .Family_物联网
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET6实现破解Modbus poll点表配置文件
  • .net访问oracle数据库性能问题
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)