C语言指针存在SRAM里面吗

描述

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

sram

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

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

sram

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

sram

大小

 

量相差很大

sram

这是我自己电脑的实测,最慢的反而是内存,算完是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 很便宜。

sram

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

sram

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

sram

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

sram

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

sram

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

sram

可以看到应该是有两块SDRAM

sram

sram

大概是这样的

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

SDRAM是同步动态随机存取存储器的缩写,而SRAM是同步随机存取存储器的缩写。它们的最大区别在于,SDRAM必须被外部时钟同步刷新,而SRAM则不需要刷新。 虽然SRAM速度更快,读写时间也更短,但SRAM的成本较高,所以在存储器容量较小的情况下,通常使用SRAM,而对于大容量存储器,则使用SDRAM。 同步(Synchronous )是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准 动态(Dynamic )是指存储阵列 需要不断的刷新来保证数据不丢失 随机(Random )是指数据不是线性依次存储,而是自由指定地址进行 数据读写SDRAM具有空间存储量大、读写速度快、价格相对便宜等优点。 然而由于SDRAM内部利用电容来存储数据,为保证数据不丢失,需要持续对各存储电容进行刷新操作;同时在读写过程中 需要考虑行列管理、各种操作延时等,由此导致了其控制逻辑复杂的特点。 SDRAM 内部可以理解为一个存储阵列,表格中的每一个单元格可以类比为存储阵列的单个存储单元。若想要实现存储阵列中的某一存储单元的数据读写操作,我们要通过行地址(Row Address)和列地址 (Column Address)(先行后列)精确定位到这一存储单元,进而进行数据的读写操作,这就是所谓的随机地址存取.

sram

就是这样

sram

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

sram

这里翻出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 中。

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 部分。放入该部分的值在启动时不会被初始化,在软件重启后也会保持值不变。

 

sram

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

        审核编辑:彭菁

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分