C语言指针的值在哪里?在SRAM

2024-08-21 13:27:57 浏览数 (1)

应该有可以回答的上来的,但是大部分应该是回答不上来。标题的回答也不对。

计算机内存里面分这么几种数据

存在SRAM里面,嗯?内存?对也不对,大家觉得内存条应该很快了吧?不,不快。

我的电脑里面有三种cache,可以看到L1最小,L3最快

大小

量相差很大

这是我自己电脑的实测,最慢的反而是内存,算完是58.49G/s,L1居然到了2K G这个速度,L3是内存的大概3倍多。看时间L1和内存的时间是100倍。

就先记住:FLASH用来存储程序的,SRAM是用来存储运行程序中的中间变量。

然后SRAM有个别的名字叫缓存,这听懂了吧?

SRAM是静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。

RAM掉电数据会丢失,RW-data是非0初始化的数据,已初始化的数据需要被存储在掉电不会丢失的FLASH中,上电后会从FLASH搬移到RAM中。

SRAM是访问时间短的片上存储器,DRAM是访问时间长的片外存储器。因此SRAM 比DRAM 快。

DRAM 的存储容量更大,而SRAM 的尺寸更小。SRAM很贵,而DRAM 很便宜。

DRAM简单,电容充电就是有1了

读取的时候还得一个放大器读取?

电容这玩意儿漏电啊,要不停的刷新,不然一会儿就没电荷了

SRAM,是两个与门一个RS触发器,1bit的储存确实很复杂

要保证上下输入不一致,还得加一个二极管取反,这东西就是锁存器了

可以看到应该是有两块SDRAM

大概是这样的

LPDDR4是新一代面向移动设备的低功耗内存,它属于SDRAM家族的存储器产品。

SDRAM是同步动态随机存取存储器的缩写,而SRAM是同步随机存取存储器的缩写。它们的最大区别在于,SDRAM必须被外部时钟同步刷新,而SRAM则不需要刷新。

虽然SRAM速度更快,读写时间也更短,但SRAM的成本较高,所以在存储器容量较小的情况下,通常使用SRAM,而对于大容量存储器,则使用SDRAM。

同步(Synchronous )是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准

动态(Dynamic )是指存储阵列 需要不断的刷新来保证数据不丢失

随机(Random )是指数据不是线性依次存储,而是自由指定地址进行 数据读写SDRAM具有空间存储量大、读写速度快、价格相对便宜等优点。

然而由于SDRAM内部利用电容来存储数据,为保证数据不丢失,需要持续对各存储电容进行刷新操作;同时在读写过程中 需要考虑行列管理、各种操作延时等,由此导致了其控制逻辑复杂的特点。

SDRAM 内部可以理解为一个存储阵列,表格中的每一个单元格可以类比为存储阵列的单个存储单元。若想要实现存储阵列中的某一存储单元的数据读写操作,我们要通过行地址(Row Address)和列地址 (Column Address)(先行后列)精确定位到这一存储单元,进而进行数据的读写操作,这就是所谓的随机地址存取.

就是这样

我找了一个FSMS接口的图看看

这里翻出ESP32的手册看看

片内SRAM:

大小:512 KB

关系:片内SRAM = IRAM (192KB ) DRAM( 328KB )

IRAM :

作用:存储关键代码。

1.中断处理程序。注册中断处理程序时使用了 ESP_INTR_FLAG_IRAM,则中断处理程序必须要放入 IRAM。

2.可将一些时序关键代码放入 IRAM,以减少从 flash 中加载代码造成的相关损失。

3.以上两点为链接器自主操作,官方也提供接口,可以通过程序来声明函数,可以将 IRAM_ATTR 宏用作属性,直接将程序存储在这部分空间。

函数中的字符串或常量可能没有自动放入 RAM 中,这时可以使用 DRAM_ATTR 属性进行标记,或者也可以使用链接器脚本方法将它们自动放入 RAM 中。

代码语言:javascript复制
void IRAM_ATTR gpio_isr_handler(void* arg)
{
   const static DRAM_ATTR uint8_t INDEX_DATA[] = { 45, 33, 12, 0 };
   const static char *MSG = DRAM_STR("I am a string stored in RAM");
}

DRAM:

作用两个:

非常量静态数据(.data 段)和零初始化数据(.bss 段)由链接器放入内部 SRAM 作为数据存储。

这部分空间的使用是由链接器在对项目代码编译链接时,根据程序内容自动使用。空间大小随程序内部使用情况扩张。

官方也提供接口,可以通过程序声明变量,直接使用这部分空间。可以将 __NOINIT_ATTR 宏用作属性,从而将数据放入 .noinit 部分。放入该部分的值在启动时不会被初始化,在软件重启后也会保持值不变。

最后我还测试了一下这个GPU

这些东西是和计算机体系相关的,去看看教科书吧,不系统的学你始终是门外汉,也不是看两个文章就会的

代码语言:javascript复制
https://www.cnblogs.com/YYFaGe/p/16355179.html
代码语言:javascript复制
https://blog.csdn.net/weixin_41617098/article/details/130448419

0 人点赞