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 采用了流水线技术。简单来说,就是把一条指令的执行过程拆分成多个阶段(比如预取、译码、执行),让不同的指令在不同的阶段并行执行。

相关推荐
tritone2 小时前
使用阿贝云免费云服务器学习Ansible的实践与感受
服务器·学习·ansible
刘某某.2 小时前
linux 常用命令学习
linux·运维·学习
有谁看见我的剑了?2 小时前
K8s crictl 客户端学习
学习·容器·kubernetes
AI_零食2 小时前
鸿蒙跨端框架Flutter学习day 2、常用UI组件-弹性布局进阶之道
学习·flutter·ui·华为·harmonyos·鸿蒙
Coovally AI模型快速验证2 小时前
从“单例模仿”到“多面融合”,视觉上下文学习迈向“团队协作”式提示融合
人工智能·学习·算法·yolo·计算机视觉·人机交互
JMchen1232 小时前
Android Activity管理工具类
android·java·学习·移动开发·android-studio
ghgxm5202 小时前
Fastapi_00_学习策略与学习计划
python·学习·前端框架·npm·fastapi
hkNaruto2 小时前
【AI】AI学习笔记:翻译:langGraph 持久化执行 以及文档部分理解
笔记·学习·microsoft
pixcarp2 小时前
Golang web工作原理详解
开发语言·后端·学习·http·golang·web