ARM嵌入式系统核心知识点

ARM嵌入式系统核心知识点 这里写自定义目录标题ARM嵌入式系统核心知识点一、整体硬件架构二、存储系统RAM vs ROM vs Flash1. RAM随机存储器2. ROM只读存储器3. Flash闪存4. 存储速度金字塔三、CPU 核心寄存器详解四、内存结构冯诺依曼结构Von Neumann哈佛结构Harvard现实中的折中改进型哈佛五、栈Stack相关知识1. 栈的类型2. 流水线Pipeline六、两个关键硬件单元提升 ARM 运行效率 / 实现地址管理是中高端 ARM 的核心组件1. Cache缓存2. MMU内存管理单元总结SoC 与嵌入式系统核心知识点一、核心概念速查二、SoC 总线架构图里最核心的部分1. 总线分层2. 总线的三种类型三、ARM 处理器系列分类四、指令集架构RISC vs CISC**ARM工作模式的总结**异常处理ARM嵌入式系统核心知识点PC 只存“下一条指令的地址”LR 只存“当前函数的返回地址”。如果一个函数里面又调用了别的函数LR 就会被新的返回地址覆盖原来的返回地址会丢。栈就是用来“保存旧 LR”防止丢失栈先进后出SP栈指针指向当前栈的栈顶位置Cache 是介于 CPU 与内存之间的高速缓冲用来存放“最近/常用”数据与指令减少 CPU 等待内存的时间从而提升性能。但并不是所有 MCU 都有 Cache一、整体硬件架构这是一个典型的ARM 嵌入式系统硬件组成核心ARM 处理器CPU供电与时钟电源给整个系统供电晶振时钟提供稳定的工作频率决定 CPU 运算速度复位让系统回到初始状态存储设备内存 (RAM)临时数据存储掉电丢失Flash (ROM)永久数据存储掉电不丢失外设输入 / 输出设备比如按键、LED、串口等ARM 最小系统ARM 微处理器芯片 电源 时钟 复位 存储器调试 / 编程接口二、存储系统RAM vs ROM vs Flash1. RAM随机存储器特点访问速度快但掉电数据丢失分类SRAM静态 RAM速度最快常用于 CPU 缓存CacheDRAM动态 RAM需要刷新容量更大SDRAM同步动态 RAM与时钟同步效率更高DDR 内存双倍速率 SDRAM现在电脑 / 手机主流内存2. ROM只读存储器特点掉电数据不丢失早期只能读现在可擦写分类PROM可编程 ROM只能写一次EPROM可擦除可编程 ROM紫外线擦除EEPROM电可擦除可编程 ROM用电擦除更方便3. Flash闪存结合了 RAM 和 ROM 的优点访问速度快 掉电数据不丢失是现在嵌入式设备比如单片机、手机的主要存储介质4. 存储速度金字塔速度 / 价格从高到低寄存器 Cache RAM ROM/Flash寄存器CPU 内部最快、最贵容量最小CacheCPU 和内存之间的缓存速度介于两者之间RAM内存临时存数据ROM/Flash永久存程序和数据三、CPU 核心寄存器详解寄存器是 ARM 中访问速度最快的存储直接和 CPU 交互笔记里的寄存器是 ARM 最核心的通用 / 专用寄存器各自有固定且唯一的作用无特殊情况不能混用按功能分两类通用寄存器R0~R12作用专门存储普通数据比如程序运行中的变量、计算中间值特点无固定用途程序员可自由使用是 ARM 编程中最常用的寄存器。ARM CPU 内部有一组寄存器用来临时存数据和控制程序执行寄存器英文全称功能通俗解释R0~R12通用寄存器用来存临时数据比如计算时的变量PCProgram Counter程序计数器永远指向下一条要执行的指令地址自动 4ARM 指令长度 4 字节LRLink Register链接寄存器存函数调用的返回地址函数执行完后跳回这里SPStack Pointer栈指针指向当前栈的栈顶位置CPSRCurrent Program Status Register当前程序状态寄存器控制进位、溢出、中断、工作模式、大小端等SPSRSaved Program Status Register保存 CPSR 的备份用于异常 / 中断恢复ALUArithmetic Logic Unit运算单元真正做加减乘除、逻辑运算的硬件电路Cache缓存分 D-Cache数据缓存和 I-Cache指令缓存把常用数据 / 指令提前从内存读到 CPU 里加速访问MMUMemory Management Unit内存管理单元把虚拟地址映射成物理地址实现内存保护和虚拟内存协处理器-辅助 CPU 完成特定功能比如浮点运算四、内存结构冯诺依曼结构Von Neumann特点指令和数据共用一套存储器与总线取指和取数不能同时进行优点硬件结构简单、成本低编程和内存管理方便统一地址空间适合通用计算缺点存在“冯诺依曼瓶颈”总线争用吞吐量受限难以并行取指/取数哈佛结构Harvard特点指令和数据分开存储、分开总线可同时取指和取数优点吞吐高性能好更适合高速/实时处理DSP、MCU 常见缺点硬件复杂、成本高编程/内存管理相对麻烦地址空间分离现实中的折中改进型哈佛指令/数据分离的 Cache但主存地址空间常统一兼顾性能与易用性五、栈Stack相关知识栈是一种先进后出的内存结构用来存函数调用、局部变量等。1. 栈的类型增栈栈顶向高地址增长减栈栈顶向低地址增长ARM 默认是减栈空栈SP 指向最后一个入栈的元素满栈SP 指向下一个可入栈的位置满减栈ARM 最常用的栈类型SP 指向栈顶元素向低地址增长满减栈ARM 最常用类型结合两维✅满栈SP 指向当前栈顶元素✅减栈入栈时 SP 向低地址移动2. 流水线PipelineARM CPU 用流水线提高执行效率把一条指令拆成 3 步取指从内存拿指令解码解析指令要做什么执行真正运算 / 读写数据流水线让 CPU 可以同时处理多条指令不用等上一条完全做完再开始下一条大大提升速度六、两个关键硬件单元提升 ARM 运行效率 / 实现地址管理是中高端 ARM 的核心组件1. Cache缓存位置访问速率介于寄存器和内存RAM之间作用CPU 访问内存的速度远慢于寄存器Cache 会把 CPU频繁访问的数据 / 指令临时存起来CPU 下次直接从 Cache 读取不用再访问内存大幅提高程序执行效率相当于 CPU 和内存之间的「高速中转站」。2. MMU内存管理单元核心作用实现虚拟地址到物理地址的映射通俗理解程序运行时使用的是「虚拟地址」程序员看到的地址而芯片实际的内存是「物理地址」硬件真实的地址MMU 负责把虚拟地址转换成物理地址让程序不用关心硬件的真实内存布局同时还能实现内存分区、权限管理、内存扩容等功能是操作系统运行的核心硬件基础。总结存储速度 / 成本排序寄存器 Cache RAM ROM / 闪存掉电不丢数据的是ROM、闪存ARM 主流架构哈佛结构数据 / 指令分开存速度快ARM 主流栈类型满减栈满栈 减栈专用寄存器核心考点PC 指向下下条指令、LR 存函数返回地址、SP 指向栈顶、SPSR 是 CPSR 的备份Cache 提效率、MMU 做虚拟 / 物理地址映射整个系统就是电源 时钟让 ARM 跑起来CPU 用寄存器和 Cache 快速算数据RAM 存临时数据Flash 存永久程序外设和外界交互程序靠 PC/LR 跳转用栈存函数调用靠流水线跑更快。SoC 与嵌入式系统核心知识点一、核心概念速查名词全称 / 通俗解释核心特点CPU中央处理单元整个系统的 “大脑”负责运算和控制SoC片上系统System on Chip把 CPU、总线、外设、存储控制器等都集成在一块芯片上就是你图里的整个蓝色方块MCU微控制器Microcontroller俗称 “单片机”把 CPU、内存、外设都打包在一起适合控制类场景比如家电、玩具MPU微处理器Microprocessor只包含 CPU 核心需要外接内存、外设才能工作比如电脑的 CPUDSP数字信号处理器擅长做音频 / 视频、信号滤波等数学运算处理速度比普通 CPU 快FPGA现场可编程门阵列硬件级可编程芯片可以自定义电路结构灵活性极高多核异构一个芯片里放多种不同架构的核心比如手机里既有 ARM 大核负责性能又有小核负责省电还有 DSP/NPU负责 AI二、SoC 总线架构图里最核心的部分图里展示了典型的AMBA 总线架构是 ARM 芯片的标准总线设计1. 总线分层AHB高速总线连接高速设备CPU、存储控制器管内存 / Flash、LCD 控制器管屏幕特点速度快、带宽高适合需要大量数据传输的模块APB外设总线连接低速外设GPIO通用 IO 口、UART串口、ADC模数转换、定时器特点速度慢、结构简单适合不需要高速传输的外设总线桥图里 AHB 和 APB 之间有连接实现高速和低速设备之间的数据交互2. 总线的三种类型任何总线都由这三类线组成地址总线单向传输告诉设备 “我要和谁通信”指定设备地址数据总线双向传输真正传递要读写的数据控制总线传递控制信号比如 “读 / 写”、“忙 / 就绪”协调设备之间的操作三、ARM 处理器系列分类ARM 是目前嵌入式领域最主流的处理器架构按应用场景分三大系列系列定位典型应用Cortex-A高性能、低功耗手机、平板、智能音箱等消费电子需要跑系统、玩 APPCortex-R强实时性汽车电子、工业控制要求指令在固定时间内完成不能延迟Cortex-M高能效、偏控制单片机、物联网设备、传感器比如智能灯、手环主打控制和低功耗四、指令集架构RISC vs CISC这是 CPU 设计的两种核心思路ARM 属于前者RISC精简指令集指令数量少、格式统一、每条指令执行时间短硬件设计简单、功耗低、执行效率高代表ARM、RISC-V、MIPSCISC复杂指令集指令数量多、功能强大一条指令能做很多事硬件设计复杂但编程更方便代表x86电脑 CPUARM 体系架构下总共有9 种工作模式7 种基本模式 2 种 Cortex-A 架构特有扩展模式。User用户模式是唯一的非特权模式权限最低。系统正常运行时绝大多数应用程序APP、普通任务都在这里执行特权模式共 8 个所有特权模式都能访问系统所有资源外设、内存、系统配置核心用于处理异常、系统初始化、安全监控。再细分为两类异常模式6 个触发特定异常 / 中断时CPU 自动切换进入。Cortex-A 特有特权模式2 个Cortex-A 架构消费电子级如手机为安全扩展的模式。ARM工作模式的总结模式数量总结9 种非特权模式1 个User特权模式8 个6 个基本异常模式 2 个 Cortex-A 特有模式中断模式优先级FIQ快中断 IRQ普通中断FIQ 优先级更高可打断 IRQIRQ 不能打断 FIQ只能等 FIQ 处理完。异常触发的通用规则任何异常 / 中断发生CPU 都会自动切换到对应的特权模式不会停留在 User 模式这是 ARM 的核心机制复位→SVC高优中断→FIQ低优中断→IRQ非法指令→Undef内存错误→AbortSystem 模式的特殊性它是特权模式但不对应任何异常只能手动切换寄存器和 User 完全共享这是它和其他特权模式最大的区别其他特权模式都有独立寄存器。Monitor 模式的专属场景只有 Cortex-A 架构手机、智能设备才有传统单片机Cortex-M、实时控制设备Cortex-R一般不支持记 “手机 / 消费电子专属安全模式”。这张图讲的是ARM 程序状态寄存器CPSR的内部结构。CPSR 是 ARM 核心寄存器中最重要的一个它控制着 CPU 的运行状态、运算结果标志和中断权限。E 位 (Endianness) - 大小端控制位功能决定 CPU 存储数据的字节顺序。E0小端模式Little-endian——低字节存低地址ARM 芯片默认如 STM32。E1大端模式Big-endian——高字节存低地址网络协议、部分单片机常用。在用户模式User下无法通过直接修改 Mode 位跳转到其他模式只能是条件达到才能跳转。异常处理在 ARM 中异常Exception就是系统的 “紧急事件”。当异常发生时CPU 必须立刻停止当前正在做的事转去处理这个事件。常见的异常类型右边表格里都有Reset复位开机 / 重启最高优先级。Undefined Instruction未定义指令CPU 看不懂你写的指令。Software Interrupt软中断 / SWI程序主动请求系统服务。Prefetch Abort预取中止取指令时内存出错比如指令区非法。Data Abort数据中止读 / 写数据时内存出错比如数组越界。IRQ外部中断外设请求比如按键、串口收到数据。FIQ快速中断高优先级外设请求比如高速数据传输。当异常发生时CPU 会像 “交警” 一样立刻自动执行一系列操作不需要我们写代码干预这是硬件级的自动响应步骤 1备份现场 —— 拷贝 CPSR 到 SPSR操作CPSR - SPSR_mode大白话把当前的 “工作状态”比如运算结果标志位 N/Z/C/V、中断是否禁止、当前模式备份到对应异常模式的SPSR寄存器里。例子如果是 IRQ 异常就把 CPSR 备份到SPSR_IRQ中。为什么等下处理完异常要回到原来的工作不备份就回不去了步骤 2强制进入 ARM 状态操作修改 CPSR 的T 位为0。大白话强制 CPU 切换到ARM 指令集状态执行异常处理函数。笔记重点异常处理一定只能执行 ARM 指令因为 Thumb 指令是 16 位不够存复杂的跳转和保护现场逻辑。步骤 3切换工作模式操作修改 CPSR 的M [4:0] 位进入对应的特权模式。大白话从普通的 User 模式切到有权限的系统模式比如 IRQ - IRQ 模式SVC - SVC 模式。例子进入 IRQ 异常时CPU 自动把模式改成IRQ 工作模式。步骤 4禁止对应中断防止干扰操作设置 CPSR 的I 位 / F 位为1。大白话IRQ 异常置位I1禁止普通中断防止被更低优先级的中断打断。FIQ 异常置位F1禁止快速中断。目的保证当前这个紧急异常能被处理完不被其他中断插队。步骤 5保存返回地址 —— 设置 LR操作把返回地址保存到LR_链接寄存器。大白话异常发生时PC 指向下一条要执行的指令。CPU 把这个 “下一条指令的地址” 保存到 LR 里。例子进入 IRQ 时保存地址到LR_IRQ。关键等异常处理完我们要从 LR 里拿回这个地址回到原来的地方继续执行步骤 6跳转到异常处理入口 —— 设置 PC操作PC 异常向量地址。大白话CPU 强制 PC 跳转到一个固定的地址向量表那里写着 “异常处理函数” 的入口。例子进入 IRQ 时PC 被强制赋值为0x00000018对应右边表格的偏移量。异常处理完了CPU 要回到原来的工作状态这时候要做2 个反向操作恢复工作状态从 SPSR 恢复 CPSR操作SPSR_mode - CPSR大白话把步骤 1 备份在 SPSR 里的 “现场”还原回 CPSR。效果CPU 恢复到原来的模式User、原来的中断禁止状态、原来的运算标志。恢复程序执行从 LR 恢复 PC操作LR_mode - PC大白话把 LR 里保存的 “返回地址” 赋值给 PC。效果CPU 回到异常发生前的下一条指令继续干活。⚠️ 关键笔记Note: 这些操作恢复 CPSR 和 PC只能在 ARM 态执行。异常发生时备份 CPSR 到 SPSR - 切 ARM 态 - 切特权模式 - 禁对应中断 - 存地址到 LR - 跳向量表 - 处理异常异常返回时恢复 CPSR 从 SPSR - 恢复 PC 从 LR原回 CPSR。效果CPU 恢复到原来的模式User、原来的中断禁止状态、原来的运算标志。恢复程序执行从 LR 恢复 PC操作LR_mode - PC大白话把 LR 里保存的 “返回地址” 赋值给 PC。效果CPU 回到异常发生前的下一条指令继续干活。⚠️ 关键笔记Note: 这些操作恢复 CPSR 和 PC只能在 ARM 态执行。异常发生时备份 CPSR 到 SPSR - 切 ARM 态 - 切特权模式 - 禁对应中断 - 存地址到 LR - 跳向量表 - 处理异常异常返回时恢复 CPSR 从 SPSR - 恢复 PC 从 LR