type
status
date
slug
summary
tags
category
icon
password
ARM架构培训
RISC与CISC
RISC(精简指令集计算机)是一种计算机架构,特点如下:
  • 简化的指令集:只包含常用、基本的指令
  • 固定的指令长度:通常所有指令都是相同长度
  • 更多的通用寄存器:减少内存访问次数
  • 加载/存储架构:只有特定指令可以访问内存
  • 流水线执行:指令可以在不同阶段并行处理
  • 更简单的译码逻辑:减少硬件复杂度
典型代表架构:ARM、RISC-V、MIPS、Power架构
CISC(复杂指令集计算机)是另一种计算机架构,特点如下:
  • 复杂的指令集:包含大量专用指令,有些指令能执行复杂操作
  • 可变指令长度:指令长度不固定
  • 较少的通用寄存器:更多依赖内存操作
  • 多种寻址模式:支持复杂的内存访问方式
  • 指令可直接在内存上操作:不需要先加载到寄存器
  • 硬件实现复杂:需要更多晶体管和复杂控制逻辑
典型代表架构:x86/x64(Intel和AMD)、VAX、IBM System/360和System/370
RISC与CISC对比:
  • RISC更适合移动设备(功耗低);CISC更适合复杂计算任务
  • 现代处理器往往融合两种架构的优点,如Intel处理器内部将CISC指令转换为RISC微操作
  • ARM逐渐向高性能领域拓展,x86也增加了功耗优化,两种架构界限变得模糊
冯诺伊曼架构-哈佛架构
定义
冯诺伊曼架构是经典的计算机体系结构,特点包括:
  • 存储程序概念:程序和数据存储在同一个存储器中
  • 单一存储器:指令和数据共享同一存储空间和总线
  • 顺序执行:指令按顺序一条一条执行
  • 统一的寻址方式:程序和数据使用相同的寻址机制
哈佛架构是另一种计算机体系结构,特点包括:
  • 分离的存储空间:指令和数据存储在物理上分开的存储器中
  • 独立的总线:指令和数据有各自独立的总线
  • 并行访问:可以同时访问指令和数据
  • 更高的效率:减少了内存访问瓶颈
  • 更好的安全性:程序代码与数据分离,降低了被恶意修改的风险
示意图
冯诺伊曼架构与哈佛架构的主要区别:
  • 冯诺伊曼架构使用单一存储空间和总线,指令和数据混合存储
  • 哈佛架构使用独立的存储空间和总线,指令和数据分开存储
  • 哈佛架构允许同时访问指令和数据,提高了执行效率
  • 许多现代微控制器使用修改的哈佛架构,特别是ARM处理器
 
ARM的架构
ARM架构是一系列基于RISC原则的处理器架构,由ARM公司(现为Arm Holdings)开发。以下是几种常见的ARM Cortex-M系列处理器架构:

Cortex-M0/M0+

Cortex-M0是ARM最简单、最小功耗的处理器核心,适用于低成本微控制器和嵌入式应用:
  • ARMv6-M架构,16位Thumb指令集(Thumb-1的子集)
  • 2级流水线,32位处理器
  • 无硬件除法,无DSP扩展
  • 最低功耗设计,核心面积小
  • 典型应用:简单传感器、IoT设备、低功耗控制系统
M0+是M0的增强版,提供更低的功耗和更好的性能/功耗比

Cortex-M4F

Cortex-M4是针对数字信号控制应用优化的处理器:
  • ARMv7-M架构,支持Thumb-2指令集
  • 3级流水线设计
  • 包含DSP(数字信号处理)指令扩展
  • F后缀表示包含FPU(浮点运算单元),支持单精度浮点运算
  • 具有MPU(内存保护单元)选项
  • SIMD(单指令多数据)指令支持
  • 典型应用:电机控制、音频处理、工业控制、汽车电子

Cortex-M33

Cortex-M33是为安全IoT应用设计的处理器:
  • 基于ARMv8-M架构,完全支持Thumb-2指令集
  • 内置TrustZone安全技术,提供硬件隔离的安全区域
  • 可选FPU和DSP扩展
  • 包含协处理器接口
  • 增强的调试和跟踪功能
  • 比M4系列提供更好的性能和功耗比
  • 典型应用:需要安全功能的IoT设备、边缘计算、智能传感器

核心架构比较

特性
Cortex-M0/M0+
Cortex-M4F
Cortex-M33
架构
ARMv6-M
ARMv7-M
ARMv8-M
内存架构
修改的哈佛架构
修改的哈佛架构
修改的哈佛架构
流水线
2级
3级
3级
指令集
Thumb子集
Thumb-2
Thumb-2
FPU
有(F版本)
可选
DSP
可选
TrustZone
性能
基准
~2.5倍M0
~3倍M0
 
ARM Cortex-M系列的发展体现了从低功耗简单应用到高性能安全应用的演进,每种处理器核心都针对特定应用场景进行了优化。在选择时,需要根据应用需求平衡性能、功耗、安全性和成本等因素。
ARM架构与内存架构
ARM架构与内存架构关系探讨:

ARM架构与冯诺伊曼/哈佛架构的关系

ARM架构是一种处理器指令集架构,而冯诺伊曼架构和哈佛架构是计算机系统的内存组织方式:
  • 现代ARM处理器采用的是修改的哈佛架构(Modified Harvard Architecture)
  • 这种修改的哈佛架构在物理上分离指令和数据缓存,但在主存储器层面共享同一物理存储空间
  • 实际应用中,ARM处理器结合了哈佛架构的高效性和冯诺伊曼架构的灵活性

ARM架构版本与内存架构的演进

ARM架构版本
内存架构特点
关键改进
指令集
应用场景
ARMv6-M
简化的修改哈佛架构
面向微控制器,简化的内存模型
16位Thumb指令集(Thumb-1子集)
低功耗微控制器,简单传感器应用
ARMv7-M
增强的修改哈佛架构
添加了MPU支持,提高内存保护能力
Thumb-2指令集,支持DSP指令
中等复杂度嵌入式系统,实时控制应用
ARMv7-A
更复杂的修改哈佛架构
支持虚拟内存(MMU)和多级缓存
32位ARM指令集和Thumb-2指令集,NEON SIMD扩展
智能手机,平板电脑,高性能嵌入式系统
ARMv8-M
安全增强的修改哈佛架构
添加TrustZone技术,支持安全/非安全内存区域隔离
增强的Thumb-2指令集,安全扩展指令
IoT设备,需要安全保障的嵌入式系统
ARMv8-A
高级修改哈佛架构
64位支持,增强的内存管理与保护
AArch64(64位)和AArch32(32位)双指令集,高级SIMD
服务器,高性能计算,高端移动设备

关键差异与联系

内存架构(冯诺伊曼/哈佛)与ARM架构的关系:
  • 架构层次不同:ARM架构定义了指令集和寄存器架构;内存架构定义了处理器如何访问内存
  • 互补关系:ARM架构规定了"做什么",而内存架构决定了"如何高效地做"
  • 实现差异:不同ARM系列采用不同程度的哈佛架构特性:
  • Cortex-M系列:更倾向于哈佛架构,有分离的指令和数据总线
  • Cortex-A系列:在高速缓存级别使用哈佛架构,但在系统级别更接近冯诺伊曼架构

ARM架构对内存架构的优化

ARM处理器在实现上融合了两种架构的优点:
  • L1缓存通常分为指令缓存和数据缓存(哈佛特性)
  • 统一的L2/L3缓存和主内存(冯诺伊曼特性)
  • 在处理器内部实现了高带宽的总线架构(如AXI、AHB等),优化内存访问
  • 现代ARM架构支持统一内存访问(UMA)和非统一内存访问(NUMA)等高级内存组织方式
总结:ARM架构是处理器的指令集架构,而冯诺伊曼/哈佛架构是内存组织方式。现代ARM处理器采用了修改的哈佛架构,在不同层次上结合两种架构的优点,以获得最佳的性能和功耗平衡。
Thumb指令集-以m33为例

Thumb指令集简介

Thumb指令集是ARM架构中的一种指令集,旨在提高代码密度,减少内存占用。对于嵌入式系统特别是存储空间有限的M33等微控制器尤为重要。

为什么需要Thumb指令集?

  • 传统32位ARM指令固定长度为4字节
  • Thumb指令压缩为16位(2字节),可节省约40%的代码空间
  • 特别适合内存受限的嵌入式系统
  • 降低了存储器带宽需求,减少功耗

Thumb-2技术(M33采用)

Thumb-2是对原始Thumb指令集的扩展,在Cortex-M33中得到全面支持:
  • 混合了16位和32位指令,兼顾代码密度和性能
  • 与原始Thumb相比,性能损失几乎为零
  • 保持了高代码密度的同时,还提供了完整的32位指令功能

M33中Thumb-2指令集的特点

Cortex-M33使用的Thumb-2指令集包含:
  • 基本算术和逻辑操作(加减乘除、与或非等)
  • 数据处理指令(移位、位操作、比较等)
  • 内存访问指令(加载/存储、多寄存器访问)
  • 控制流指令(分支、条件执行、函数调用)
  • DSP扩展指令(可选,用于数字信号处理)
  • 浮点运算指令(需要FPU支持)
  • 安全相关指令(支持TrustZone安全特性)

Thumb指令集实例(从零开始)

下面通过简单例子展示Thumb指令的基本使用:

1. 寄存器和基本算术

2. 内存访问

3. 条件分支

4. 循环结构

Thumb状态与ARM状态切换(M33特性)

Cortex-M33只运行在Thumb状态,无需在ARM和Thumb状态之间切换,这简化了编程模型。

常用指令分类详解

对于初学者,可以按功能将Thumb指令分为以下几类:

1. 数据移动指令

  • MOV/MOVS - 将值移动到寄存器
  • LDR/LDRB - 从内存加载字/字节到寄存器
  • STR/STRB - 存储寄存器值到内存(字/字节)
  • PUSH/POP - 入栈/出栈操作

2. 算术指令

  • ADD/ADDS - 加法
  • SUB/SUBS - 减法
  • MUL - 乘法
  • SDIV/UDIV - 有符号/无符号除法(M33支持)

3. 逻辑指令

  • AND - 按位与
  • ORR - 按位或
  • EOR - 按位异或
  • BIC - 位清除

4. 比较和分支指令

  • CMP - 比较
  • B - 无条件分支
  • BEQ - 相等时分支
  • BNE - 不相等时分支
  • BL/BLX - 带链接的分支(函数调用)

M33特有的指令(安全扩展)

由于Cortex-M33支持TrustZone安全技术,它添加了一些特有指令:
  • SG - 安全门指令(用于切换安全与非安全状态)
  • BXNS - 非安全状态下的分支和交换
  • BLXNS - 非安全状态下的带链接分支和交换

如何实践学习Thumb指令(从零开始)

  • 使用模拟器:如Keil MDK、IAR Embedded Workbench等IDE
  • 开发板实践:使用基于M33的开发板(如STM32L5系列)

学习路径建议

  • 第一步:熟悉寄存器架构和基本指令(MOV, ADD, SUB等)
  • 第二步:学习内存访问指令(LDR, STR等)
  • 第三步:掌握分支和控制流指令(B, BL, CMP等)
  • 第四步:探索更高级的功能(DSP指令、浮点运算等)
  • 第五步:了解M33特有的安全特性和相关指令

实际编程示例:计算数组和

注意事项与常见错误

  • 注意字节顺序:ARM通常是小端序(低字节在低地址)
  • 对齐要求:内存访问通常需要对齐,未对齐访问可能导致异常
  • 条件标志位:许多指令(带S后缀)会更新条件标志位
  • 函数调用约定:了解参数传递和寄存器使用规则
C与指令集的关系
 
 
💡
有文字内容详情不解或业务合作的可以通过以下方式联系本人:微信号:kmkadagarm(请注明称呼与来意)
 
IAR-C-STAT从入门到入土GHS从入门到入土
Loading...