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.pswp.cn/bicheng/92728.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92728.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92728.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的高校社团管理系统的设计与实现(代码+LW文档+远程运行)

💯博主:✌全网拥有50W粉丝、博客专家、全栈领域优质创作者、平台优质Java创作者、专注于Java技术领域和毕业项目实战✌💯 💗开发技术:SpringBoot、Vue、SSM、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、…

F5发布业界首创集成式应用交付与安全平台,开启ADC 3.0新时代

在数字化转型加速与AI技术蓬勃发展的今天,企业对应用性能与安全的需求正经历革命性变革。传统应用架构已难以满足现代混合多云环境与AI驱动型业务场景的严苛要求。全球领先的应用安全和交付服务提供商F5(NASDAQ: FFIV),持续推动 F…

SELinux 入门指南

SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块,它提供了一种强制访问控制(Mandatory Access Control, MAC)机制。与传统的 Linux 自主访问控制(Discretionary Access Control, DAC)不同,SE…

ARMv8 MMU页表格式及地址转换过程分析

1.简介 CPU发出的虚拟地址经过MMU转换后得到物理地址,然后使用物理地址访问真实的硬件。虚拟地址和物理地址的映射关系保存在页表中,MMU需要遍历页表,才能将虚拟地址转换成物理地址。ARM64现在有两种大小的页表描述符,分别是ARMv8…

数据结构---二叉树(概念、特点、分类、特性、读取顺序、例题)、gdb调试指令、时间复杂度(概念、大O符号法、分类)

一、二叉树1、树1)概念 树是 n(n > 0) 个结点的有限集合。若 n0 ,为空树。在任意一个非空树中:(1)有且仅有一个特定的根结点;(2)当 n>1 时,其余结点可分为 …

安全基础DAY1-安全概述

信息安全现状及挑战常见术语信息安全的脆弱性及常见攻击网络环境的开放性其实就是人人可以上网,网上零成本。协议栈自身的脆弱性及常见攻击协议栈自身的脆弱性常见安全风险网络的基本攻击模式物理层--物理攻击前置知识 1.打开Apache服务 cd /etc/init.d ./apache2 s…

Claude Code 的核心能力与架构解析

技术分析介绍:Claude Code 的核心能力与架构解析一、概述 Claude Code 是由 Anthropic 推出的面向开发者的智能编码助手,它不仅仅是一个代码生成工具,更是一个具备记忆、工具调用、自主规划和环境感知能力的“智能代理”(Agentic …

Mac 电脑放在环境变量中的通用脚本

mac电脑下放在环境变量中,方便提高效率执行 注:相关路径需要根据实际情况进行更新 需要在 .bash_profile 文件中定义如下(路径需要做实际替换): source $HOME/software/scripts/base_profile.sh source $HOME/software…

UE蓝图节点Add Impulse和Add Torque in Radians

​​​​​​​Add Impulse:对刚体施加一次性的线性脉冲(瞬时改变量),改变速度(与质量有关,除非你勾 bVelChange)。Add Torque (in Radians):对刚体施加转矩/旋转力(向量…

大型语言模型幻觉检测与缓解技术研究综述

摘要 本文系统综述了大型语言模型(LLMs)中的幻觉现象及其检测与缓解技术。研究首先从认知机制角度分析了幻觉产生的理论根源,包括模型对语言先验的过度依赖、训练数据偏差以及推理过程中的信息衰减等问题。在技术层面,综述将现有方法归纳为三类&#xff…

【数据结构初阶】--二叉树(二)

😘个人主页:Cx330❀ 👀个人简介:一个正在努力奋斗逆天改命的二本觉悟生 📖个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》 前言:上篇博客我们学习了有关树的概念和相关术语的介绍&…

jmm 指令重排 缓存可见性 Volatile 内存屏障

CPU指令重排 CPU指令重排是指CPU为了提高指令执行效率,可能会对指令的执行顺序进行优化,使得(单线程下)指令的实际执行顺序与代码中的顺序不同,但结果是一致的。 这种优化是通过乱序执行和缓存读写重排来实现的。 乱序…

卡车手机远程启动一键启动无钥匙进入有哪些好处

随着汽车科技的发展,卡车智能化升级已成为趋势,其中手机控车、远程启动、无钥匙进入及一键启动等功能显著提升了驾驶便捷性与安全性。以下从功能特点、技术原理、适用场景及改装建议等方面展开说明。一、核心功能及技术特点1. 无钥匙进入系统自动感应操作…

【pyqt5】SP_(Standard Pixmap)的标准图标常量及其对应的图标

目录 **常见SP_图标分类及用途** **1. 箭头和导航图标** **2. 文件和编辑操作** **3. 系统状态和通知** **4. 应用程序和菜单** **5. 数据视图控件** **完整列表(部分)** **使用建议** **6. 数据操作图标** **7. 编辑和文本操作** **8. 媒体控制图标** **9. 系统和应用状态**…

VS Git巨坑合并分支失败导致多项无关改变

基于主分支创建的临时分支上进行了一些开发,合并回主分支,期间主分支没有进行任何更改还是创建临时分支时的状态,但合并莫名其妙报错 “1 uncommitted …”,我可以确认主分支和临时分支均没有尚未提交的更改。更恶心的是&#xff…

开始记录U9客开过程中听点滴

很久没有更新了。终于有时间可以拾起U9的研究当中。时间长了就生疏了很多,记录下来备查吧。用这个工具可以生成一个VS 2022的项目,在指定的地方写自已的代码既可。BE插件,Busing Plugin 商业插件。总结一下,BE插件是应用于某一个单…

C# 异步编程(使用异步Lambda表达式)

使用异步Lambda表达式 到目前为止,本章只介绍了异步方法。但我们曾经说过,你还可以使用异步匿名方法和异步 Lambda表达式。这些构造尤其适合那些只有少量工作要做的事件处理程序。下面的代码片段将 一个表达式注册为一个按钮点击事件的事件处理程序。 st…

K8S云原生监控方案Prometheus+grafana

目录 1. 概述 1.1 系统架构 1.1.1 架构图 ​编辑 1.2 环境准备 2. 部署prometheus 2.1 创建Namespace 2.2 创建ConfigMap资源 2.3 创建ServiceAccount,Clusterrole,Clusterrolebinding,Service,Deployment,in…

Matplotlib库:Python数据可视化的基石,发现它的美

Matplotlib是Python中最基础、最广泛使用的数据可视化库,它提供了类似MATLAB的绘图接口,能够创建高质量的静态、动态和交互式图表。作为科学计算和数据可视化的核心工具,Matplotlib几乎成为Python数据科学生态系统的标准可视化组件。 今天与…

每日算法刷题Day59:8.9:leetcode 队列8道题,用时2h30min

一、基础 1.套路 1.队列常用在 BFS 中&#xff0c;见 网格图题单 和 图论题单。 2.队列(queue)是容器适配器&#xff0c;功能较少。 队尾插入元素&#xff0c;队首弹出元素&#xff0c;可以访问队首元素、队尾元素和队列长度。 无begin(),end()等迭代器 queue<int> qu…