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哲学体现在几个地方:

  1. Load/Store架构:只有Load和Store指令能访问内存,其他指令只操作寄存器。这简化了流水线设计。
  2. 条件执行:ARM指令可以带条件码,比如ADDEQ R0, R1, R2,只有上次比较结果为相等时才执行。这减少了分支跳转。
  3. 桶形移位器: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 vs ARMv8 RISC设计哲学 ARM1 → ARM7 → ARM11 → Cortex 1985年诞生,英国Acorn Cortex-A:应用处理器 Cortex-R:实时处理器 Cortex-M:微控制器 32位 vs 64位 AArch64 / AArch32 异常等级 EL0-EL3 Load/Store架构 条件执行 桶形移位器 Bootloader开发需要掌握:异常模型、寄存器、指令集、MMU

这张图把ARM体系结构的四个核心维度串起来了。发展史帮你理解ARM的演进逻辑,Cortex分类让你知道选型方向,ARMv7/v8对比是底层开发的基础,RISC哲学则是理解ARM指令设计的钥匙。