ARM体系中存储系统
非对齐数据访问
ARM体系中存储系统非对齐的存储访问操作A RM系列处理器是RISC (Reducded Instruction Set Computing)处理器。
很多基于ARM的高效代码的程序设计策略都源于RISC处理器。
和很多RISC处理器一样,ARM系列处理器的内存访问,也要求数据对齐,即存取“字(Word)”数据时要求四字节对齐,地址的bits[1:0]==0b00;存取“半字(Halfwords)”时要求两字节对齐,地址的bit[0]==0b0;存取“字节(Byte)”数据时要求该数据按其自然尺寸边界(Natural Size Boundary)定位。
ARM编译程序通常将全局变量对齐到自然尺寸边界上,以便通过使用LDR和STR指令有效地存取这些变量。
这种内存访问方式与多数CISC (Complex Instruction Set Computing)体系结构不同,在CISC体系结构下,指令直接存取未对齐的数据。
因而,当需要将代码从CISC体系结构向ARM处理器移植时,内存访问的地址对齐问题必须予以注意。
在RISC体系结构下,存取未对齐数据无论在代码尺寸或是程序执行效率上,都将付出非常大的代价。
本文将从以下几个方面讨论在ARM体系结构下的程序设计问题。
未对齐的数据指针C和C++编程标准规定,指向某一数据类型的指针,必须和该类型的数据地址对齐方式一致,所以ARM编译器期望程序中的C指针指向存储器中字对齐地址,因为这可使编译器生成更高效的代码。
比如,如果定义一个指向int数据类型的指针,用该指针读取一个字,ARM 编译器将使用LDR指令来完成此操作。
如果读取的地址为四的倍数(即在一个字的边界)即能正确读取。
但是,如果该地址不是四的倍数,那么,一条LDR 指令返回一个循环移位结果,而不是执行真正的未对齐字载入。
循环移位结果取决于该地址向对于字的边界的偏移量和系统所使用的端序(Endianness)。
例如,如果代码要求从指针指向的地址0x8006载入数据,即要载入0x8006、0x8007、0x8008和0x8009四字节的内容。
arm常用的名词解释
arm常用的名词解释ARM(Advanced RISC Machine)是一种常用的计算机架构,被广泛应用于移动设备、嵌入式系统和单片机等领域。
本文将对ARM常用的一些名词进行解释,以帮助读者更好地了解ARM架构。
1. RISC(Reduced Instruction Set Computer):精简指令集计算机。
相对于复杂指令集计算机(CISC),RISC采用简化指令集,每条指令都非常简单,执行速度快,并且易于设计和优化硬件。
2. 架构:计算机系统的基本设计和组织原则。
ARM架构设计了一套标准的指令集和寄存器组织,以及与之兼容的处理器核心,为ARM生态系统提供了一致的编程接口。
3. 处理器核心(Processor Core):ARM的核心部分,负责执行指令和进行算术逻辑运算。
常见的ARM处理器核心包括Cortex-A系列(用于应用处理器)、Cortex-M系列(用于嵌入式系统和微控制器)和Cortex-R系列(用于实时应用和嵌入式处理器)。
4. 指令集架构(Instruction Set Architecture):定义了一套计算机指令的规范和编码方式。
ARM指令集架构包括ARMv8-A、ARMv7-A、ARMv6-M等不同的版本,不同版本支持不同的指令集和功能。
5. 寄存器:位于处理器核心内部的高速存储器,用于存储指令执行过程中需要操作的数据。
ARM体系结构中,常见的寄存器包括通用寄存器、程序计数器、状态寄存器等。
6. 多核处理器(Multi-core Processor):使用多个处理器核心的处理器。
ARM 架构支持多核处理器的设计,使得多个核心可以同时进行计算任务,提高处理能力和并行性能。
7. SoC(System on a Chip):一种集成了多个功能组件的芯片,包括处理器核心、内存控制器、I/O接口等。
ARM架构广泛应用于SoC的设计,提供了高度集成的解决方案,节省了系统板块的空间和功耗。
ARM存储管理单元MMU和存储保护单元MPU
ARM存储管理单元MMU和存储保护单元MPU展开全文MMU提供的一个关键服务是,能使各个任务作为独立的程序在其自己的私有存储空间运行.地址转换过程允许运行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置.区域可以是活跃的,也可以是睡眠的:活跃区域包含当前系统正在使用的代码或数据;睡眠区域包含当前不使用,但可能在短时间内变为活跃的代码或数据.睡眠区域是被保护的,因此当前正在运行的任务是不能访问的.MPU和MMU的主要区别是,MMU中增加了额外的硬件,以支持虚存.一个重定位寄存器只能转换一块存储空间.这块存储空间的大小由虚拟地址的偏移量部分所占的位数所决定.ARM的MMU中临时存放转换数据的一组重定位寄存器实际上是一个由64个重定位寄存器组成的全相联cache.这个cache就是转换旁路缓冲器--TLB.TLB缓存最近被访问的页的转换数据.MMU 还使用主存中的表来存放描述系统中用到的虚拟存储器映射数据,这些转换数据的表就是页表.页表中的每个项代表了将虚拟存储器的一个页转换到物理存储器的一个页帧所需要的所有信息.在MMU中,区域被定义为一组页表的集合,并作为虚存中的连续页完全由软件控制.除了L1一级页表外,所有其他的页表都代表虚存的1MB空间.如果一个区域的大小大于1MB或者它跨过页表的1MB边界地址,那么就必须使用一组页表来描述这个区域.页表可以驻留在存储器中,而不必映射到MMU硬件.当在2个应用程序任务间实现上下文切换时,处理器其实要发生多次上下文切换.它先从用户模式任务切换到内核模式任务,以处理准备运行下一个应用程序任务时的上下文数据的移动;然后,它从内核模式任务切换到下一个上下文的新的用户模式任务.MMU在转换一个地址时失败,就会产生一个中止异常.MMU只有在转换失败,权限错误和域错误时,才会中止.L1住页表包含2种类型的页表项:保存指向二级页表起始地址指针的页表项和保存用于转换1MB页的页表项.L1页表也称为段页表.当L1页表作为页目录时,其页表项包含的是1MB虚拟空间的L2粗页表或L2细页表指针;当L1页表用于转换一个1MB的段时,其页表项包含的是物理存储器中1MB页帧的首地址.目录页表项和1MB的段页表项可以共存于L1主页表.CP15:c2寄存器保存转换表基地址TTB--指向L1主页表在虚存中的位置.TLB只支持两种类型的命令:清除TLB和锁定TLB中的转换数据.存储器访问时,MMU将虚拟地址的一部分与TLB中的所有值进行比较.如果TLB中已有所要的转换数据,即为一次TLB命中,则由TLB提供物理地址的转换数据.如果TLB中不存在有效的转换数据,即为一次TLB失效,则MMU会由硬件自动处理TLB失效,通过主存中的页表搜索有效的转换数据,并将其装入TLB的64行的一行.如果TLB中的某一行是锁定的,则当TLB清除命令发出时,它仍然保留在TLB中.在受保护的系统中,主要有两类资源需要监视:存储器系统和外围设备.存储器中对区域的访问可以是读/写,只读或不可访问,基于当时的处理器模式--管理模式或用户模式,还有一些附加的权限.区域还有控制cache和写缓冲器属性的cache写策略.当处理器访问主存的一个区域时,MPU比较该区域的访问权限属性和当时的处理器模式.如果请求符合区域访问标准,则MPU允许内核读/写主存;如果存储器请求导致存储器访问违例,则MPU产生一个异常信号.区域与内核是冯.诺依曼结构还是哈佛结构无关.每个区域通过0~7的号码来标识和引用.区域的属性如下:(1)区域可以相互重叠;(2)每个区域都分配有一个优先级,该优先级与分配区域的权限无关;(3)当区域重叠时,具有最高优先级的区域的属性可以覆盖其他区域的属性,优先级仅作用于重叠部分的地址;(4)区域的起始地址必须是其大小的倍数;(5)区域的大小可以是4KB~4GB之间的任何2的乘幂;(6)访问所定义区域外的存储器将产生异常.如果是内核预取指令,则MPU产生预取指令中止异常;如果是存储器数据请求,则产生数据中止异常.在启用存储器保护单元之前,必须至少定义一个数据区域和一个指令区域,而且必须在启用cache和写缓冲器之前(或同时)启用存储器保护单元.控制器通过设置CP15的主寄存器c1~5来配置MPU.通过配置寄存器c2和c3来设置区域的cache和写缓冲器的属性,寄存器c5控制区域的访问权限,在寄存器c6里有8个或16个次寄存器用来定义每个区域的大小和位置.初始化MPU,cache和写缓冲器需要以下步骤:(1)使用CP15:c6来定义指令和数据区域的大小和位置(2)使用CP15:c5来设置每个区域的访问权限(3)分别使用CP15:c2和CP15:c3来设置每个区域的cache和写缓冲器属性(4)使用CP15:c1来使能cache和MPU每个内核有3个CP15寄存器用来控制区域的cache和写缓冲器属性.其中CP15:c2:c0:0和CP15:c2:c0:1两个寄存器保存D- cache和I-cache区域属性;第三个寄存器,CP15:c3:c0:0用于保存区域写缓冲器属性,并应用于存储器数据区域.当配置数据区域时,区域的cache位和写缓冲器位一起决定区域的策略.写缓冲器位有2个用途:使能和禁止区域的写缓冲器和设置区域的cache策略.区域的cache位控制写缓冲器位的作用.当cache位为0时,写缓冲器位为1,则使能写缓冲器;写缓冲器位为0,则禁用写缓冲器.当cache位为1时,cache和写缓冲器都被使能,此时写缓冲器位决定cache策略.若写缓冲器位为0,则区域使用直写策略;若写缓冲器位为1,则区域使用回写策略.。
ARM体系结构与编程
和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小 ,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的 主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制 器。
嵌入式微控制器
嵌入式微控制器目前的品种和数量最多,比较有代表性的通用 系列包括8051、P51XA、MCS-251、MCS-96/196/296、 C166/167、MC68HC05/11/12/16、68300等。另外还有许多半通 用系列如:支持USB接口的MCU 8XC930/931、C540、C541; 支持I2C、CAN-Bus、LCD及众多专用MCU和兼容系列。目前
2021/2/5
ARM分类
基于指令集体系结构(构架ISA)的分类 ARM V1 体系是最初版本,只有26位的寻址空间,没有乘法指 令,最终没有商业化 ARM V2 体系与V1体系同为26位寻址空间,具有乘法和加法指 令,支持协处理器 ARM V3 体系的寻址范围扩展到32位,具有乘法和加法指令, 支持协处理器 ARM V4 体系增加了半字存储操作,对调试的支持以及支持嵌 入的ICE ARM V5 体系增加了DSP指令支持和对Java指令的支持 ARM V6 体系增加了媒体指令,ARMv6指令集合中加入了超过 60条SIMD单指令多数据指令 ARM V7 体系定义了三种独立的内核型--A(应用领域), R( 实时领域),M(控制领域)
举例arm芯片的三个专用寄存器的名称
ARM体系结构是一种经典的32位精简指令集(RISC)处理器架构。
在ARM处理器架构中,有许多专用寄存器用于特定的功能,例如控制处理器状态、存储系统和I/O设备的配置信息等。
以下是ARM处理器架构中三个常见的专用寄存器的名称及其功能:1.程序状态寄存器(CPSR)程序状态寄存器(CPSR)是ARM处理器架构中最重要的专用寄存器之一。
它用于存储处理器的当前执行状态,包括当前处理器模式(用户模式、系统模式等)、条件标志位(零标志、负标志等)以及中断屏蔽状态。
通过读取和修改CPSR的值,软件可以控制处理器的执行状态,例如启用或禁用中断、切换处理器模式等。
CPSR的位字段结构非常复杂,需要仔细阅读ARM体系结构手册以理解其所有细节。
2.控制寄存器(CR)控制寄存器(CR)是用于控制处理器操作模式和系统功能的专用寄存器。
其中包括了配置指令和操作类型,如分支指令的方式(指数或者相关)、数据访问权限(只读或者读写)等。
通过对CR的设置,软件可以控制处理器的操作行为,例如启用或禁用高速缓存、配置分支预测算法等。
CR寄存器中的内容对于系统的性能和功能有着重要的影响,因此需要谨慎设置。
3.中断控制寄存器(ICR)中断控制寄存器(ICR)用于存储处理器中断系统的配置信息和状态。
ICR包括了中断屏蔽寄存器和中断向量寄存器两部分。
中断屏蔽寄存器用于控制处理器对各种中断的响应,包括屏蔽中断、启用中断等。
中断向量寄存器用于存储中断向量表的起始位置区域,当发生中断时,处理器从中断向量表中读取相应中断处理程序的入口位置区域。
ICR的设置对于系统的中断处理有着重要的影响,需要根据具体的系统需求进行合理配置。
总结上述是在ARM处理器架构中,三个常见的专用寄存器及其功能。
这些专用寄存器对于处理器的操作和系统的性能有着重要的影响,需要在系统软件开发和调试过程中予以重视。
更多的专用寄存器和其功能还需要开发者去阅读ARM体系结构手册获取更多了解。
ARM的37个寄存器详解
ARM的37个寄存器详解ARM寄存器ARM共有37个32位物理寄存器,7种⼯作模式下可访问的寄存器见下表,User和System使⽤完全相同的物理寄存器。
2.1 R0~R7所有⼯作模式下,R0-R7都分别指向同⼀个物理寄存器(共8个物理寄存器),它们未被系统⽤作特殊的⽤途。
在中断或异常处理进⾏⼯作模式转换时,由于不同⼯作模式均使⽤相同的物理寄存器,可能造成寄存器中数据的破坏。
2.2 R8~R12在User&System、IRQ、Svc、Abt和Und模式下访问的R8~R12都是同⼀个物理寄存器(共5个物理寄存器);在FIQ模式下,访问的R8_fiq~R12_fiq是另外独⽴的物理寄存器(共5个物理寄存器)。
2.3 R13和R14在User&System、IRQ、FIQ、Svc、Abt和Und访问的R13_~R14都是各⾃模式下独⽴的物理寄存器(共12个物理寄存器)。
R13在ARM指令中常⽤作堆栈指针(SP),但这只是⼀种习惯⽤法,⽤户也可使⽤其他的寄存器作为堆栈指针。
⽽在Thumb指令集中,某些指令强制性的要求使⽤R13作为堆栈指针。
由于处理器的每种⼯作模式均有⾃⼰独⽴的物理寄存器R13,在⽤户应⽤程序的初始化部分,⼀般都要初始化每种模式下的R13,使其指向该⼯作模式的栈空间。
这样,当程序进⼊异常模式时,可以将需要保护的寄存器放⼊R13所指向的堆栈,⽽当程序从异常模式返回时,则从对应的堆栈中恢复,采⽤这种⽅式可以保证异常发⽣后程序的正常执⾏。
R14称为链接寄存器(Link Register),当执⾏⼦程序调⽤指令(BL)时,R14可得到R15(程序计数器PC)的备份。
在每⼀种⼯作模式下,都可⽤R14保存⼦程序的返回地址,当⽤BL或BLX指令调⽤⼦程序时,将PC的当前值复制给R14,执⾏完⼦程序后,⼜将R14的值复制回PC,即可完成⼦程序的调⽤返回。
以上的描述可⽤指令完成。
执⾏以下任意⼀条指令:MOV PC, LRBX LR在⼦程序⼊⼝处使⽤以下指令将R14存⼊堆栈:STMFD SP!,{,LR}对应的,使⽤以下指令可以完成⼦程序返回:LDMFD SP!,{,PC}R14也可作为通⽤寄存器。
ARM体系结构详解精
ARM嵌入式系统第2章ARM体系结构ARM微处理器的编程模型♦ARM徴处理器的工作状态♦ARM体系结构的存储器格式♦ARM体系结构的指令长度及数据宽度♦ARM微处理器的处理器模式♦ARM体系结构的寄存器组织♦ARM微处理器的异常状态字、半字、字节字(Word)在ARM体系结构中,字的长度为32位半字(Half-Word)在ARM体系结构中,半字的长度为16位字节(Byg)在ARM体系结构中,字节的长度为8位。
ARM微处理器的工作状态(1)字对齐:四字节对齐半字对齐:两字节对齐两种状态:♦ARM状态:处理器执行32位的字对齐的令♦Thumb状态:处理器执行16位的、半字对齐的Thumb指令处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。
I ARM微处理器的工作状态(2 )状态切换:BX {<cond>} <Rm><cond>指令的条件码。
忽略时无条件执行。
<Rm>子存器中为跳转的目标地址,当<Rm><存器的bit[O]为0时, 目标地址处的指令为ARM指令;当<Rm>^存器的bit[O]为1时,目标地址处的指令为Thumb 指令。
伪代码:if ConditionPassed(cond) thenT Flag=Rm[O]PC=Rm AND OxFFFFFFFEARM微处理器在复位或上电时处于ARM状态,发生异常时处于ARM状态。
右ARM体系结构的存储器格式(1)ARM体系结构所支持的最大寻址空间为4GB (2^字节)♦大端格式(Big Endian)字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
♦小端格式(Little Endian)低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。
字地址字地址右ARM 体系结构的存储器格式(2)(0H)=0123H (4H)=4567H (8H)=89ABHBig Endian(0H)=3210H (4H)=7654H (8H)=BA98HLittle Endian右ARM 体系结构的存储器格式(3)8 9 AB4 5 6 7 0123一 “A ・■ • rO= 0x11223344 I 11 I 22 33 : 44 ILittle endian Big endianR2 =异FI*右 ARM 体系结构的指令长度及数据宽度♦指令长度:32位(在ARM 状态下) 16位(在Thumb 状态下)♦数据宽度: 字节(8位) 半字(16位) 字(32位)三种数据宽度对存储器及外部设备的访问。
arm寄存器的分类
arm寄存器的分类ARM寄存器是ARM体系结构中的一部分,用于存储和处理数据。
根据其功能和用途的不同,ARM寄存器可以分为通用寄存器、程序状态寄存器、系统控制寄存器和浮点寄存器等多个类别。
一、通用寄存器通用寄存器是最常用的寄存器类型,用于存储临时数据、变量和计算结果等。
ARM体系结构提供了16个32位的通用寄存器,分别用R0-R15表示。
其中,R0-R12可用于存储数据和计算结果,R13为堆栈指针SP,R14为链接寄存器LR,R15为程序计数器PC。
通用寄存器具有快速访问和高灵活性的特点,可以在程序执行过程中频繁读写。
在函数调用过程中,通用寄存器用于保存临时变量、函数参数和返回值,保证程序的正确执行。
二、程序状态寄存器程序状态寄存器(CPSR)是ARM体系结构中的一种特殊寄存器,用于存储和控制程序的执行状态。
CPSR寄存器是一个32位的寄存器,包含了当前程序的运行状态、中断控制状态和条件执行状态等信息。
CPSR寄存器的位域有多个,其中最重要的有条件执行位、中断控制位和程序状态位等。
条件执行位用于控制条件分支指令的执行,中断控制位用于控制中断的使能和禁止,程序状态位用于记录程序的运行状态,如运行模式、状态标志和当前指令的执行情况等。
三、系统控制寄存器系统控制寄存器(SCR)是ARM体系结构中的一种特殊寄存器,用于存储和控制系统的运行状态。
SCR寄存器是一个32位的寄存器,包含了系统的控制状态、访问权限和异常处理等信息。
SCR寄存器的位域有多个,其中最重要的有访问权限位、异常处理位和系统控制位等。
访问权限位用于控制对系统资源的访问权限,异常处理位用于控制异常处理器的行为,系统控制位用于控制系统的运行方式和功能。
四、浮点寄存器浮点寄存器是ARM体系结构中的一种特殊寄存器,用于存储和处理浮点数数据。
ARM体系结构提供了16个32位或64位的浮点寄存器,分别用S0-S31或D0-D31表示。
其中,S0-S15用于单精度浮点数操作,D0-D15用于双精度浮点数操作。
arm内存管理机制
arm内存管理机制ARM是一种广泛应用于嵌入式系统中的芯片,其内存管理机制是保证系统运行稳定的重要组成部分。
本文将介绍ARM内存管理机制的基础知识,包括地址空间、虚拟地址、物理地址和内存映射等内容,并给出一些指导意义的建议。
地址空间是指进程可以访问的地址集合。
ARM使用了一个32位地址空间,共2^32字节(4GB)。
这个地址空间被分成两个部分:用户空间(User Space)和内核空间(Kernel Space)。
用户空间是由应用程序使用的,内核空间是由操作系统使用的。
在ARM系统中,虚拟地址和物理地址是两个不同的地址空间。
虚拟地址是由应用程序使用的地址。
它是一个32位地址,它与物理地址是不同的,应用程序只能访问虚拟地址,并且不能直接访问物理地址。
应用程序访问虚拟地址时,操作系统将虚拟地址转换为物理地址,然后进行访问。
这个转换由ARM芯片的内存管理单元(MMU)完成。
物理地址是处理器处理的实际地址。
它表示访问硬件的实际位置。
每个ARM芯片都有一个物理地址空间,但它的大小和内容依赖于所用的芯片,那么关于内存地址的运用应该注意哪些方面呢?在ARM中,内存是通过内存映射的方式访问的。
内存映射是由操作系统控制的,它将虚拟地址映射到物理地址。
内存映射的目的是将不同的外设设备和物理内存映射到同一地址空间。
这样,应用程序可以使用相同的地址来访问不同的设备和内存。
在编写嵌入式系统时,必须小心使用内存映射。
错误的内存映射可能会导致系统崩溃或数据损坏。
因此,在设计和实现系统时,必须确保正确的内存映射,并尽可能减少内存分配和释放的次数。
总之,ARM内存管理机制中,地址空间、虚拟地址、物理地址和内存映射是重要的概念。
理解这些概念可以帮助开发人员设计和实现更稳定、高效的嵌入式系统。
因此,我们建议开发人员在开发嵌入式系统时,要注意这些概念,并确保正确的内存管理。
非对齐数据访问
ARM体系中存储系统非对齐的存储访问操作A RM系列处理器是RISC (Reducded Instruction Set Computing)处理器。
很多基于ARM的高效代码的程序设计策略都源于RISC处理器。
和很多RISC处理器一样,ARM系列处理器的内存访问,也要求数据对齐,即存取“字(Word)”数据时要求四字节对齐,地址的bits[1:0]==0b00;存取“半字(Halfwords)”时要求两字节对齐,地址的bit[0]==0b0;存取“字节(Byte)”数据时要求该数据按其自然尺寸边界(Natural Size Boundary)定位。
ARM编译程序通常将全局变量对齐到自然尺寸边界上,以便通过使用LDR和STR指令有效地存取这些变量。
这种内存访问方式与多数CISC (Complex Instruction Set Computing)体系结构不同,在CISC体系结构下,指令直接存取未对齐的数据。
因而,当需要将代码从CISC体系结构向ARM处理器移植时,内存访问的地址对齐问题必须予以注意。
在RISC体系结构下,存取未对齐数据无论在代码尺寸或是程序执行效率上,都将付出非常大的代价。
本文将从以下几个方面讨论在ARM体系结构下的程序设计问题。
未对齐的数据指针C和C++编程标准规定,指向某一数据类型的指针,必须和该类型的数据地址对齐方式一致,所以ARM编译器期望程序中的C指针指向存储器中字对齐地址,因为这可使编译器生成更高效的代码。
比如,如果定义一个指向int数据类型的指针,用该指针读取一个字,ARM 编译器将使用LDR指令来完成此操作。
如果读取的地址为四的倍数(即在一个字的边界)即能正确读取。
但是,如果该地址不是四的倍数,那么,一条LDR 指令返回一个循环移位结果,而不是执行真正的未对齐字载入。
循环移位结果取决于该地址向对于字的边界的偏移量和系统所使用的端序(Endianness)。
例如,如果代码要求从指针指向的地址0x8006载入数据,即要载入0x8006、0x8007、0x8008和0x8009四字节的内容。
详解ARM处理器中的37个寄存器
详解ARM处理器中的37个寄存器ARM处理器共有37个寄存器。
其中包括:31个通用寄存器,包括程序计数器(PC)在内。
这些寄存器都是32位寄存器。
6个状态寄存器。
这些寄存器都是32位寄存器。
ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。
在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。
在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。
通用寄存器:通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器PC未备份寄存器:未备份寄存器包括R0-R7。
对于每一个未备份寄存器来说,所有处理器模式下都是使用同一个物理寄存器。
未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的场合都可以使用未备份寄存器。
备份寄存器:对于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。
系统为将备份寄存器用于任何的特殊用途,但是当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理非常迅速。
对于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其中的一个是系统模式和用户模式共用的;另外的五个对应于其他的五种处理器模式。
采用下面的记号来区分各个物理寄存器:R13_其中MODE可以是下面几种模式之一:usr,svc,abt,und,irq,fiq程序计数器PC可以作为一般的通用寄存器使用,但有一些指令在使用R15时有一些限制。
由于ARM采用了流水线处理器机制,当正确读取了PC的值时,该值为当前指令地址值加上8个字节。
也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。
由于ARM指令是字对齐的,PC值的第0位和第一位总为0。
需要注意的是,当使用str/stm保存R15时,保存的可能是当前指令地址值加8个字节,也可能保存的是当前指令地址值加12个字节。
ARM体系结构
ARM体系结构
ARM作为一种微处理器体系结构,具有广泛应用范围、高性价比、低功耗等优势,在晶体管规模以及架构方面有着很大的节省,因而受到了越来越多应用者的青睐。
ARM体系结构包括处理器(Processor)、片外存储器(External Memory)、I/O接口(Input/Output Interface)、外围器件(Peripheral Devices)、软件支持(Software Support)等内容。
从处理器来说,ARM体系结构提供了一系列非常细分的机型,它们有不同的特性和操作速度,可以满足不同的性能需求,而且这些机型一般都有较高的可缩放性,所以在产品设计的过程中可以根据实际要求选择合适的特性和速度。
从片外存储器来说,ARM体系结构支持使用不同类型的存储器,比如SRAM、DRAM、Flash等,可以根据应用性能和耗电量的需求,来选择合适的存储器以满足不同应用场景的需求,而且存储器容量也比较可观,一般可以满足大部分应用场景的要求。
从I/O接口来说,ARM体系结构支持多种接口,如USB、I2C、SPI、UART等,通过这些接口可以与周边的外设进行连接,而这些接口的功耗和速度也比较低。
arm的32位指令的格式及个部分功能
ARM的32位指令格式及各部分功能一、ARM的32位指令格式ARM的32位指令格式分为四部分,包括指令操作码、条件码、寄存器和操作数。
1. 指令操作码指令操作码是指令的基本操作类型,为了方便指令的译码和执行,ARM指令集将指令操作码分为几类,包括数据处理指令、分支指令、访存指令等。
不同的指令操作码代表了不同的操作类型,如加法、乘法、移位、与操作等。
2. 条件码条件码用于指定指令在何种条件下执行,如等于零、不等于零、大于、小于等。
通过条件码的设置,可以实现根据不同条件来执行不同的指令,这样可以提高指令的灵活性和效率。
3. 寄存器ARM的32位指令格式中包括多个寄存器字段,用于指定指令的操作对象和操作结果的存放位置。
ARM架构中一般有16个通用寄存器和几个特殊用途的寄存器,不同的寄存器字段代表了不同的寄存器编号。
4. 操作数操作数是指令的操作对象,ARM的32位指令中包括多个操作数字段,用于指定指令的源操作数和目的操作数。
操作数可以是寄存器、立即数或内存位置区域等。
二、各部分功能1. 指令操作码的功能指令操作码代表了指令的操作类型,不同的指令操作码对应了不同的操作,比如数据处理指令可以进行加法、减法、逻辑运算等操作,分支指令可以实现程序的跳转,访存指令可以进行内存的读写操作。
2. 条件码的功能条件码用于指定指令的执行条件,通过设置条件码可以实现根据不同条件来执行不同的指令,这样可以提高程序的执行效率和灵活性。
3. 寄存器的功能寄存器用于存放指令的操作对象和操作结果,ARM的32位指令中包括多个寄存器字段,用于指定指令的源操作数和目的操作数。
寄存器的功能包括存储数据、临时存储和传递参数等。
4. 操作数的功能操作数是指令的操作对象,ARM的32位指令中包括多个操作数字段,用于指定指令的源操作数和目的操作数。
操作数的功能包括指定操作对象、传递参数和存储数据等。
结论ARM的32位指令格式包括指令操作码、条件码、寄存器和操作数四部分,各部分都有特定的功能,通过它们的组合可以实现丰富多样的指令操作和灵活的程序控制。
ARM存储器结构
ARM架构的处理器的存储器寻址空间有232=4G字 节,该存储空间可以分为可快存/可缓冲(Cacheable /Bufferable)区域和不可快存/不可缓冲区域。
ARM架构的处理器,有的带有指令快存(I-Cache) 和数据快存(D-Cache);但是,片内都不带有片内 RAM和片内ROM。系统所需的RAM和ROM(包括闪存 FLASH)都通过总线处接;故有的片内还带有存储器 管理单元MMU(Memory Management Unit)。ARM架构 处理器还允许外接PCMCIA。
2.5
D-Cache
161电影网整理发布
1. Cache的分类和结构
常用的Cache有两类:指令和数据统一的 Cache;以及指令和数据分离的I-Cache与DCache。新型的ARM架构处理器较多采用了ICache与D-Cache的独立块存结构,如Intel公 司的SA1110处理器内含16K字节I-Cache和8K字 节D-Cache。
2.第一级描述符(first-level descriptors)
存储器管理的段/页寻址中的段表/页 表都放在存储器中。第一级描述符表示的 是表的基址、域、访问权限以及有关特性。 第一级描述符也放在存储器中,该变换表 (translation table)由CP15协处理器的寄 存器给出,而表格索引则由虚拟地址[31: 20]给出 。
产生Cache失效原因有强制性失效(需从主 存储器调入Cache)、容量失效(所需的块/行不 能全部调至Cache)和冲突失效(某块/行被替 换,后又被重新访问)。 改进方法: • 增加Cache中行/块的大小来减少强制性失效。 • 提高相联度来减少冲突失效。 • 硬件预取技术
b) 减少失效开销
arm默认大端存储和小端存储
arm默认大端存储和小端存储
ARM架构是一个可配置的架构,可以支持大端存储和小端存储。
在大端存储(Big Endian)中,最高有效字节(Most Significant Byte,MSB)存储在地址最低的位置,而最低有效字节(Least Significant Byte,LSB)存储在地址最高的位置。
而在小端存储(Little Endian)中,最低有效字节(LSB)存储在地址最低的位置,而最高有效字节(MSB)存储在地址最高的位置。
对于ARM处理器来说,默认情况下,ARMv8-A和ARMv7-A架构都支持双端存储。
这意味着可以根据需要选择使用大端存储或小端存储。
在ARMv8-A架构中,操作系统和应用程序可以独立地选择使用大端模式还是小端模式。
而在ARMv7-A架构中,可以通过配置CP15寄存器选择使用大端模式还是小端模式。
需要注意的是,不同的操作系统和应用程序对于存储模式的选择可能会有限制或偏好。
一般来说,大部分的现代操作系统和应用程序都使用小端模式,因为小端模式被广泛支持并具有更好的兼容性。
ARM 存储器
(2)存储器组织
在以字节为单位寻址的存储器中有小端和大端两种方 式存储字,这两种方式是根据最低有效字节与相邻 较高有效字节相比,是存放在较低的地址还是较高 的地址来划分的。两种存储方式如图6.4所示。
4
5
6
7 字节
字节 4 字节 6
地址
0
1
2
3
字节 0 字节 1 字节 2 字节 3
(a)小端存储器组织图
(b)大端存储器组织图
图6.4 小端和大端存储器组织
2. 存储器层次简介 存储层次的管理由计算机硬件和操作系统来完 成,典型的计算机存储层次由多级构成,每级 都有特定的容量及速度。 (1)寄存器组 微处理器寄存器组可看作存储器层次的顶层。 典型的RISC微处理器大约有32个32位寄存 器,总共128B,其访问时间为几ns。
面积),因为片上RAM和片上寄存器组具有较高 的实现成本,所以一般片上集成RAM的容量是 必须考虑的。
(3)片上cache
片上cache存储器的容量为8K~32 KB, 访问时间大概为10ns。高性能PC机系统可能 有第2级片外cache,其容量为几百KB,访问 时间为几十ns。ARM CPU芯片采用多种 cache组织结构。
多级存储器包括一个容量小但速度快的
从存储器,以及一个容量大但速度慢的主存 储器。容量小但速度快的元件是cache,能自
动保存处理器经常用到的指令和数据的复制。
根据典型程序的实验统计,这个存储器系统
的外部行为在绝大部分时间像一个既大又快 的存储器。2级存储器原理可扩展为多级存储 器层次,如cache、主存和硬盘构成3级存储 层次(嵌入式系统目前多是2级的)。这里首 先对ARM支持的存储数据类型和处理器中数 据存储格式进行介绍,建立起ARM处理器的 存储体系的概念。
arm存储管理
3 连续分配方式
3.3 动态分区分配
3、分区分配算法
(5)快速适应算法(quick fit) 先将空闲分区按容量大小分类,对于每类具有相同容量的空 闲分区单独设立空闲分区链表。 设置一个管理索引表,每个表项对应一类空闲分区,指向该 类空闲分区链表表头。 根据进程长度找到能容纳它的最小空闲分区链表,摘下第一 块进行分配。 优点:不分割分区,不产生碎片。 缺点;为进程分配的分区可能有浪费现象。
1 存储器的层次结构 第五章 存储器管理 2 程序的装入和链接 3 连续分配方式 4 基本分页存储管理方式 5 基本分段存储管理方式
3 连续分配方式
程序执行时,要占用一定内存,将内存分配给程序主 要有以下几种方式
连续分配方式 (3) 基本分页存储管理方式 (4) 基本分段存储管理方式 (5) 请求分页存储管理方式 (7) 请求分段存储管理方式 ( 9)
要进行动态分区分配,系统需要配置相应的数据结构,来描 述空闲分区和已分配分区的情况。常用的数据结构有以下两 种形式: (1)空闲分区表 每个空闲分区占一个表目,表目中包括分区序号、分区始址、 分区大小等。 (2)空闲分区链 见下页
3 连续分配方式
3.3 动态分区分配
2、分区分配中的数据结构
(2)空闲分区链 将空闲分区连成双向链表, 每个结点代表一个空闲分区, 包括分区大小、状态、 前后向指针等信息。 状态为0表示未分配, 如果分配了则将0改为1, 前后向指针就没有意义了。
2 程序的装入和链接
引入概念一:
源程序-- 目标程序-- 可执行程序 编译 链接
ARM存储方法
ARM存储⽅法ARM存储⽅法ARM体系结构将存储器看做是从零地址开始的字节的线性组合。
从零字节到三字节放置第⼀个存储的字数据,从第四个字节到第七个字节放置的是第⼆个存储的字数据,依次排列。
作为32位微处理器,ARM体系结构所⽀持的最⼤寻址空间为4GB。
ARM体系结构可⽤两种⽅法存储字数据,称之为⼤端格式和⼩端格式,具体说明如下:1.⼤端格式在⼤端格式中,字数据的⾼字节存储在低地址中,⽽字数据的低字节存储在⾼地址中,如下图所⽰:1.⼩端模式与⼤端存储格式相反,在⼩端存储格式中,字数据的低字节存储在⾼地址中,⽽字数据的⾼字节存储在低地址中,如下图所⽰:今天在做LOGO的时候,看S3C2440Display.cpp函数中,突然遇见⼀个函数:if(dwStatus == ERROR_SUCCESS && dwType == REG_DWORD){dwSize = sizeof(DWORD);dwStatus = RegQueryValueEx(hkDisplay, _T("LCDVirtualFrameBase"), NULL, &dwType, (LPBYTE)&gdwLCDVirtualFrameBase, &dwSize);}不懂,呵呵,没有办法,谁让我不会的太多了,底⼦⼜薄,还好我脸⽪⽐较厚,查看MSDN的过程中,发现函数的原型:LONG RegQueryValueEx(HKEY hKey,LPCWSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);其中lpType,参数的取值可能为REG_DWORD_BIG_ENDIAN或者REG_DWORD_LITTLE_ENDIAN得时候就会涉及到ARM存储的⽅法,于是我⼜翻书。
在ARM嵌⼊式常⽤模块与综合系统设计实例精讲这本书的第⼀章就有介绍!哎哎,汗!。
arm构架的存储器参数
arm构架的存储器参数
1. 地址空间:ARM体系使用单一的地址空间,大小通常为2^32个8位字节,即4GB。
这些字节单元的地址都是无符号的32位数值,取值范围是0到2^32-1。
此外,ARM的地址空间也可以看作是2^30个32位的字单元或2^31个16位的半字单元。
2. 数据类型与存储格式:ARM处理器支持多种数据类型,包括字节(Byte,8位)、半字(Half-Word,16位)和字(Word,32位)。
存储器的格式可以是大端模式或小端模式,大端模式是指字的高字节存储在低地址字节单元中,而字的低字节存储在高地址字节单元中。
3. 寄存器:ARM处理器通常包含一定数量的通用寄存器,用于暂存数据和地址。
例如,ARM处理器可能具有37个寄存器,这些寄存器的读写周期通常小于2ns。
4. Cache和紧耦合存储器(TCM):为了提高内存访问效率,ARM 处理器通常包含片内Cache和TCM。
片内Cache可以优化内存访问,降低系统的总成本,而TCM是为了弥补Cache访问的不确定性增加的片上存储器。
5. 内存类型:ARM构架的嵌入式系统通常使用不同类型的内存,包括片内SRAM(静态随机存取存储器)提供高速内存访问,以及片外DRAM(动态随机存取存储器)或SDRAM(同步动态随机存取存储器)作为主存储器。
这些存储器的容量通常在8MB到512MB之间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM体系中存储系统
1.ARM体系中的存储空间
ARM体系使用单一的平板地址空间.该地址空间的大小为232个8位字节.这些字节单元的地址是一个无符号的32位数值,起取值范围为0到232-1.
32位情况:
ARM的地址空间也可以看作是230个32位的字单元.这些字单元的地址可以被4整除,也就是说该地址的低两位为0b00.地址为A的字数据包括地址为A,A+1,A+2,A+3 4个字节单元的内容.
16位情况:
在ARM版本4及以上的版本中,ARM的地址空间也可以看作是231个16位的半字单元.这些半字单元的地址可以被2整除,也就是说该地址的最低位为0b0.地址为A的半字数据包括地址为A,A+1两个字节单元的内容.
地址取模:
各存储单元的地址作为32位的无符号数,可以进行常规的整数运算.这些运算的结果进行232取模.也就是说,运算结果发生上溢出和下溢出是,地址将会发生绕圈.
2.ARM存储器格式
在ARM体系中,每个字单元中包含4各字节单元或者两个半字单元;1各半字单元中包含两个字节单元.但是在字单元中,4各字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:big-endian格式和little-endian格式.
在big-endian格式中,对于地址位A的字单元包括字节单元A,A+1,A+2,A+3,其中字节单元有高位到低位字节顺序为A,A+1,A+2,A+3;地址为A的字单元包括半字单元A,A+2,其中半字单元有高位到低位字节顺序位A,A+2;地址为A的半字单元包括字节单元A,A+1,其中字节单元有高位到低位字节顺序为A,A+1.这种存储格式如图1.1所示.
在little-endian格式中,地址为A的字单元包括字节单元A,A+1,A+2,A+3,其中字节单元有高位到低位字节顺序为A+3,A+2,A+1,A;地址为A的字单元包括半字单元A,A+2,其中半字单元有高位到低位字节顺序位A+2,A;地址为A的半字单元包括字节单元A,A+1,其中字节单元有高位到低位字节顺序为A+1,A.这种存储器格式如图1.2所示.
图1.1 big-endian格式的存储系统
图1.2 little-endian格式的存储系统
3.非对齐的存储访问操作
在ARM中,通常希望字单元的地址是字对齐的(地址的低两位为0b00),半字单元的地址是半字对齐的(地址的最低为0b0).在存储访问操作中,如果存储单元的地址没有遵守上述的对齐规则,则称为非对齐(unaligned)的存储访问操作.
1.非对齐的指令预取操作
当处理器处于ARM状态器件,如果写入到寄存器PC中的值是非字对齐的(低两位不为0b00),要么指令执行的结果不可预知,要么地址值中最低两位被忽略;
当处理器处于Thumb状态器件,如果写入到寄存器PC中的值是非半字对齐的(最低位不为0b0),要么指令执行的结果不可预知,要么的重地值中最低位被忽略.
如果系统中指定,当发生非对齐的指令预取操作时,忽略地址值中相应的位,则有存储系统实现这种”忽略”.也就是说,这时该地址值原封不动的送到存储系统.
2.非对齐的数据访问操作
对于Load/Store操作,如果是非对齐的数据访问操作,系统定义了下面3种可能的结果.
<1>执行的结果不可预知.
<2>忽略字单元地址的低两位,即访问地址为(address and 0xffffffc)的字单元;忽略半字单元地址的最低位的值,即访问地址位(address and 0xffffffe)的半字单元.
<3>忽略字单元地址值种的低两位的值;忽略半字单元地址的最低位的值.有存储体统实现这种”忽略”.也就是说,这时该地址值原封不动的送到存储系统.
当发生非对齐的数据访问时,到底采用上述3种处理方法种的哪一种,是有各指令指定的.
4 指令预取和自修改代码
在ARM中允许指令预取.在CPU执行当前指令的同时,可以从存储器种预取出若干条指令,具体预取多少条指令,不同的ARM实现种有不同的数值.
预取的指令并不一定能够得到执行.比如当前指令完成后,如果发生了异常中断,程序将会跳转到异常中断处理程序处执行,当前预取的指令将被抛弃.或者如果执行了跳转指令,则当前预取的指令也将被抛弃.
正如在不同的ARM实现预取的指令条数可能不同,当发生程序跳转是,不同的ARM 实现种采用的跳转预测算法也可能不同.
自修改代码指的是代码在执行过程种可能修改自身.对于支持指令预取的ARM系统,自修改代码可能带来潜在的问题.当指令被预取后,在该指令被执行前,如果有数据访问指令修改了位于主存种的该指令,这是被预取的指令和主存种对应的指令不同,从而可能使执行的结果发生错误.。