关于ROM,RAM,FLASH的个人理解

2023-11-18

RAM和ROM是指的存储介质,不是存储器。在硬件构造上不同,所以性质不同,但都是半导体存储介质。

RAM是随机存取存储器,随机是什么意思呢? 意思是, 给定一个地址, 可以立即访问到数据(访问时间和位置无关)。RAM特点是掉电会丢失数据,但是RAM的读写速度很快。所以通常用来做内存,内存也叫主存。CPU能直接对内存寻址。手机的运行内存其实就是RAM。其实在cpu内还有cache,没错,专业课学过的那个。cache也是RAM。

RAM主要用于存储短时间使用的程序。它主要用来存储程序中用到的变量。凡是整个程序中,所用到的需要被改写的量(包括全局变量、局部变量、堆栈段等),都存储在RAM中。

RAM又分为SRAM(静态)和DRAM(动态),比如在Stm32f103c8t6,内存就是SRAM。

ROM是只读存储器,早期的ROM因为技术不成熟所以无法擦写,出厂后就只能读数据,所以叫只读存储器,进一步发展出了可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)。所以严格来说只读这个说法已经不合适了。EPROM需要用紫外线长时间照射才能擦除,使用很不方便。1980s又出现了电子可擦除可编程只读存储器(EEPROM),它克服了EPROM的不足,但是集成度不高、价格较贵。

对于PC操作系统,其实要依赖BIOS启动,即引导程序,其实也是用的ROM介质存储。

由于EEPROM的不足,于是又发展出了一种新型的存储单元结构同EPROM类似的快闪存储器(FLASH MEMORY)。FLASH集成度高、功耗低、体积小,又能在线快速擦除,因而获得了快速发展。当然,FLASH又发展出了NOR FLASH和NAND FLASH。

FLASH属于广义上的ROM,和EEPROM的最大区别是FLASH按扇区操作,相对于EEPROM的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本。

程序运行位置

单片机我们下载的程序是在哪里?其实在flash里,是bootloader使我们能将程序下载到FLASH。上电后,根据boot引脚决定是从SRAM还是flash启动,默认就是flash启动。

flash用来存放程序,SRAM就是内存,堆栈什么的就是一段内存。‘

程序是在那里运行的呢?对于PC,程序存储在硬盘,当需要运行时,将程序取到RAM,即内存条,然后CPU从RAM里取指令执行。所以说,程序是在RAM运行的。当然,指令都是在cpu执行的啊,没什么说的。

对于单片机呢,那就不得不说FLASH了,FLASH是由EEPROM发展而来的。分为NAND FLASH和NOR FLASH,这两种的区别与联系呢。

共同点:他们在写入数据时需要先将你所写位置所属的块擦除,不管你是不是只写几个字节,所以如果要改写Flash中的数据,总是会先将数据所属的块缓存到内存中,然后再在内存中改写好数据后又重新将块写回,这样就不会丢失数据,但是花销太大。

不同点:NAND FLASH读的时候,往往也是先定位块的位置,然后在块中顺序读取,在不同块中间断读取数据是非常低效的,不能随意地寻址。而NOR FLASH呢,在读取数据时可以做到任意的寻址而不会有太大的花销,它的读操作是接近于RAM的。

所以说,如果是比较小巧的单片机,比如STM32F103C8T6,单片机本身内部就有FLASH的。这种FLASH不同于通用的FLASH,他是支持随机地址访问的。即NOR FLASH,这样的单片机,一般程序都存储在FLASH里,然后运行的时候,PC指针也可以到固定的FLASH地址里去取指令,所以呢,程序是运行在FLASH里的。

还有一类,是相对比较大一些的系统,这些系统的程序,相对来说都是比较大的,单片机也都是比较强大的。
他们的FLASH一般都是外挂的大FLASH,这样的FLASH就有个特点,不支持随机地址访问,必须一页一页的访问,这样的话,程序就不能运行在FLASH里,因为下一条指令会招不到。 怎么办呢,那就有办法啊,RAM支持随机地址访问啊,我们把FLASH里面的内容搬移到RAM里,就可以了,这样访问起来就会更快了。所以程序是运行在RAM的,一般是SRAM。
 

说到这,不得不说下地址空间

比如STM32,32表示cpu有32根数据总线,寄存器也是32位的,巧合的是地址总线也是32位,在单片机内,外设寄存器,flash,sram,物理位置上并不是连续的,为了cpu能更快速地寻址,有了地址空间的说法,将物理地址映射到连续的地址空间。

在同一时刻,我们地址寻址空间表示最大为0xFFFFFFFF的内存地址。再多的我们没法表示地址了。所以最大的寻址能力即 为2^32B,即4G,可是实际还到不了4G,因为显卡上的显存(RAM)和BIOS(ROM),以及 各种PCI、PCI-E设备上的RAM和ROM,都要占用内存

说到单片机,就不得不说寄存器,一般寄存器是指由基本的RS触发器结构衍生出来的D触发, 就是一些与非门构成的结构,有人说寄存器都在cpu内部,我个人是不认可的。主要是cpu的定义其实挺有歧义的,各有各的说法。先说说cpu吧。

CPU(处理器)和MPU差不多,MPU功能更单一

芯片=CPU+RAM+FLASH(好像不怎么准确啊,不管了)

MCU(也叫单片机,微控制器)=芯片+其他模块(比如GPIO,DMA,TIM)

stm32f103c8t6里,我认为cortex_m3内核其实就是cpu,感觉也可以说是芯片啊。

单片机的各种外设配置都是通过配置寄存器。

在cpu的内部,确实也有寄存器,比如PC寄存器,LR寄存器等等,通常用来存储程序状态,返回地址等等。但cpu外也有,那就是配置外设的寄存器,反正歧义都是因为cpu的定义,不管了。

ARM架构的cpu,cpu内部的寄存器和外部的外设寄存器,是在一个地址空间内,而x86则是分开的。cpu内部的寄存器cpu可以直接访问,不用经过存储控制器。

这里说到了PC指针,是什么呢,其实在ARM架构CPU内部,有许多寄存器,比如PC寄存器,它的值就是下一步执行指令的地址。

......持续更新,持续修改中

参考文章,特此鸣谢。

https://blog.csdn.net/SuperNut_Wang/article/details/128418574

https://blog.csdn.net/qq_34810707/article/details/112853562

https://zhuanlan.zhihu.com/p/88202063

https://zhuanlan.zhihu.com/p/38339306

https://blog.csdn.net/HowtobeaHERO/article/details/115605813

https://blog.csdn.net/chen_shiqiang/article/details/51289869

https://blog.csdn.net/jonah_king/article/details/83031514

https://blog.csdn.net/forlifefor/article/details/118368830

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于ROM,RAM,FLASH的个人理解 的相关文章

  • Java-基于SSM+JSP的医院挂号管理系统

    项目背景 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 医院预约挂号系统当然也不能排除在外 医院预约挂号系统是以实际运用为开发背景 运用软件工程开发方法 采用jsp技术构建的一个

随机推荐

  • python+selenium自动化测试框架详解,我就讲一遍!

    前言 本文整理归纳以往的工作中用到的东西 现汇总成基础测试框架提供分享 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架 能适应日常测试工作需要 1 使用Page Object模式
  • Debian查询硬件状态

    很早以前写过一个查询树霉派硬件状态的文章 用是Python写的一个小程序 里面用到了vcgencmd这个测温度的内部命令 但这个命令在debian里面没有 debian里只有lm sensors的外部命令 需要安装 apt get inst
  • Linux 重启后ext文件系统Inode 625047 has illegal blocks异常

    情况描述 系统重启后 发现报错 dev VolGroup00 LogVol00 contains a file system with errors check forced inode 625047 has illegal block s
  • 2021-03-31

    智能风控中的全场景化的模型组合包括哪些内容 近期某些网贷的广告 频上热搜 近有某东 远有某60 相信在大家的WX朋友圈更有大量 精彩 广告诱惑各位提前消费 于目前的政策而言 当下网贷行业的监管已达到最顶峰 网贷再也回不到巅峰时刻 但与此同时
  • 传统的项目经理可以担当Scrum Master吗

    原文链接作者 Amir Nasiri 一个习惯了传统项目管理方法的项目经理 可以在敏捷组织里担当ScrumMaster吗 这是一个很有意思的问题 也是所有项目经理在有朝一日面对敏捷方法 比如Scrum 的时候需要思考的问题 敏捷在落地实施时
  • QGis 二次开发教程(目录)

    目录 QGis 二次开发搭建 windows QGis QgsVectorLayer 图层加载 shp file矢量图层 QGis QgsVectorLayer 图层数据解析 获取经纬度集合和其他字段标量 QGis QgsVectorLay
  • Keras+CNN模型识别手写数字(mnist)详细分析

    CNN模型 CNN卷积神经网络 包含卷积层 卷积运算提取输入的不同特征 更多层的网络能从低级特征中迭代提取等复杂的特征 线性整流层 RELU 池化层 卷积后会得到维度很大的特征 将特征切成几个区域 取最大值或平均值 得到新的较小维度特征 全
  • tcp和udp,通信协议

    1 什么是tcp和udp 常用的网络通讯 浏览网页 软件聊天等等 都是基于tcp和udp传输的 2 tcp和udp的区别是什么 1 最大的区别是一个基于连接 一个基于非连接 举例说明 如果把人与人之间的通信比喻为进程之间的通信 写信和电话
  • 通俗易懂讲解区块链

    文章目录 一 区块链是什么 区块链的几个核心特点 1 去中心化 2 非常安全 3 不可篡改性 4 开放性 5 无第三方 6 匿名性 二 区块链与比特币的关系 三 通俗易懂解释区块链 1 民生领域 2 经济产业领域 3 政务领域 4 数字身份
  • B站马士兵python入门基础版详细笔记(6)

    前言 这篇文章是B站学习python入门基础班的视频的第五 六章内容 主要讲述的是列表 主要包括列表的创建 以及他的元素的增 删 查 改操作命令 一 列表的初始化 为什么要使用列表 列表就好比C语言中的数组 它可以在这个数组里面保存各种类型
  • 达梦数据库创建数据库实例、规划表空间

    1 创建数据库实例 1 1图形方式创建 到数据库安装目录 dm7 的 tool目录下 打开达梦数据库配置助手 dmdba localhost tool dbca sh 打开达梦数据库配置助手 选择创建数据库实例 点击 开始 如下图 创建数据
  • unity shader入门(一) 基本结构和变量声明

    文章目录 前言 Unity中shader相关的结构 什么是openGL和DirectX unity shader的分类 编写一个unity shader shader的基本结构 shader的property类型 在subshader中再次
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • 【知识分享】机器学习的基本流程

    个人理解的机器学习简单流程如下 0 收集数据 1 对数据集进行预处理 2 划分数据集 训练集 测试集 验证集 3 训练 4 验证模型 对每个步骤详细解释 0 收集数据 可以使用之前学过使用爬虫对特定网页内容爬取 或在数据网页等信息网站上直接
  • [error] MFC错误不能将参数1从"const char [3]"转换为"const wchar_t *"

    在做项目中经常遇到很多错误 这里我仅仅把自己遇到的一些错误和解决方法写出 供自己和大家查看 代码如下 CRect rect GetClientRect rect CString str str Format ld rect bottom M
  • OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1

    最近切换到64位系统上 运行以前的程序真是各种bug不停啊 主要还是系统位数导致的 先看下面这个错误 OpenCV Error Assertion failed type B type type CV 32FC1 type CV 64FC1
  • 解决ChatGML启动报错:RuntimeError: expected scalar type Half but found Float

    1 编辑web demo2 py文件 2 在原始命令加上 half 原始命令 model AutoModel from pretrained app model chatglm2 6b trust remote code True half
  • 如何优雅地实现 Excel 文件导出功能?(阿里出品的 EasyExcel,安利一波)

    EasyExcel 前言 导出是后台管理系统的常用功能 当数据量特别大的时候会内存溢出和卡顿页面 曾经自己封装过一个导出 POI百万级大数据量EXCEL导出 采用了分批查询数据来避免内存溢出和使用SXSSFWorkbook方式缓存数据到文件
  • 区块链技术详解

    区块链概述 区块链定义 区块链 是一个共享的 不可篡改的账本 旨在促进业务网络中的交易记录和资产跟踪流程 资产 可以是有形的 如房屋 汽车 现金 土地 也可以是无形的 如知识产权 专利 版权 品牌 几乎任何有价值的东西都可以在区块链网络上跟
  • 关于ROM,RAM,FLASH的个人理解

    RAM和ROM是指的存储介质 不是存储器 在硬件构造上不同 所以性质不同 但都是半导体存储介质 RAM是随机存取存储器 随机是什么意思呢 意思是 给定一个地址 可以立即访问到数据 访问时间和位置无关 RAM特点是掉电会丢失数据 但是RAM的