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

[复制链接]
2019|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
 楼主| sy12138 发表于 2022-10-13 15:03 | 显示全部楼层
双击打开 map 文件,可以看到,此时 p_data、cmp_addr 和 RSRAM_DATA 都存放到了指定的 SRAM 地址,而 Run_In_Sram_test()和 Delay()由编译器分配到了 0x0800xxxx 的地址,仍旧存放在 Flash 里面
04523eab5cf3361f2d2eac3755329b6.png
 楼主| sy12138 发表于 2022-10-13 15:05 | 显示全部楼层
将函数保存在SRAM中也是类似,使用 void 函数名(void) __attribute__((section(".ARM.__at_地址")));的方式,可以将函数定义到指定地址
88f587a910d7b3b696e54f16be714d5.png
 楼主| sy12138 发表于 2022-10-13 15:06 | 显示全部楼层
打开 map 文件可以看到,Run_In_Sram_test()和 Delay()已分别指定到了 0x10000401 和0x10000801,此时指令是存到了 SRAM 虚拟的前 64K,与前面定义的数组和变量错开了一个区域。
caf1cad3330bd87b9515aa5bba9178f.png
biechedan 发表于 2022-11-1 12:07 | 显示全部楼层
扩展内存,外加SRAM或者SDRAM了吗  
GGG3 发表于 2022-11-1 14:57 | 显示全部楼层
本帖最后由 GGG3 于 2022-11-1 14:58 编辑
biechedan 发表于 2022-11-1 12:07
扩展内存,外加SRAM或者SDRAM了吗

看起来应该没有
cemaj 发表于 2022-11-1 15:03 | 显示全部楼层
怎么保存后备RAM数据               
mickit 发表于 2022-11-1 15:24 | 显示全部楼层
data段与bss段是怎么加载到SRAM中  
 楼主| sy12138 发表于 2022-11-1 15:32 | 显示全部楼层
cemaj 发表于 2022-11-1 15:03
怎么保存后备RAM数据

你说的是BKP区吗?这部分在不掉电情况下是自动保存的
pattywu 发表于 2022-11-1 15:35 | 显示全部楼层
mickit 发表于 2022-11-1 15:24
data段与bss段是怎么加载到SRAM中

bss段直接清0,data段直接从FLASH中复制。
pattywu 发表于 2022-11-1 15:36 | 显示全部楼层
全局变量,就在SRAM中,保存到特定位置,有毛用。
 楼主| sy12138 发表于 2022-11-1 15:37 | 显示全部楼层
mickit 发表于 2022-11-1 15:24
data段与bss段是怎么加载到SRAM中

在进入main()函数之前由C库函数__main()自动加载,__main()在启动文件中调用,执行完之后会跳转到main()函数
everyrobin 发表于 2022-11-1 15:51 | 显示全部楼层
要程序放到sram中运行么?   
 楼主| sy12138 发表于 2022-11-1 16:00 | 显示全部楼层
pattywu 发表于 2022-11-1 15:36
全局变量,就在SRAM中,保存到特定位置,有毛用。

SRAM数据在STOP2模式下不保存,可以把变量保存在R-SRAM防止丢失,这里只是提供存放的方法
 楼主| sy12138 发表于 2022-11-1 16:01 | 显示全部楼层
everyrobin 发表于 2022-11-1 15:51
要程序放到sram中运行么?

不需要的
mollylawrence 发表于 2022-11-1 16:29 | 显示全部楼层
mdk 如何配置sram     
Afanx 发表于 2022-11-1 16:59 | 显示全部楼层
saservice 发表于 2022-11-1 17:22 | 显示全部楼层
如何定义变量使其能在SRAM中?  
cemaj 发表于 2022-11-1 18:18 | 显示全部楼层
通常,我们会将栈区 STACK 分配到内部 SRAM,用来保存某些程序所用到的局部变量
caigang13 发表于 2022-11-1 18:29 来自手机 | 显示全部楼层
临时变量一般都是存在RAM中的吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

404

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部