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

嵌入式 - ARM1

一.嵌入式系统基础概述

嵌入式系统是以应用为中心、以计算机技术为基础,软硬件可裁剪的专用计算机系统。

计算机系统的软件基本组成:系统软件(如操作系统)和应用软件
计算机系统的硬件基本组成运算器、控制器、存储器、输入设备、输出设备

CPU (Center Processing Unit):中央处理器是一种通用的强大的处理器
GPU (Graphics Processing Unit):图形处理器
FPU(Float Processing Unit):浮点型运算单元
MPU(Micro Process Unit):微处理器偏向处理复杂任务,高端嵌入式设备的核心计算
MCU(Micro Contral Unit):微控制器偏向控制和高集成度
DSP(Digital signal Process):数字信号处理器专为高度复杂数学运算设计
SOC(System On Chip):片上系统是一个集成化的概念,将 MPU、MCU、GPU、DSP 等多种
功能模块集成在一块芯片上

二.处理器架构与指令集

1.CISC 与 RISC 

1. CISC(Complex Instuction Set Computer)

        复杂指令集计算机,指令集庞大且复杂,试图用一条指令完成多种操作,不同指令周期差异大,一些复杂指令需要多个时钟周期,可以减少程序指令条数,硬件结构复杂

2. RISC(Reduced Instuction Set Computer)

        精简指令集计算机,选取使用频率高的简单指令,绝大多数指令在单时钟周期内完成,指令格式规整,可以提高指令的并行度和执行效率,硬件实现相对简单

2. 冯诺依曼架构

        指令和数据共享同一个存储空间和同一套总线,硬件结构简单,成本低,灵活性高,但CPU无法同时取指令和去操作数,效率低下,如通用计算机

3. 哈佛架构

        指令和数据拥有独立的存储空间和独立的总线,即拥有两套总线,结构复杂,成本高,不够灵活,可以同时读取指令和数据,如DSP\MCU

4. ARM 内核版本与系列

核心架构版本:ARM1 - ARM11、ARM - A、ARM - R、ARM - M
指令集版本:V1 - V9

        ARM内核属于改进的哈佛架构,拥有哈佛架构的高性能CPU缓存和总线,以及冯诺依曼架构的灵活性接口


三、计算机体系结构

1. ARM内核

1. ALU(Arithmetic Logic Unit)

        算术逻辑单元,负责执行所有数学运算(加减乘除)和逻辑运算(与或非)

2. 寄存器组

        ​​r0 - r12​​:通用寄存器,用于暂存数据和地址。

        ​​r13 (sp - Stack Pointer)​​:​​栈指针​​,指向当前栈顶地址。

        ​​r14 (lr - Link Register)​​:​​链接寄存器​​,用于存储子程序的返回地址。

        ​​r15 (pc - Program Counter)​​:​​程序计数器​​,存放下一条要执行的指令的地址。

3. MMU(内存管理单元)

        负责虚拟地址到物理地址的转换​、内存访问权限的管理。这是实现现代操作系统(如Linux)内存隔离和保护的基础。

4. Cache(高速缓存)

        一种小型但极快的内存,用于缓存CPU最近可能访问的指令和数据,以弥补CPU和慢速主内存之间的速度差距。

5. CPSR / SPSR (程序状态寄存器)

CPSR:存储当前程序的状态信息,如运算结果是否为负(N)、零(Z)、进位(C)、溢出(V)等

              即NZCV标志位,以及中断禁用、运行模式等。

SPSR:当发生异常或中断时,用于备份CPSR的状态,以便异常处理结束后能恢复现场。

2. 总线系统

1. 地址总线

        CPU通过它指定要访问的内存或外设的地址。宽度(32位)决定了CPU的寻址能力

2. 数据总线

        在CPU和内存/外设之间传输实际数据

3. 控制总线

        传输各种控制信号(读/写、中断、时钟等)

4. 总线类型

        AHB(Advansed High-performance Bus):连接高速设备,如内存控制器、DMA
APB(Advanced Peripheral Bus):一种典型的多总线分层结构,用于优化系统性能。
连接低速外设,如GPIO、UART、Timer。

3. 外设寄存器

1. GPIO Register

2. timer

3. Uart

4. RAM(Random Access Memory)

4. 内存映射

        0x00000000 - 0xFFFFFFFF​​        是一个32位系统的完整4GB线性地址空间。

地址空间从低到高通常被划分为不同区域:

        ​​代码段 (.text)​​:存放程序指令。

        ​​已初始化数据段 (.data)​​:存放已初始化的全局变量和静态变量。

        ​​未初始化数据段 (.bss)​​:存放未初始化的全局变量和静态变量。

        ​​堆区 (heap)​​:动态分配内存的区域(malloc)。

        ​​栈区 (stack)​​:用于存储函数调用时的局部变量、返回地址等​。顶部区域常保留给内核使用。

四、ARM工作模式

​用户模式 (User)​​:正常程序执行模式,权限受限。

​FIQ模式 (Fast Interrupt)​​:为处理高速数据传输的中断而设计。

​IRQ模式 (Interrupt)​​:用于处理普通中断。

​管理模式 (Supervisor)​​:CPU复位或执行SWI指令后进入的操作系统保护模式。

​中止模式 (Abort)​​:当存取异常时进入,用于处理内存访问错误。

​未定义模式 (Undefined)​​:当执行未定义指令时进入。

​系统模式 (System)​​:运行特权级操作系统任务的特权模式

五、异常向量表

        异常向量表是一块固定的内存地址区域(0x0000 0000,0xFFFF 0000)
存放着各种异常处理程序的入口地址

它是CPU硬件与软件异常处理程序之间的桥梁,是操作系统实现中断管理和错误处理的基础机制。

工作原理
当发生异常(如中断、复位、执行未定义指令等)时,CPU会自动跳转到向量表中对应的固定地址去执行指令。每个异常类型在表中有且仅有一个占位。

异常向量表地址分配

0x00:复位(Reset)

0x04:未定义指令(Undifined Instruction)

0x08:软件中断(SWI)

0x0C:指令预取中止(Prefetch Abort)

0x10:数据访问中止(Data Abort)

0x18:IRQ中断

0x1C:FIQ中断​


文章转载自:

http://AgWLBREg.bzrwz.cn
http://S2KXy7Vv.bzrwz.cn
http://V6VHCVzn.bzrwz.cn
http://m94yDKxC.bzrwz.cn
http://faugEiu7.bzrwz.cn
http://XlDka8OL.bzrwz.cn
http://3y80YLbE.bzrwz.cn
http://H6iiVWUg.bzrwz.cn
http://BIDj2mIL.bzrwz.cn
http://olU4U6Eg.bzrwz.cn
http://0medwEce.bzrwz.cn
http://AEHA8MyF.bzrwz.cn
http://gYnlNGgj.bzrwz.cn
http://ILythb8o.bzrwz.cn
http://950mMrQ4.bzrwz.cn
http://CcSwfn5E.bzrwz.cn
http://Tn7l12aa.bzrwz.cn
http://1DMgut7W.bzrwz.cn
http://8vza27eK.bzrwz.cn
http://a06nFEWj.bzrwz.cn
http://q4AxBIE4.bzrwz.cn
http://QnwDgkL4.bzrwz.cn
http://Va5i5riR.bzrwz.cn
http://sgzBbd5F.bzrwz.cn
http://gphaaUIi.bzrwz.cn
http://hbizjdW2.bzrwz.cn
http://e3g46R2X.bzrwz.cn
http://wbO6OslC.bzrwz.cn
http://kR8mmZ9P.bzrwz.cn
http://QQD1i7uw.bzrwz.cn
http://www.dtcms.com/a/373290.html

相关文章:

  • 零基础入门AI:Transformer详解(自注意力机制、前馈神经网络等)
  • 小红书获取用户作品列表API接口操作指南
  • MySQL——事务、MVCC
  • vue2 elementUI 登录页面实现回车提交登录的方法
  • 数据库约束表的设计
  • ScanNet: Richly-annotated 3D Reconstructions of Indoor Scenes 数据集构建
  • c++primer 个人学习总结--高级主题
  • 【AI】AI 评测入门(二):Prompt 迭代实战从“能跑通”到“能落地”
  • 经验分享:如何让SAP B1数据库性能提升50%
  • kaggle_吃鸡_数据预处理随机森林
  • Excel随机金额或数字分配方法
  • cocos异步加载问题
  • Spring Boot 多数据源配置
  • 信奥赛csp初赛高频考点真题分类解析之:基本运算
  • langchain 输出解析器 Output Parser
  • [数据结构] 栈 · Stack
  • 大语言模型的链式思维推理:从理论到实践
  • C语言快速排序
  • 软件可靠性失效严重程度分类与深度解析
  • 如何让dify分类器更加精准的分类?
  • C# Web API 前端传入参数时间为Utc
  • Python爬虫实战:研究3D plotting模块,构建房地产二手房数据采集和分析系统
  • sglang pytorch NCCL hang分析
  • langchain 缓存 Caching
  • Spark生态全景图:图计算与边缘计算的创新实践
  • 最长上升/下降子序列的长度(动态规划)
  • 自动驾驶中的传感器技术38——Lidar(13)
  • 计算机组成原理:计算机的分类
  • Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件
  • 辨析——汇编 shell C语言