1.导读
一个芯片通常需要三种主要的物理内存类型:SRAM、Flash和DDR。
-
SRAM(静态随机存储器):SRAM是一种高速、易访问和易擦写的存储器类型。它通常用于存储变量、缓冲区、堆栈和其他动态数据。SRAM的特点是读写速度快,但容量相对较小。在一些嵌入式系统中,SRAM可能用于存储临时数据和运行时代码。
-
Flash存储器:Flash是一种非易失性存储器类型,它可以长期保存数据,即使在断电情况下也能保持数据内容。Flash存储器通常用于存储程序代码、只读数据和持久性配置信息。相比SRAM,Flash存储器的容量通常更大,但读取和写入速度较慢,且有读写寿命。
-
DDR(双数据速率):DDR是一种高速的动态随机存储器类型,用于提供大容量的临时存储。DDR存储器具有较高的读写速度,但相对于SRAM和Flash来说,它也更加昂贵。所以一般单片机都没有,或者用DRAM来代替。
其他:
ROM是一种只读的存储器,在某些芯片中可能有,一般用于运行bootload程序。
RAM:分为SRAM和DRAM,DRAM的作用与DDR类似。
选择使用DRAM还是DDR取决于具体的需求。如果需要大容量存储且相对较低的成本,则DRAM可能更适合。如果需要更高的数据传输速率和性能,特别是在对内存带宽要求较高的应用中,则DDR是更好的选择。时下较新版本的DDR(如DDR4和DDR5)通常提供更高的带宽和性能,但也会伴随着更高的成本。因此,在选择存储器技术时,考虑到具体的需求以及成本效益是很重要的。
2.什么是地址映射
地址映射物理内存映射是指将物理内存的地址范围映射到特定的逻辑地址空间中的过程。具体来说,当处理器访问逻辑地址空间中的某个地址时,操作系统和硬件会根据预定义的映射规则,将该逻辑地址转换为对应的物理地址。
以类似 0x08000000
这样的地址为例,它通常用于映射物理内存中的特定区域,如Flash存储器。在一些嵌入式系统中,Flash存储器通常位于物理地址空间的固定位置,并且这个位置也被映射到逻辑地址空间的固定位置。当操作0x08000000
之后的地址就可以操作Flash存储器.
3.通常情况下的映射关系图
注意: 这里的虚拟地址只是在一般情况下等于这个值,需要根具芯片的手册才可确认
4.程序的运行过程中内存的使用流程
4.1 SRAM有关
系统启动时,从Flash中读取程序,并将程序拷贝到SRAM区域的开头,该区域称为程序存储区。全局变量和静态变量等也会随后拷贝到SRAM的剩余区域,称为静态存储区。这些空间在程序运行期间将一直被占用。
剩余的SRAM空间首先分配给栈空间,用于存放程序中的临时变量等(栈空间是预先确定的)。最后剩余的空间可用作动态分配的堆空间(可以使用malloc等函数申请)。
4.2 DDR有关
当系统使用DDR时,在系统启动时,从Flash中读取程序,并将其拷贝到DDR的开头。
然而,使用DRAM时,一般只用于申请堆空间。
全局变量、静态变量和堆空间等有可能会在SRAM中分配,也有可能在DDR中分配,这取决于具体情况。
一般而言,栈空间仍然会分配在SRAM中。