打印
[STM32F4]

一个大数组是不是不能同时跨用内外部SRAM?

[复制链接]
616|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shskaoanc|  楼主 | 2022-8-31 19:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F407用FSMC挂外部SRAM,RAM大小512K*16bit,正好1MB外部SRAM已经测试可用(循环全写后读出来做数据比对),然后在MDK中启用外部ram的设置,并且申请一个1024*1024字节的大数组,编译后在map文件中已经能够看到
Total RW  Size (RW Data + ZI Data)           1049720 (1025.12kB)
说明数组确实已经编进去了
而且MDK自动给分配了RAM
    i                                        0x20000000   Data           4  main.o(.data)
    pSRAM                                    0x20000004   Data           4  main.o(.data)
    Data                                     0x20000008   Data           1  main.o(.data)
    uwTick                                   0x20000014   Data           4  stm32f4xx_hal.o(.data)
    uwTickPrio                               0x20000018   Data           4  stm32f4xx_hal.o(.data)
    uwTickFreq                               0x2000001c   Data           1  stm32f4xx_hal.o(.data)
    SystemCoreClock                          0x20000020   Data           4  system_stm32f4xx.o(.data)
    hsram1                                   0x20000024   Data          80  fsmc.o(.bss)
    __initial_sp                             0x20000478   Data           0  startup_stm32f407xx.o(STACK)
    BigData                                  0x68000000   Data       1048576  main.o(.bss)


BIgData就是那个大数组,大小1024*1024字节
那么问题来了,只要BigData的大小超过外部SRAM大小,哪怕超1字节,编译器就会报错说内存不够了
这是不是就说明单一一个变量不能跨内外部RAM使用,只能在内部或者在外部

使用特权

评论回复
沙发
caoenq| | 2022-9-1 09:00 | 只看该作者
是的

使用特权

评论回复
板凳
diweo| | 2022-9-1 10:55 | 只看该作者
地址不连续,当然不能跨用啊。

使用特权

评论回复
地板
heweibig| | 2022-9-1 21:49 | 只看该作者
跨用内外部SRAM?

使用特权

评论回复
5
phoenixwhite| | 2022-9-4 22:13 | 只看该作者
不能的。stm32不支持

使用特权

评论回复
6
febgxu| | 2022-9-7 17:46 | 只看该作者
这个外扩ram吗

使用特权

评论回复
7
jkl21| | 2022-9-7 19:12 | 只看该作者
没有用过这个方式扩展SRAM。

使用特权

评论回复
8
adolphcocker| | 2022-9-8 10:07 | 只看该作者
还不如换一个其他的芯片呢

使用特权

评论回复
9
deliahouse887| | 2022-9-11 14:17 | 只看该作者
可以使用,需要修改keil的配置

使用特权

评论回复
10
Bowclad| | 2022-9-11 21:01 | 只看该作者
地址不连续

使用特权

评论回复
11
houjiakai| | 2022-9-12 14:09 | 只看该作者
之前用51是可以的,不知道是否可以

使用特权

评论回复
12
LLGTR| | 2022-9-13 14:05 | 只看该作者
定义变量的时候,你肯定只能在一个RAM使用,就算是CPU也做不到内外RAM定义一个变量。

使用特权

评论回复
13
LLGTR| | 2022-9-13 14:07 | 只看该作者
办法一:拆分数组,类似单片机的高低字节。
方法二:使用虚拟地址,但是这个不能保证变量的内容稳定。
方法三:扩大RAM。

使用特权

评论回复
14
Bowclad| | 2022-9-13 19:48 | 只看该作者
不行地址不连续

使用特权

评论回复
15
Henryko| | 2022-9-13 20:59 | 只看该作者
地址不连续吧

使用特权

评论回复
16
SantaBunny| | 2023-2-22 22:06 | 只看该作者
将heap映射到外部SDRAM中,CSTACK在内部ram中。内部64K,外部你可以用512K的。

使用特权

评论回复
17
星辰大海不退缩| | 2023-2-23 16:51 | 只看该作者
不能吧,地址问题不连续

使用特权

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

本版积分规则

26

主题

110

帖子

1

粉丝