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

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

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值