当前位置: 首页 > news >正文

ARM存储系统概述与数据类型(ARM处理器架构模型——存储系统,上篇)

本文声明:内容来源于网络,进行整合/再创作;部分内容由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~(32位)的线性字节阵列。其中每一个字节都有唯一的地址。字节可以占用任意位置

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

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

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

  • 当将这些数据类型中的任意一种声明成unsigned类型时,n位数据值表示 0~的非负数,通常使用二进制格式。
  • 当将这些数据类型中的任意一种声明成signed类型时,n位数据值表示~的整数,使用二进制的补码格式。
  • 数据类型指令的操作数具体字类型还是双字类型,由使用的寄存器类型决定。如“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指令)来选择浮点处理方式的编译参数。与软件仿真(通过避免中断、译码和浮点指令仿真)相比,此关键字标志产生的代码既快又紧凑
http://www.jsqmd.com/news/478089/

相关文章:

  • Android功耗系列专题理论之十三:MTK平台待机功耗问题分析方法
  • STM32CubeMX 版本演进与兼容性实战指南(持续追踪)
  • 《计算机网络:自顶向下方法》(第 8 版)介绍
  • 本地部署国产openclaw(CoPaw)(保姆级图文讲解)
  • Spring Cloud Nacos实战:如何让本地服务只发现不注册(附完整配置代码)
  • FreeRTOS任务卡死?试试这个精准监控方案(附完整代码)
  • Java 并发编程:volatile (可见性 / 指令重排序 / 与 synchronized 对比)
  • 上市公司借款数据实战:如何用Python快速分析长期借款前五名(附完整代码)
  • 告别蜗牛速度!用frp内网穿透5分钟搞定远程访问NAS(附详细配置截图)
  • MPC论文笔记2-四旋翼轨迹跟踪控制
  • 【Linux】理解进程,从这三件事开始:冯诺依曼、操作系统、PCB
  • 如何用MMDetection3D训练自定义点云数据集?PointPillars实战教程
  • AIGlasses_for_navigation应用:微信小程序开发集成实时导航功能
  • 基于YOLOv5的火灾检测:中文文献综述(2016-2026)摘要本文对过去十年(2016-2026)基于YOLOv5的火灾检测中文文献进行了系统性综述。研究发现,YOLOv5作为单阶段目标检测
  • 鼎捷T100 R报表开发实战:从规格档定制到SQL优化的全流程解析
  • OpenClaw本地部署及飞书接入完整指南总结
  • 从模型损坏到代理冲突:深度解析OllamaEmbeddings两大高频错误的底层原因
  • Does Your Reasoning Model Implicitly Know When to Stop Thinking?
  • 青龙面板配置避坑指南:让你的GitHub爬虫脚本稳定运行(Python3.8+实测)
  • 毛玻璃效果实战:跨浏览器兼容的CSS3 backdrop-filter解决方案
  • AI Agents as Universal Task Solvers: It’s All About Time
  • Unsloth实战演练:从零开始微调一个中文对话模型全过程
  • Pico UnityXR中的手柄射线交互优化与事件封装
  • Midjourney vs Dall·E 3实战测评:电商产品图生成该选哪个AI工具?
  • The Trinity of Consistency as a Defining Principle for General World Models
  • 小白友好!Qwen3Guard-Gen-WEB实战教程:快速搭建多语言内容审核系统
  • UCIe开源生态全景图:从伯克利研究到企业级解决方案(2023最新)
  • Scikit-learn模型部署超简单
  • MusePublic艺术创作引擎效果展示:这些惊艳人像作品,都是用AI生成的
  • Windows下用Anaconda一键搞定LabelImg安装(附Python3.8兼容方案)