嵌入式与ARM内核基础体系梳理

入门导读

如果你是第一次接触嵌入式,这篇文章可以帮你建立一张完整的知识地图:从"什么是嵌入式系统"开始,逐层往下拆------先搞清楚硬件由哪些部件组成、存储器怎么分类,再理解处理器架构和指令集的区别,最后深入ARM32内核的寄存器、流水线、移位指令和编译流程。每一节都对应嵌入式开发中最常遇到的基础概念,读完你就能把"单片机""ARM""Cortex-M""MMU""流水线"这些词串成一条线,而不是零散地记。


一、嵌入式系统基础概念

嵌入式系统:以应用为中心、以计算机技术为基础,软硬件可裁剪的专用计算机系统。设计需要综合考量功耗、体积、环境适应性、稳定性、可靠性等需求。

嵌入式系统三层架构:

  1. 应用层(APP):上层业务应用程序
  2. 操作系统层(SYS):嵌入式操作系统,负责资源调度管理
  3. 硬件系统层:底层硬件电路、处理器、外设

计算机系统两大组成:硬件系统 + 软件系统。软件系统分为应用软件、系统软件。

计算机硬件五大核心部件

运算器、控制器、存储器、输入设备、输出设备。

运算器 + 控制器集成在一起,就是CPU。

各类处理器简介

  • CPU(中央处理器):通用型强大处理器,侧重通用计算
  • GPU(图形处理器):图形图像处理单元,并行计算能力强
  • FPU(浮点运算单元):专门负责浮点数运算
  • NPU(神经网络处理器):面向AI神经网络运算

嵌入式领域常用处理器:

  1. MPU 微处理器:通用型,侧重复杂运算,如ARM Cortex-A系列
  2. MCU 微控制器:集成度高,侧重控制,也就是常说的单片机

单片机:单片微型计算机系统,片上集成CPU、RAM、ROM、外设

  1. DSP 数字信号处理器:专为高强度数学、信号处理设计
  2. SoC 片上系统:集成设计理念,把MPU、MCU、DSP、外设等全部集成在同一块芯片,形成完整系统

存储器分类

  1. RAM 随机存取存储器

    • 可被处理器直接寻址
    • 单位空间价格高
    • 易失性存储器,断电丢失数据
    • 读写速度快
  2. ROM 只读存储器

    • 一般不可直接寻址
    • 单位存储价格低
    • 非易失存储器,断电数据保留
    • 读写速率偏低

二、处理器架构与指令集

主流架构:X86、ARM、MIPS、RISC-V

指令集分类:

  • CISC 复杂指令集:代表X86,指令繁多,长度不等
  • RISC 精简指令集:代表ARM,指令少、定长,流水线执行

ARM指令集版本:ARMv1 ~ v9

ARM内核分类:

  • Cortex‑A:应用处理器(带MMU,跑Linux)
  • Cortex‑R:实时内核
  • Cortex‑M:微控制器内核(MCU,无MMU,单片机)

三、ARM32内核硬件模型

ARM32位内核,机器字长32bit。

1. 内部核心模块

  • 通用寄存器 R0~R15
  • ALU:算术逻辑运算单元,完成加减、逻辑运算
  • Cache高速缓存:分为I-Cache(指令缓存)、D-Cache(数据缓存),提升访问速度
  • MMU 内存管理单元:完成虚拟内存 ↔ 物理内存地址转换;开启MMU使用虚拟地址空间;关闭MMU直接访问物理地址

总线:

  • AHB:先进高速总线,接高速设备
  • APB:先进外设总线,接低速外设(GPIO、UART、PWM、Timer)

2. ARM关键寄存器

  • CPSR:当前程序状态寄存器,保存N/Z/C/V等条件标志位
  • SPSR:备份程序状态寄存器,异常发生时保存CPSR现场
  • R13(SP):栈指针寄存器,指向栈顶
  • R14(LR):链接寄存器,保存子程序返回地址
  • R15(PC):程序计数器,保存当前取指地址

3. 内存空间与栈帧

虚拟内存空间划分:代码段、只读段、已初始化全局、未初始化、栈、堆。

  • 代码段:存放编译后的程序指令
  • 系统栈:用于函数调用,保存局部变量、返回地址,每一次函数调用生成独立栈帧

函数调用时,LR保存返回地址,栈用来保存函数局部变量与现场。


四、ARM流水线

经典三级流水线:取指 → 译码 → 执行

流水线并行工作,同一时刻多条指令同时处于不同阶段,提升指令吞吐。


五、ARM移位指令等价关系

ARM支持在MOV指令内附带移位操作,等价独立移位指令:

MOV复合指令 等价标准移位指令
MOV{S} <Rd>, <Rm>, ASR #n ASR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, LSL #n LSL{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, LSR #n LSR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, ROR #n ROR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, ASR <Rs> ASR{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, LSL <Rs> LSL{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, LSR <Rs> LSR{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, ROR <Rs> ROR{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, RRX RRX{S} <Rd>, <Rm>

ASR算术右移、LSL逻辑左移、LSR逻辑右移、ROR循环右移、RRX带进位循环右移。


六、编译流程简述

C源码到可执行文件完整流程:

bash 复制代码
gcc -E main.c -o main.i    // 预处理
gcc -S main.i -o main.s    // 编译,生成汇编
gcc -c main.s -o main.o    // 汇编,生成目标文件
gcc main.o -o main.out     // 链接,生成可执行程序
相关推荐
打工仔折腾 AI1 小时前
后端部署避坑:吃透IPv4地址、网络接口与CIDR前缀的实际应用
arm开发·人工智能·后端·python·性能优化
工控存储研习1 天前
嵌入式设备启动时间优化:从上电到应用就绪,每一毫秒怎么抠
arm开发
a5986521 天前
云手机怎么选?ARM服务器原生架构和X86模拟器差别很大
服务器·arm开发·智能手机
李某学编程2 天前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
XMAIPC_Robot2 天前
基于 i.MX95 平台在新一代工业控制器中的应用 — 工业车载平板、半导体设备主控方案解析
arm开发·人工智能·机器学习·fpga开发·rk3588+fpga·i.mx95
女神下凡2 天前
芯参谋(71):全桥电机驱动电路设计指南
arm开发·stm32·单片机·嵌入式硬件·硬件工程·设计规范·1024程序员节
szxinmai主板定制专家2 天前
基于 AM62x + Artix-7 的低功耗 ARM+FPGA 平台在轨道交通车门控制中的应用
arm开发·人工智能·fpga开发·zynq·am62x
幻智星科技2 天前
我砍掉了FPGA里的ARM核项目反而提前交付了
arm开发·网络协议·fpga开发·硬件架构
女神下凡3 天前
芯参谋(69):LED恒流驱动芯片电路设计指南
arm开发·人工智能·单片机·嵌入式硬件·设计规范
工控存储研习3 天前
瑞芯微平台存储系统设计:DDR、eMMC、SPI NOR、SPI NAND怎么配才合理
arm开发