ARM体系结构介绍

前言

ARM 是单片机从业者,绕不开的一门技能,是从业向更深层次进阶的平台。本文章介绍ARM的构成、分布、调用,认真阅读后对此有清晰的认识,扫盲ARM概念。

一、ARM内核与架构

1.1 ARM芯片组成

arm 体系中,一般讲到的芯片由两大部分组成:arm的内核、外设

  • arm内核:

其内核主要由:寄存器、指令集、总线、存储器映射规则、中断逻辑主调试组件 构成。ARM公司只设计内核,授权给芯片厂商使用生产芯片,所以ARM只设计不生产。

  • 外设:

包括计时器、A/D转换器、存储器、I2C、UART、SPI、ROM等。外设由芯片厂商自行设计并与ARM内核衔接配套。不同芯片厂商设计的外设不同,因此构成了数量和规则庞大的ARM芯片。

1.2 ARM指令集与架构

  • ARM指令集介绍

        指令集的设计是处理器结构中最重要的部分,Instruction Set Architecture 简称 ISA

指令集是用来操作cpu的。

假如:一个32位的cpu,指令集就是一个32位的0、1的序列,不同的排序代表不同的指令,cpu 来解析、执行这些指令。比如:寻址、运算、异常处理。

  • ARM处理器架构

ARM公司2004年推出ARMv7内核架构(ARM11之前的处理器称经典处理器 使用ARM+数字方式命名)之后,使用以Cortex命名方式。分为3个系列:Cortex-A、Cortex-R、Cortex-M

Cortex-A系列(A:Application 应用)

面向性能要求高的系统应用:支持高计算要求、运行丰富操作系统、交互媒体和图形体验场景如:智能手机、平板电脑、汽车娱乐系统、数字电视、智能本、电子阅读器 等信息化产品

Cortex-R系列(R:Real-time实时)

面向实时应用的高性能内核,针对实时操作系统。汽车制动系统、大容量存储控制器 等嵌入式应用。

Cortex-M系统(M:MCU &FPGA)

面向各类嵌入式应用的微控制器内核

Cortex-SC系列(SC:SecurCore)

三大系列之外,另一个主打安全的Cortex-SC 应用于政府安全芯片。

总结:Cortex-A 系列是用于移动领域的CPU,Cortex-R和Corext-M系列是用于实时控制领域的MCU。Cortex-M比ARM7的架构高了3代,性能也有较大的提升,分为M0、M3、M4 和超低耗的M0+。

  • 拓展

ARM公司只设计处理器架构,并不生产CPU。

STM32就是属于ARM公司授权Cortex-M内核给ST公司的一款处理器

Atmel(爱特梅尔)、ST、NXP(恩智浦)、TI(德州仪器)、IMB 持有ARM的授权

二、ARM处理器与寄存器

2.1ARM处理器模式

ARM 处理器共有7种运行模式,分为用户(usr)、快速中断(fiq)、外部中断、特权(svc)、中止、未定义指令中止(und)、系统模式(sys)

普通模式:

1、用户模式(usr、User Mode)正常的程序执行状态

2、特权模式

快速中断模式(flq、FastInterrupt Mode)用于高速数据传输或通道处理。当触发快速中断时进入此模式。

外部中断模式(irq、Interrupt Mode)用于通用的中断处理,当触发外部中断时进入此模式。特权模式(svc、Supervisor Mode)操作系统使用此模式,在系统使用的保护模式,在系统复位或中断指令SW时进入。

中止模式(abt、Abort Mode)当数据或指令预取中止进进入该模式,可用于虚拟存储及存储保护。

未定义指令中止模式(und、Undefined Mode)当未定义的指令进入该模式,可用于支持硬件协处理器的仿真。

3、系统模式(sys、System Mode):运行具有特权的操作系统任务。

在特权模式下程序可以访问 所有的系统资源。非特权模式和特权模式之间的区别在于有些操作只能在特权模式下才能被允许,直接改为模式和中断使能等。用户模式如果需要访问硬件,必须切换到特权模式下,才允许访问硬件。

2.2ARM寄存器

  • ARM共有37个寄存器,32位的长度

1)31个通用寄存器,包括程序计数器在内

2)6个状态寄存器,1个当前状态寄存器,5个备份状态寄存器

  • ARM各工作模式下的寄存器

Thumb状态下的寄存器

1、未分组寄存器R0~R7,共8个。在所有的运行模式下都使用同一个物理寄存器,它们未被系统用作特殊的用途。

2、分组寄存器R8~R12,R13~R14

1)R8~R12(总共10个)

每次访问的物理寄存器与处理当前的运行模式有关,

R8~R12:每个寄存器对应两个不同的物理寄存器当使用fiq模式时,访问寄存器R8_fiq~R12_fiq,当使用fiq模式以外的其它模式时,访问寄存器R8_usr~R12_usr。其中FIQ模式有单独一组R8~R12,共5个;

FIQ(快速中断模式)时访问寄存器R8_fiq~R12_fiq,另外6种模式一共R8~R12,共5个;(当使用除FIQ模式以外其他模式时,访问寄存器R8~R12)。

2)R13~R14(总共12个)

其中USR和SYS模式 共用一组R13~R14共2个,

另外5种模式下各有独自的一组R13~R14,并采用以下记号来区分不同的物理地址,分别为fiq、irq、svc、abt、und。共10个。(mode为以下几种之一:usr、fiq、irq、svc、abt、und)

1)R13在ARM指令常用作堆栈指针SP。由于每一种模式都有自己的R13,所以我们在自己初始化的时候一般要初始化每种模式下的R13,使其指向该运行模式下的栈空间。

2)R14称为子程序连接寄存器LR(Link Register),即在调用子程序的时候,可以将当前程序地址存入LR寄存器,这样就方便了函数的返回。它有两个特殊功能,一种是每一种模式下都 可以保存函数的返回地址,通常LR会配合BL和BLX来使用;另外就是异常处理后的返回地址,如中断

3、PC指针(R15)

R15用作程序计数器(PC),对应一个物理地址,由于ARM体系结构采用了多级流水线功能,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,可以通过向PC赋值,来控制程序跳转,即PC的值 为当前指令的地址值加8个字节。

4、SPSR(5个备份状态寄存器)

SPSR(备份的程序寄存器或者叫影子寄存器)

SPSR除usr、sys外,对应用于异常保护的CPSR的备份,异常时,保存CPSR,异常退出时,将该值恢复到CPSR,以保证程序的正常运行,每一种异常运行模式(除usr和sys)有种自的物理寄存器。

<think>好的,我现在需要解决用户在Maya中遇到的AttributeError错误,具体是xgenm.xgGlobal模块缺少xgmDescribeAll属性。首先,我需要分析可能的原因。根据用户提供的引用信息,常见的AttributeError通常与模块导入错误、版本不兼容或依赖缺失有关。 首先,检查模块是否存在拼写错误或路径问题。用户提到的是xgenm.xgGlobal,所以需要确认xgGlobal模块是否正确导入,以及是否确实包含xgmDescribeAll函数。可能用户使用的Maya版本或xGen工具版本较旧,导致该属性不存在。此外,升级或降级某些库可能导致API变化,如引用[3]提到的pip版本升级引发的问题。 接下来,建议用户检查Maya和xGen的版本是否匹配。如果用户最近更新了软件或插件,可能需要回退到兼容版本。另外,查看官方文档或更新日志,确认xgmDescribeAll是否已被弃用或重命名。例如,某些API在更新后可能改变了函数名称,导致旧代码出错。 如果版本没有问题,可能需要重新安装xGen工具,确保所有依赖项正确安装。有时候文件损坏或配置错误也会导致模块属性缺失。同时,检查是否有多个版本的xgenm模块冲突,这可能导致Python加载错误的模块。 最后,建议用户在脚本中打印dir(xgenm.xgGlobal)来查看模块实际包含的属性,确认xgmDescribeAll是否存在。如果不存在,可能需要修改代码使用替代函数,或者联系Autodesk支持获取帮助。</think>### 解决Maya xgenm.xgGlobal模块缺少xgmDescribeAll属性的方法 #### 1. 确认模块导入和版本兼容性 - **检查Maya和xGen版本** `xgmDescribeAll`是xGen工具集提供的API函数,需确保Maya版本与xGen工具版本匹配。例如: - Maya 2022+对应xGen 5.0+ - Maya 2020以下可能需要xGen 4.5或更低版本[^1] - **验证模块导入** 在脚本中执行以下代码检查模块是否存在: ```python import xgenm.xgGlobal print(dir(xgenm.xgGlobal)) # 查看模块实际包含的属性列表 ``` #### 2. 解决版本冲突 - **降级/升级xGen工具** 若使用新版Maya但xGen未更新,可能导致API缺失。从Autodesk官网下载对应版本的xGen插件[^2]。 - **检查Python环境** 确保Maya使用的Python解释器未与其他环境混用(如系统Python),避免依赖冲突[^3]。 #### 3. 替代方案与代码修改 - **使用替代函数** 若`xgmDescribeAll`已弃用,可尝试以下等效函数: ```python import xgenm as xg descriptions = xg.descriptions() # 获取所有xGen描述对象 ``` - **更新API调用逻辑** 参考Autodesk官方文档中的最新示例代码,例如: ```python from xgenm import XgGlobal XgGlobal.setCurrentDescription("hair_description") ``` #### 4. 重装与修复 - **清理并重装xGen** 删除`C:\Users\<用户名>\Documents\maya\scripts\xgenm`目录后重新安装插件。 - **验证文件完整性** 使用Maya的插件管理器重新加载xGen模块(`Windows > Settings/Preferences > Plug-in Manager`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值