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

ARM体系结构

ARM体系结构

编程原理

从源代码到CPU执行过程

编译器
汇编器
Objcopy工具
总线
CPU内部指令流水线
.c高级语言源代码
.s汇编源代码
Elf格式二进制可执行程序
Bin格式烧录文件
CPU读入后先解码
CPU执行指令

体系结构

冯诺依曼结结构

程序和数据放在同一内存中,彼此不分离的结构。如:Intel CPU

  • 特点
    • 安全和稳定性不好
    • 处理起来简单

哈佛结构

程序(一般放在ROM、Flash中)和数据(一般放在RAM中)分开独立存放在不同的内存块中,彼此完全分离的结构。如:单片机、ARM CPU

  • 特点
    • 安全和稳定性高
    • 软件处理复杂

指令集

  • CISC复杂指令集
    • 设计理念:用最少的指令完成任务
    • CPU本身设计复杂,工艺复杂
    • 如:Intel CPU
  • RISC精简指令集
    • 设计理念:让软件完成具体的任务,CPU本身仅提供基本指令集
    • 编译器的设计变难了
    • 如:ARM CPU

总线编址方式

  • IO与内存独立编址
    使用专用的CPU指令来访问某种特定外设。如:Intel CPU
  • IO与内存统一编址
    把外设的寄存器当做一个内存地址来读写。如:ARM CPU

ARM CPU 工作模式

7个基本工作模式

  • 非特权模式
    • User:普通模式,大部分任务执行在这种模式
  • 特权模式
    • 系统模式
      • System:使用和User模式相同寄存器集的特权模式
    • 异常模式
      • FIQ:当高优先级(fast)中断产生时,进入这种模式
      • IRQ:当低优先级(normal)中断产生时,进入这种模式
      • Supervisor:当复位或软中断指令执行时,进入这种模式
      • Abort:当存取异常时,进入这种模式
      • Undef:当执行未定义指令时,进入这种模式

寄存器

寄存器特性

  • 寄存器属于CPU外设的硬件组成部分
  • CPU可以像访问内存一样访问寄存器
  • 寄存器设计的目的是留作外设被编程控制的“活动开关”
  • 寄存器中每个bit位都有特定含义,编程时需要位操作。如STM32寄存器编程
  • 单个寄存器的位宽一般和CPU的位宽一样,以实现最佳访问效率

寄存器分类

  • 通用寄存器
    • 是CPU的组成部分,ARM CPU有37个。
  • SFR(特殊功能寄存器)
    • 不在CPU中,而是存在于CPU的外设中,可通过访问外设的SFR来编程操控这个外设。

ARM CPU的37个寄存器

  • ARM 共有37个寄存器,但每种工作模式下最多只能看到18个寄存器,其他寄存器在当前模式下不可见。这种设计叫影子寄存器(banked register)
  • ARM 37个寄存器,都是32位长度
    • 30个:“通用”型
    • 1个:固定用作PC
    • 1个:固定用作CPSR
    • 5个:固定用作5种异常模式下的SPSR
  • CPSR程序状态寄存器
    • CPSR中各个bit位表明了CPU的某些状态信息
    • CPSR中的I、F位和开中断、关中断有关
    • CPSR的mode位决定了CPU的工作模式
  • PC(Program control register)程序指针
    • 整个CPU只有一个PC,PC指向哪里,CPU就会执行哪条指令
      在这里插入图片描述

ARM 异常处理方式

异常

  • 正常工作之外的流程都叫异常
  • 异常会打断正在执行的工作,且异常处理完成后继续回来执行原来的工作
  • 中断是异常的一种

异常向量表

  • 所有的CPU都有异常向量表,是CPU设计时就设定好的,是硬件决定的
  • 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常)
  • 异常向量表是硬件向软件提供的处理异常的支持

异常处理机制

  • 当异常产生时,ARM core进行现场保护:
    • 拷贝CPSR到SPSR_
    • 设置适当的CPSR位:
      • 改变处理器状态进入ARM态
      • 改变处理器模式进入相应的异常模式
      • 如果需要,设置中断禁止位禁止中断
    • 保存返回地址到LR_
    • 设置PC为相应的异常向量
  • 返回时:
    • 从SPSR_恢复CPSR
    • 从LR_恢复PC

内存地址映射

以S5PV210为例,ARM Cortex-A8架构,32位CPU。
在这里插入图片描述

  • 相关术语表
术语描述
ROM(Read only Memory)只读存储器
RAM(Random access Memory)随机访问存储器
IROM(Internal ROM)内部ROM,集成到SOC内部的ROM
IRAM(Internal RAM)内部RAM,集成到SOC内部的RAM
DRAM(Dynamic RAM)动态RAM
SRAM(Static RAM)静态RAM
SFR(Special function Register)特殊功能寄存器

内存与外存

  • 内存/外存区别
术语用途描述
内存用来运行程序RAM,如DRAM、SRAM、DDR
外存用来存储程序和数据ROM,如Flash(Nand、iNand、U盘、SSD)、硬盘、光盘
  • 内存的区别
术语特点
SRAM容量小、价格高,优点是不需要软件初始化,上电直接就能用
DRAM容量大、价格低,缺点是上电后不能直接使用,需要软件初始化后才能使用
  • 外存的区别
术语特点
NorFlash容量小、价格高,优点是可以和CPU直接总线式相连,CPU上电后直接读取。一般用作启动介质
NandFlash容量大、价格低,缺点是不能总线式访问,上电时CPU不能直接读取,需要CPU先运行初始化软件,然后通过时序接口进行读写

SOC启动过程

启动过程

启动过程对比

类型描述
PC机很小容量的BIOS(NorFlash) + 很大容量的硬盘(类似于NandFlash) + 大容量的DRAM
单片机很小容量的NorFlash + 很小容量的SRAM
SoC外接的大容量Nand + 外接的大容量DRAM + SOC内置的SRAM

SOC启动步骤示例

  • 第一步:CPU上电后先从内部IROM中读取预先设置的代码(BL0),并执行。BL0代码,首先做一些基本初始化(CPU时钟,关看门狗…);然后判断选择启动模式(如通过OMPin设置),并从对应的外部存储器中去读取第一部分启动代码(BL1,大小为16KB)到内部SRAM。
  • 第二步:从IRAM中去运行上一步读取来的BL1(16KB)。BL1负责初始化NandFlash,然后将BL2读取到IRAM(剩余的80KB)。
  • 第三步:从IRAM运行BL2,BL2初始化DRAM;然后将OS读取到DRAM中,并启动OS。启动过程结束。
    在这里插入图片描述
    在这里插入图片描述
http://www.dtcms.com/a/322507.html

相关文章:

  • cross-env dotenv
  • 【QuPath 】QuPath 批量提取 SVS 文件元数据脚本
  • NLP:Transformer输出部分
  • DigitalProductId解密算法php调试版piddebug.php
  • Day02 员工管理,分类管理
  • 【线性代数】其他
  • 【Redis7.x】docker配置主从+sentinel监控遇到的问题与解决
  • 【LeetCode 热题 100】(六)矩阵
  • 解决本地连接服务器ollama的错误
  • 网站站长如何借助php推送示例提交网站内容加速百度收录?
  • 【26】C#实战篇—— 多个线程函数对同一个 Excel 文件进行写操作引起的文件冲突问题,解决方法
  • 代码随想录day60图论10
  • 使用 Ansys Discovery 进行动态设计和分析
  • Mac屏幕取色不准?探究原理和换算规则
  • Linux文件系统基石:透彻理解inode及其核心作用
  • LeetCode111~130题解
  • ABP VNext + Akka.NET:高并发处理与分布式计算
  • 【AGI】GPT-5:博士级AI助手的全面进化与协作智能时代的黎明
  • 如何输出一篇高质量的版本测试策略
  • WebGIS视角下基孔肯雅热流行风险地区分类实战解析
  • jupyter服务器创建账户加映射对外账户地址
  • stm32项目(24)——基于STM32的汽车CAN通信系统
  • React中实现完整的登录鉴权与权限控制系统
  • (一)React复习小满(userImmer/userMemo/useContext/userCallback/userRef)
  • 需求评审需要哪些角色参与
  • 嵌入式 - Linux软件编程
  • Web文件上传:本地与云存储实战
  • day 36_2025-08-09
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 Azure Data Studio
  • C# 通过第三方库INIFileParser管理INI配置文件