一、嵌入式系统的基本概念
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。它的设计目标是满足特定场景下的功能、可靠性、成本、体积和功耗要求。
一个典型的嵌入式系统可以分为三层:
- 应用层(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 采用了流水线技术。简单来说,就是把一条指令的执行过程拆分成多个阶段(比如预取、译码、执行),让不同的指令在不同的阶段并行执行。