1. 课程导入
大家好,我是你们这趟ARM底层之旅的向导。做嵌入式这行快十五年了,从最早的ARM7TDMI玩到现在的Cortex-A78,摸过的芯片型号少说也有上百款。今天咱们先不急着写代码,把地基打牢——ARM到底是什么?它为什么能统治嵌入式世界?
1.1 ARM发展史:一家不造芯片的芯片公司
ARM的故事得从1985年说起。英国Acorn电脑公司想给自己的电脑找个处理器,当时Intel的80286太贵,Motorola的68000又太复杂。Acorn的工程师们一拍桌子:我们自己造!于是就有了第一颗ARM芯片——ARM1。
ARM这个名字,全称是Acorn RISC Machine。后来Acorn把ARM部门独立出来,改名叫Advanced RISC Machines。有意思的是,ARM公司自己从来不生产芯片,只卖IP授权。这个商业模式,当年很多人看不懂,现在看简直是神来之笔。
ARM发展里程碑
- 1985年:ARM1诞生,26位地址总线,3微米工艺
- 1993年:ARM7系列发布,成为最经典的32位MCU核心
- 2002年:ARM11系列,首次引入SIMD指令
- 2005年:Cortex系列发布,分A/R/M三条产品线
- 2011年:ARMv8架构发布,正式进入64位时代
- 2021年:ARMv9架构发布,强化安全与AI能力
我个人印象最深的是ARM7TDMI。刚入行那会儿,公司做一款工业控制器,用的就是三星的S3C44B0X,ARM7TDMI核心。那颗芯片没有MMU,跑不了Linux,只能跑uC/OS。但它的稳定性让我服气——连续运行三年没重启过。
3.2 ARM Cortex系列分类:三条产品线,各司其职
2005年是个分水岭。ARM把产品线重新梳理,推出了Cortex品牌。从此不再叫ARM7、ARM9、ARM11,而是分成三个方向:
| 系列 | 全称 | 典型应用 | 操作系统 | MMU |
|---|---|---|---|---|
| Cortex-A | Application | 手机、平板、服务器 | Linux、Android、Windows | 有 |
| Cortex-R | Real-time | 汽车、工业控制、基站 | RTOS、裸机 | 有(MPU) |
| Cortex-M | Microcontroller | IoT、传感器、电机控制 | RTOS、裸机 | 无 |
你想想看,这三条线把整个嵌入式市场全包了。从几毛钱的MCU到几千块的服务器芯片,底层架构都是ARM的。
避坑指南:选型时别搞混了。我曾经见过一个项目,工程师拿Cortex-M4去做图像处理,结果跑不动。M系列没有MMU,跑不了Linux,浮点性能也有限。该上A系列的时候别省钱。
具体到每个系列,我挑几个重点说说:
- Cortex-M系列:M0/M0+主打超低功耗,M3是平衡之王,M4加了DSP和FPU,M7性能怪兽。做IoT终端,M0+和M3用得最多。
- Cortex-R系列:R4/R5/R7,硬实时,中断响应极快。汽车刹车系统、硬盘控制器,这些场景必须用R系列。
- Cortex-A系列:A5/A7/A8/A9/A15/A53/A72/A78... 性能逐代翻倍。手机SoC里的大核小核,都是A系列。
1.3 ARMv7 vs ARMv8架构对比:32位到64位的跨越
ARMv7和ARMv8,这是两个时代的架构。ARMv7是32位,ARMv8是64位。但区别远不止位数这么简单。
| 对比项 | ARMv7 | ARMv8 |
|---|---|---|
| 指令集宽度 | 32位 | 32位/64位兼容 |
| 通用寄存器 | 16个(R0-R15) | 31个(X0-X30) |
| 地址空间 | 4GB | 16EB |
| 异常模型 | 7种异常模式 | 4个异常等级(EL0-EL3) |
| 浮点支持 | VFPv3/v4 | Advanced SIMD + FP |
| 虚拟化 | 可选扩展 | 原生支持 |
ARMv8最大的变化,是引入了AArch64和AArch32两种执行状态。AArch64跑64位指令,AArch32兼容老的32位代码。这意味着你可以在同一颗芯片上,同时跑64位的Linux和32位的裸机程序。
注意:ARMv8的异常模型完全重写了。ARMv7有7种异常模式(SVC、IRQ、FIQ、Abort、Undef、System、Monitor),ARMv8简化为4个异常等级(EL0-EL3)。EL0是用户态,EL1是内核态,EL2是Hypervisor,EL3是Secure Monitor。做Bootloader开发时,这个模型必须吃透。
我记得第一次移植U-Boot到ARMv8平台时,被异常等级搞晕了。ARMv7里直接写汇编进SVC模式就行,ARMv8得通过eret指令切换EL。调试了整整两天,才发现是EL级别没切对。
1.4 RISC设计哲学:少即是多
ARM是RISC(精简指令集计算机)的代表。RISC的核心思想,说白了就是:指令越简单,执行越快。
对比CISC(复杂指令集计算机,比如x86):
- RISC:指令长度固定,单周期执行,大量通用寄存器,Load/Store架构
- CISC:指令长度可变,微程序控制,寄存器少,内存操作指令多
ARM的RISC哲学体现在几个地方:
- Load/Store架构:只有Load和Store指令能访问内存,其他指令只操作寄存器。这简化了流水线设计。
- 条件执行:ARM指令可以带条件码,比如
ADDEQ R0, R1, R2,只有上次比较结果为相等时才执行。这减少了分支跳转。 - 桶形移位器:ARM的ALU前面有个桶形移位器,可以在一条指令里完成移位+运算。比如
ADD R0, R1, R2, LSL #2,R2左移2位再加到R1。
实战经验:做Bootloader时,RISC的Load/Store架构特别重要。因为Bootloader早期阶段MMU没开,所有地址都是物理地址。你写汇编操作外设寄存器时,必须用LDR/STR指令,不能直接读写内存地址。这个习惯一定要养成。
ARM的RISC设计还有一个特点——Thumb指令集。Thumb是ARM指令的压缩版本,每条指令16位,代码密度更高。Cortex-M系列只支持Thumb/Thumb-2,不支持ARM指令。这也是为什么M系列芯片Flash可以做得那么小。
1.5 本章知识体系总览
下面这张图,把ARM体系结构的核心脉络串起来了。建议你保存下来,后面每学一章都回来对照一下。
这张图把ARM体系结构的四个核心维度串起来了。发展史帮你理解ARM的演进逻辑,Cortex分类让你知道选型方向,ARMv7/v8对比是底层开发的基础,RISC哲学则是理解ARM指令设计的钥匙。