嵌入式与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 #nASR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, LSL #nLSL{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, LSR #nLSR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, ROR #nROR{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>, RRXRRX{S} <Rd>, <Rm>

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


六、编译流程简述

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

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     // 链接,生成可执行程序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值