ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

新手自学嵌入式 | 学习日记:ARM架构初探与基础概念梳理

新手自学嵌入式 | 学习日记:ARM架构初探与基础概念梳理 一、RISC 与 CISC 指令集CISC 复杂指令集计算机指令功能丰富硬件芯片设计复杂成本高、体积大、功耗高代表x86 PC 处理器。RISC 精简指令集计算机ARM 属于 RISC 架构RISCReduced Instruction Set Computer指令功能少硬件电路简单成本低、体积小、功耗低ARM 公司只设计 CPU 架构不生产芯片把架构授权给半导体厂商ST、NXP、三星等生产实际芯片。二、ARM 内核分类Cortex 系列ARMv7、ARMv8 为汇编指令集版本Cortex 是内核系列Cortex‑AApplication 应用处理器面向复杂操作系统跑 Linux、安卓A5、A7IMX6ULL、STM32MP157、A8、A9、A725玄戒 O1Cortex‑RReal‑Time 实时内核汽车电子、工业实时控制强实时性Cortex‑MMCU 单片机内核单片机领域裸机开发M3STM32F103M4STM32F407、STM32MP157STM32F103ST 意法半导体生产内核是 ARM Cortex‑M3冯・诺依曼架构指令和数据共用同一块存储器空间Cortex‑A7 属于 32 位冯诺依曼架构。三、ARM 内核寄存器Cortex‑A7 内核寄存器基础表格寄存器别名作用说明R0‑R11通用寄存器用来临时存放运算数据R12IP内部暂存寄存器R13SP Stack Pointer栈指针栈规则先进后出后进先出出栈从 sp 指向位置取数据spR14LR Link Register链接寄存器保存函数返回地址R15PC Program Counter程序计数器存指令地址指向下一条要执行的指令注意Cortex‑A7 总共有40 个寄存器物理通用寄存器一共 16 个R0~R15不同工作模式下会切换备份寄存器。状态寄存器CPSR当前程序状态寄存器保存当前 CPU 运行状态、条件标志位、处理器工作模式。SPSR备份程序状态寄存器发生异常时备份保存 CPSR 现场异常处理完毕后用来恢复 CPSR。ALU 算术逻辑单元负责完成 CPU 的加减、逻辑与或非移位等运算。四、MMU CACHEMMU 内存管理单元MMUMemory Management Unit功能把程序的虚拟地址转换为物理地址依靠页表完成地址映射。裸机开发关闭 MMU直接操作物理地址Linux 驱动开发打开 MMU使用虚拟地址每个进程拥有独立 4GB 虚拟地址空间。CACHE 高速缓存CACHE 是 CPU 和内存之间的高速小容量存储器。速度CPU Cache 内存 DDR作用缓解 CPU 和 DDR 内存之间速度差距把频繁访问的数据 / 指令缓存到高速 Cache减少访问低速内存次数提升 CPU 运行效率。五、冯・诺依曼架构 和 哈佛架构冯・诺依曼架构指令、数据存放在同一个存储器共用一套地址 / 数据总线。取指令和读写数据不能完全并行。代表Cortex‑A7。哈佛架构指令存储器、数据存储器相互独立分开两套总线。取指令和读写数据可以同时进行效率高。代表Cortex‑M 系列单片机。六、大小端存储模式针对多字节数据在内存的存放规则大端模式低地址存高字节高地址存低字节网络协议常用小端模式低地址存低字节高地址存高字节ARM CPU 默认小端示例int i 0xFFFFFFFF; i 1;发生无符号溢出结果为 0。七、ARM 三种移位指令LSR 逻辑右移无符号数移位右移高位补 01011 0010 LSR #1 → 0101 1001ASR 算术右移有符号数移位高位补符号位1011 0010 ASR #1 → 1101 1001ROR 循环右移最低位移出补到最高位1011 0010 ROR #1 → 0101 1001八、总线、存储器件、交叉编译总线单总线内核外设共用一组信号线速度慢多总线AHB 先进高速总线给高速外设使用Flash 存储Nor Flash拥有地址、数据总线可以按单个字节寻址可以直接运行程序。Nand Flash块设备以 512 字节为块读写不能直接执行代码。RAM易失存储器断电数据丢失Flash 非易失断电保存数据。交叉编译在 PCx86 平台编写编译程序编译出可以在 ARM 平台运行的二进制程序。PC 叫宿主机ARM 叫目标板。九、中断向量表 异常向量表 异常处理流程中断向量表数组数组里面存放中断服务函数入口地址。异常向量表数组存放跳转到异常服务函数的汇编指令。向量表基地址可以设置为0x00000000或者0xFFFF0000不同芯片有差异。 异常类型Reset 复位、未定义指令、软中断、预取中止、数据中止、IRQ 普通中断、FIQ 快速中断。ARM 异常处理完整流程发生异常CPU 硬件自动保存现场把 CPSR 复制到对应模式 SPSR将返回地址存入该模式下 LRCPU 硬件自动切换处理器工作模式跳转到异常向量表对应的入口地址执行异常向量表内跳转指令进入异常服务函数在异常服务函数内部做业务处理异常返回从 SPSR 恢复 CPSR从 LR 修正后恢复 PC回到被打断的程序继续执行。十、ARM 处理器工作模式Cortex‑A7ARMv7一共有7 种处理器工作模式用户模式 (User)普通应用程序运行模式系统模式 (System)特权模式和 User 共用寄存器快中断模式 (FIQ)处理快速中断中断模式 (IRQ)普通外设中断管理模式 (SVC)复位、系统调用进入操作系统内核常用模式中止模式 (Abort)内存访问出错数据 / 预取异常进入未定义模式 (Undef)遇到未识别指令进入除 User 用户模式是非特权模式其余 6 种均为特权模式可以访问全部硬件资源。重点问题ARM 处理器工作模式有几种答Cortex‑A7 (ARMv7) 共 7 种工作模式User、System、FIQ、IRQ、SVC、Abort、Undef1 种非特权 (User)6 种特权模式。Cortex‑A7 内核有多少个寄存器答物理寄存器总数 40 个不同模式会切换分组寄存器。Cortex‑A7 内核有多少个通用寄存器PC、LR、SP 通用寄存器作用答基础通用寄存器 16 个 R0~R15PC (R15)程序计数器保存下一条将要执行指令的地址LR (R14) 链接寄存器保存函数调用返回地址异常模式下保存异常返回地址SP (R13) 栈指针指向当前栈顶管理栈空间栈遵循先进后出。CPSR 寄存器和 SPSR 寄存器作用答CPSR当前程序状态寄存器保存当前 CPU 的条件标志位、中断使能位、处理器工作模式所有模式共用。SPSR备份程序状态寄存器每种异常特权模式拥有一份发生异常时备份 CPSR异常返回时恢复 CPSR。User 用户模式没有 SPSR。什么是 MMU答内存管理单元完成虚拟地址→物理地址转换借助页表裸机关闭 MMU 直接访问物理地址Linux 操作系统打开 MMU实现进程独立虚拟地址空间、内存保护。什么是 CACHE答高速缓存位于 CPU 和 DDR 内存之间高速存储部件解决 CPU 运算速度远大于内存读写速度的矛盾缓存常用指令和数据减少访问低速内存次数提升整体性能。冯・诺依曼架构和哈佛架构的区别答冯诺依曼指令与数据共用同一套存储器与总线取指令和读写数据不能并行Cortex‑A7 使用该架构。哈佛架构指令存储器、数据存储器相互独立两套独立总线取指令和读写数据可以同时执行Cortex‑M 单片机使用。异常处理流程答①硬件自动保存现场CPSR→SPSR异常返回地址存入对应模式 LR ②硬件自动切换 CPU 特权工作模式 ③跳转到异常向量表对应条目 ④跳转执行异常服务函数处理业务 ⑤异常返回SPSR 恢复 CPSRLR 修正后赋值给 PC回到原程序继续运行。IMX6ULL 芯片所搭载的内核版本答NXP IMX6ULL 搭载Cortex‑A7内核。Cortex‑A7 使用的汇编指令集版本答ARMv7‑A指令集版本。nor flash 和 nand flash 区别答Nor Flash具备地址、数据总线可以字节寻址支持片上执行 (XIP)容量一般偏小成本高。Nand Flash块设备以块512 字节单位读写不能直接运行代码容量大、成本低需要驱动完成读写。学习小结ARM 是 RISC 精简指令集架构只做架构授权不造芯片。PC、LR、SP、CPSR/SPSR 是 ARM 汇编最核心要分清各自用途7 种处理器模式为面试高频。MMU 区分裸机关和 Linux开开发场景Cache 解决 CPU 与内存速度不匹配。移位指令要分清逻辑右移、算术右移、循环右移考试、面试高频考点。异常向量表是裸机中断启动的基础Reset 复位向量是上电第一条执行代码入口。Cortex‑A7 内核40 个物理寄存器指令集 ARMv7‑AIMX6ULL 使用 Cortex‑A7。后续计划ARM 汇编基础、裸机点灯实验C 语言和汇编混合编程。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进