打印
[N32G45x]

如何把变量保存在SRAM中指定地址

[复制链接]
1198|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sy12138|  楼主 | 2022-10-13 15:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sy12138 于 2022-11-2 10:24 编辑

#每日话题#

如图可以看到,代码先给数组 p_data、cmp_addr 和变量 RSRAM_DATA 指定了地址,此时函数 Delay(uint32_t count)和 Run_In_Sram_test(void) 没有指定地址,存放地址由编译器自动分配;

d913f572e7e15a96ea507667904848a.png (196.73 KB )

d913f572e7e15a96ea507667904848a.png

使用特权

评论回复
沙发
sy12138|  楼主 | 2022-10-13 15:03 | 只看该作者
双击打开 map 文件,可以看到,此时 p_data、cmp_addr 和 RSRAM_DATA 都存放到了指定的 SRAM 地址,而 Run_In_Sram_test()和 Delay()由编译器分配到了 0x0800xxxx 的地址,仍旧存放在 Flash 里面

04523eab5cf3361f2d2eac3755329b6.png (318.9 KB )

04523eab5cf3361f2d2eac3755329b6.png

使用特权

评论回复
板凳
sy12138|  楼主 | 2022-10-13 15:05 | 只看该作者
将函数保存在SRAM中也是类似,使用 void 函数名(void) __attribute__((section(".ARM.__at_地址")));的方式,可以将函数定义到指定地址

88f587a910d7b3b696e54f16be714d5.png (129.14 KB )

88f587a910d7b3b696e54f16be714d5.png

使用特权

评论回复
地板
sy12138|  楼主 | 2022-10-13 15:06 | 只看该作者
打开 map 文件可以看到,Run_In_Sram_test()和 Delay()已分别指定到了 0x10000401 和0x10000801,此时指令是存到了 SRAM 虚拟的前 64K,与前面定义的数组和变量错开了一个区域。

caf1cad3330bd87b9515aa5bba9178f.png (258.38 KB )

caf1cad3330bd87b9515aa5bba9178f.png

使用特权

评论回复
5
biechedan| | 2022-11-1 12:07 | 只看该作者
扩展内存,外加SRAM或者SDRAM了吗  

使用特权

评论回复
6
GGG3| | 2022-11-1 14:57 | 只看该作者
本帖最后由 GGG3 于 2022-11-1 14:58 编辑
biechedan 发表于 2022-11-1 12:07
扩展内存,外加SRAM或者SDRAM了吗

看起来应该没有

使用特权

评论回复
7
cemaj| | 2022-11-1 15:03 | 只看该作者
怎么保存后备RAM数据               

使用特权

评论回复
8
mickit| | 2022-11-1 15:24 | 只看该作者
data段与bss段是怎么加载到SRAM中  

使用特权

评论回复
9
sy12138|  楼主 | 2022-11-1 15:32 | 只看该作者
cemaj 发表于 2022-11-1 15:03
怎么保存后备RAM数据

你说的是BKP区吗?这部分在不掉电情况下是自动保存的

使用特权

评论回复
10
pattywu| | 2022-11-1 15:35 | 只看该作者
mickit 发表于 2022-11-1 15:24
data段与bss段是怎么加载到SRAM中

bss段直接清0,data段直接从FLASH中复制。

使用特权

评论回复
11
pattywu| | 2022-11-1 15:36 | 只看该作者
全局变量,就在SRAM中,保存到特定位置,有毛用。

使用特权

评论回复
12
sy12138|  楼主 | 2022-11-1 15:37 | 只看该作者
mickit 发表于 2022-11-1 15:24
data段与bss段是怎么加载到SRAM中

在进入main()函数之前由C库函数__main()自动加载,__main()在启动文件中调用,执行完之后会跳转到main()函数

使用特权

评论回复
13
everyrobin| | 2022-11-1 15:51 | 只看该作者
要程序放到sram中运行么?   

使用特权

评论回复
14
sy12138|  楼主 | 2022-11-1 16:00 | 只看该作者
pattywu 发表于 2022-11-1 15:36
全局变量,就在SRAM中,保存到特定位置,有毛用。

SRAM数据在STOP2模式下不保存,可以把变量保存在R-SRAM防止丢失,这里只是提供存放的方法

使用特权

评论回复
15
sy12138|  楼主 | 2022-11-1 16:01 | 只看该作者
everyrobin 发表于 2022-11-1 15:51
要程序放到sram中运行么?

不需要的

使用特权

评论回复
16
mollylawrence| | 2022-11-1 16:29 | 只看该作者
mdk 如何配置sram     

使用特权

评论回复
17
Afanx| | 2022-11-1 16:59 | 只看该作者


使用特权

评论回复
18
saservice| | 2022-11-1 17:22 | 只看该作者
如何定义变量使其能在SRAM中?  

使用特权

评论回复
19
cemaj| | 2022-11-1 18:18 | 只看该作者
通常,我们会将栈区 STACK 分配到内部 SRAM,用来保存某些程序所用到的局部变量

使用特权

评论回复
20
caigang13| | 2022-11-1 18:29 | 只看该作者
临时变量一般都是存在RAM中的吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

404

帖子

15

粉丝