嵌入式与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     // 链接,生成可执行程序
相关推荐
PiaoKe___1 小时前
从端云解耦到可编程 Android 实例:云手机架构解析与 Python 批量管控实战
arm开发·python·架构·自动化
Horn Still Sounds11 小时前
ARM嵌入式基础|内核、寄存器、架构、存储、汇编移位全面梳理
arm开发·单片机·嵌入式硬件·硬件架构
从零开始的嵌入式之旅14 小时前
day44
arm开发·经验分享·笔记·嵌入式硬件
2401_8628808221 小时前
ARM 嵌入式开发 ---知识点
arm开发·嵌入式硬件·物联网
AAA代码批发商1 天前
DAY43 ARM 体系结构学习笔记|嵌入式入门,从硬件组件到流水线、内存与栈帧
arm开发·笔记·学习
女神下凡1 天前
带NPU的电脑 和不带NPU的电脑 在使用上有什么不样
arm开发·单片机·pcm
T1mzhou2 天前
ARM64 Linux 6.10 内核驱动(12):dd.c:probe/ remove、延迟 probe
linux·服务器·c语言·arm开发·arm
Doraemomo2 天前
IMX6ULL裸机开发——系统主频和时钟配置
arm开发·嵌入式硬件·makefile·imx6ull
T1mzhou2 天前
ARM64 平台安全学习记录
linux·服务器·arm开发·arm