ARM 学习笔记:从入门到理解嵌入式系统核心

一、嵌入式系统的基本概念

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。它的设计目标是满足特定场景下的功能、可靠性、成本、体积和功耗要求。

一个典型的嵌入式系统可以分为三层:

  • 应用层(APS):直接面向用户的业务逻辑,比如智能家居里的灯光控制 APP。
  • 操作系统(OS):管理硬件资源,提供任务调度、内存管理等核心功能。
  • 硬件层:由 SoC、存储器、外设等组成,是整个系统的物理基础。

我用的开发板是正点原子的iMX6ULL,它的核心是 ARM Cortex-A7 架构,属于典型的嵌入式开发平台。


二、核心硬件与处理器

1. 计算机硬件系统组成

任何计算机的硬件都可以拆解为五大基本单元:

  • 运算器:负责算术和逻辑运算
  • 控制器:指挥协调各个部件工作
  • 存储器:分为内存(RAM)和外存(Flash 等)
  • 输入设备:比如按键、触摸屏
  • 输出设备:比如显示屏、LED 灯

2. 常见处理器类型

  • CPU:通用型处理器,负责复杂的逻辑控制和计算。
  • GPU:图形处理器,专门处理图像渲染。
  • MPU:微处理器,偏向处理能力,常用于高性能嵌入式场景。
  • MCU:微控制器,集成度高,偏向控制,比如 STM32 系列。
  • DSP:数字信号处理器,专门用于高强度数学运算,比如音频处理。
  • SoC:片上系统,把 CPU、GPU、外设控制器等集成在一颗芯片上,是现代嵌入式设备的主流选择。

3. CISC vs RISC

  • CISC(复杂指令集):比如 x86 架构,指令集丰富,单条指令功能强大,但硬件复杂度高。
  • RISC(精简指令集):比如 ARM 架构,指令集精简,执行效率高,功耗更低,非常适合嵌入式场景。

三、ARM 架构核心知识

1. ARM 家族与指令集

ARM 处理器家族非常庞大,常见的有:

  • 经典 ARM:ARM1~ARM11
  • Cortex 系列
    • Cortex-A:面向高性能应用(如手机、开发板)
    • Cortex-R:面向实时控制场景(如汽车电子)
    • Cortex-M:面向微控制器(如 STM32)

指令集版本也从 V1 发展到了 V9,我学习的 Cortex-A7 使用的是 ARMv7 架构,是 32 位的,指令长度为 4 字节。

2. 寄存器与核心模块

  • 通用寄存器:R0~R15,其中 R13 是栈指针(SP),R14 是链接寄存器(LR),R15 是程序计数器(PC)。
  • 状态寄存器:CPSR(当前程序状态寄存器)和 SPSR(备份程序状态寄存器),用来记录 CPU 的运行状态。
  • MMU(内存管理单元):负责虚拟地址到物理地址的映射,是操作系统实现多任务和内存保护的基础。
  • Cache:高速缓存,用来缓解 CPU 和内存之间的速度差距,分为指令 Cache 和数据 Cache。

四、存储器与内存布局

1. RAM 与 ROM

  • RAM(随机访问存储器):易失性存储,断电后数据丢失,但读写速度快,作为系统运行时的内存。
  • ROM(只读存储器):非易失性存储,断电后数据不丢失,用来存放启动代码和固件。

2. 程序的内存布局

一个运行中的程序在内存中会被划分为多个区域:

  • 代码段(.text):存放编译后的机器指令。
  • 数据段(.data):存放已初始化的全局变量。
  • BSS 段(.bss):存放未初始化的全局变量,程序启动时会被清零。
  • 堆(Heap):动态内存分配区域,由程序员手动管理(malloc/free)。
  • 栈(Stack):存放函数的局部变量和调用上下文,由系统自动管理。

3. 栈的工作原理

栈是一种 "后进先出"(LIFO)的数据结构。当函数调用发生时,系统会为该函数创建一个栈帧,里面包含:

  • 函数的局部变量
  • 函数的返回地址
  • 保存的寄存器值

栈的增长方向是从高地址到低地址,栈顶由 SP 寄存器指向。


五、总线与外设

1. 总线结构

嵌入式系统通过总线连接 CPU、内存和外设,常见的总线有:

  • AHB(高级高性能总线):连接高性能设备,如 CPU、内存控制器。
  • APB(先进外设总线):连接低速外设,如 UART、GPIO、I2C 等。

2. 常见外设

  • GPIO(通用输入输出):最基础的外设,可以用来控制 LED、读取按键状态等。
  • UART(通用异步收发器):用于串口通信,比如调试信息输出。
  • PWM(脉冲宽度调制):可以用来控制电机转速、LED 亮度等。

六、流水线技术

为了提高 CPU 的执行效率,ARM 采用了流水线技术。简单来说,就是把一条指令的执行过程拆分成多个阶段(比如预取、译码、执行),让不同的指令在不同的阶段并行执行。

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
starlaky2 天前
Django入门笔记
笔记·django
勇气要爆发2 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
勇气要爆发2 天前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain
别催小唐敲代码2 天前
嵌入式学习路线
学习
qianshanxue112 天前
计算机操作的一些笔记标题
笔记
土拨鼠烧电路2 天前
笔记11:数据中台:不是数据仓库,是业务能力复用的引擎
数据仓库·笔记
毛小茛2 天前
计算机系统概论——校验码
学习
土拨鼠烧电路2 天前
笔记14:集成与架构:连接孤岛,构建敏捷响应能力
笔记·架构