前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言指针的值在哪里?在SRAM

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

作者头像
云深无际
发布2024-08-21 13:27:57
1120
发布2024-08-21 13:27:57
举报
文章被收录于专栏:云深之无迹

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

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

存在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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档