sy12138 发表于 2022-10-13 15:02

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

本帖最后由 sy12138 于 2022-11-2 10:24 编辑

#每日话题#

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

sy12138 发表于 2022-10-13 15:03

双击打开 map 文件,可以看到,此时 p_data、cmp_addr 和 RSRAM_DATA 都存放到了指定的 SRAM 地址,而 Run_In_Sram_test()和 Delay()由编译器分配到了 0x0800xxxx 的地址,仍旧存放在 Flash 里面

sy12138 发表于 2022-10-13 15:05

将函数保存在SRAM中也是类似,使用 void 函数名(void) __attribute__((section(".ARM.__at_地址")));的方式,可以将函数定义到指定地址

sy12138 发表于 2022-10-13 15:06

打开 map 文件可以看到,Run_In_Sram_test()和 Delay()已分别指定到了 0x10000401 和0x10000801,此时指令是存到了 SRAM 虚拟的前 64K,与前面定义的数组和变量错开了一个区域。

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

mollylawrence 发表于 2022-11-1 16:29
mdk 如何配置sram


saservice 发表于 2022-11-1 17:22

如何定义变量使其能在SRAM中?

cemaj 发表于 2022-11-1 18:18

通常,我们会将栈区 STACK 分配到内部 SRAM,用来保存某些程序所用到的局部变量

caigang13 发表于 2022-11-1 18:29

临时变量一般都是存在RAM中的吧?
页: [1] 2
查看完整版本: 如何把变量保存在SRAM中指定地址