本文声明:内容来源于网络,进行整合/再创作;部分内容由AI辅助生成。

Tips:本节知识分为上、中、下篇讲述,可通过专栏查找到对应文章。

ARM 存储系统概述

        ARM存储器系统可以使用简单的平板式地址映射机制(就像一些简单的单片机一样,地址空间的分配方式是固定的,系统中各部分都使用物理地址),也可以使用以下一些技术提供功能更为强大的存储系统。

  • 系统可能提供多种类型的存储器件,如 Flash、ROM、SRAM 等。
  • Cache(高速缓冲存储器 )技术。
  • 写缓存(Write Buffer)技术。
  • 虚拟内存和 I/O 地址映射技术。

        大多数的系统可通过以下方法之一,实现对复杂存储系统的管理。

①使用Cache,缩小处理器和存储系统的速度差别,从而提高系统的整体性能。

②使用内存映射技术实现虚拟空间到物理空间的映射,这种映射机制对嵌入式系统非常重要。

        通常嵌入式系统程序存放在ROM/Flash中,这样系统断电后程序能够得到保存。但是,ROM/Flash与SDRAM相比读写速度慢很多,而且基于ARM的嵌入式系统通常把异常中断向量表放在RAM中。利用内存映射机制,在系统上电时,将ROM/Flash映射为地址0,这样可以进行一些初始化处理;当这些初始化处理完成后,将SDRAM映射为地址0,并把系统程序加载到SDRAM中运行,这样可很好地满足嵌入式系统的需要。

③引入存储保护机制,增强系统的安全性。

④引入一些机制保证:将I/O操作映射成内存操作后,各种I/O操作能够得到正确的结果。

        将I/O地址映射到内存空间后,在简单的无缓存系统中,CPU的读写能直接作用于设备,结果确定。但引入Cache和Write Buffer后,会引发两个核心问题:

  • CPU可能读写的是缓存中的旧数据而非设备真实状态(一致性问题),
  • 对设备的多个控制命令可能因缓存和缓冲的优化而乱序到达(顺序性问题)。

        为此,系统必须引入关键机制(主要是将I/O内存区域标记为不可缓存/强序访问,并在必要时使用内存屏障指令)绕过或严格管控缓存与缓冲,确保所有I/O操作都能以正确顺序产生确定性的设备效果。

ARM 的数据类型

        Cortex-A53处理器采用ARMv8 64位架构,该架构支持整数、浮点数等数据类型。

基本数据类型

        ARMv8架构支持的基本数据类型有以下5种:

  • Byte:字节,8bit
  • Halfword:半字,16bit(半字必须与2字节边界对齐)
  • Word:字,32bit(字必须与4字节边界对齐) 1 字 = 4 字节 = 4 × 8 = 32 bit
  • DoubleWord:双字,64bit
  • QueaWord:四字,128bit

        ARM架构中,将存储器看作是序号为 0~2^{32-1}(32位)的线性字节阵列。其中每一个字节都有唯一的地址。字节可以占用任意位置

        半字占有2个字节的位置,该位置开始于偶数(2的倍数)字节地址(地址末位是0)。

        长度为1个字的数据项占用一组4字节的位置,该位置开始于4的倍数的字节地址(地址末两位是00)。

        关于ARMv8架构所支持数据类型的注意事项:

  • 当将这些数据类型中的任意一种声明成 unsigned 类型时,n位数据值表示 0~2^{n-1} 的非负数,通常使用二进制格式。
  • 当将这些数据类型中的任意一种声明成 signed 类型时,n位数据值表示 -2^{n-1} ~ 2^{n-1} 的整数,使用二进制的补码格式。
  • 数据类型指令的操作数具体字类型还是双字类型,由使用的寄存器类型决定。如“ADD W1, W0, #0x1”中的操作数“0x1”作为字类型数据处理;“ADD X1, X0, #0x1”中的操作数0x1”作为双字类型数据处理。
  • Load/Store 数据传输指令可以从存储器存取传输数据,这些数据可以是字节、半字、字。加载时自动进行字节或半字的零扩展或符号扩展。对应的指令分别为LDR/BSTRB (字节操作)、DRH/STRH (半字操作)、LDR/STR(字操作)。
  • ARM 指令编译后是 4 个字节(与字边界对齐);Thumb 指令编译后是 2 个字节(与半字边界对齐)

浮点型数据

ARM存储器的组织结构

        浮点运算使用在ARM硬件指令集中未定义的数据类型。尽管如此,ARM公司仍然在协处理器指令空间定义了一系列浮点指令。

        通常这些指令的实现方式:

  • 软件实现:全部可以通过未定义指令异常(兼容硬件不支持的协处理器指令)。
  • 硬件实现:小部分也可由浮点运算协处理器FPA10完成。

        ARM浮点指令集的替代方法:

  • ARM公司提供了C语言编写的浮点库(但Thumb代码只能使用浮点指令集)。该库支持IEEE标准的单/双精度格式。
  • C编译器有一个关键字标志(可能是编译器选项或pragma指令)来选择浮点处理方式的编译参数。与软件仿真(通过避免中断、译码和浮点指令仿真)相比,此关键字标志产生的代码既快又紧凑
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐