乐鑫技术交流
直播中

李微波

8年用户 998经验值
私信 关注
[问答]

请问ESP32上的SRAM1是否可用?

我最近在做一些尝试,在现有的工程中添加AT模块,但在编译时出现如下错误提示:

section `.dram0.bss' will not fit in region `dram0_0_seg'
DRAM segment data does not fit.
region `dram0_0_seg' overflowed by 9568 bytes

从map文件来看,dram0_0_seg所占的大小的确已经超出的SRAM 2所允许的范围。

为什么dram0_0_seg允许的大小为0x0001e6a4?这个大小是否可以更改?如果可以更改的话应如何更改?

另外,目前我希望将.bss段中的部分数据放入SRAM 1中,以获取更多的RAM,这样的方案是否可行?如果可行的话,应如何使用SRAM 1?
                                      

回帖(1)

王芳

2024-6-25 16:56:59
从您提供的信息来看,dram0_0_seg的大小为0x0001e6a4,这可能是由于配置文件或编译器设置导致的。

要解决这个问题,您可以尝试以下方法:

1. **优化代码和数据结构**:检查您的代码,看看是否有可以优化的地方,例如减少全局变量的使用,使用更紧凑的数据结构等。

2. **调整分区方案**:您可以在`partitions.csv`文件中调整分区大小,以增加SRAM2的大小。但请注意,这可能会影响其他分区的大小。

3. **使用SRAM1**:将部分数据放入SRAM1中是一个可行的方案,但需要注意的是,SRAM1主要用于存储程序代码,其可用空间有限。您可以使用以下方法将数据放入SRAM1:

   a. 使用`__attribute__((section(".sram1_bss")))`将.bss段的数据放入SRAM1。例如:

   ```c
   uint8_t my_data[1024] __attribute__((section(".sram1_bss")));
   ```

   b. 在`ld`链接脚本中添加一个新的内存段,例如:

   ```
   MEMORY
   {
       iram1 (rwx) : ORIGIN = 0x400C0000, LENGTH = 0x40000
   }

   SECTIONS
   {
       .sram1_bss (NOLOAD) :
       {
           *(.sram1_bss)
       } > iram1
   }
   ```

   c. 在`makefile`或`project_config.h`中添加以下宏定义:

   ```
   -DCONFIG_SPIRAM_SUPPORT
   -DCONFIG_SPIRAM_BOOT_INIT
   ```

4. **调整编译器设置**:您可以在编译器设置中调整一些参数,例如增加优化级别(如`-Os`),以减少生成的代码大小。

5. **使用外部存储器**:如果以上方法仍无法解决问题,您可以考虑使用外部存储器(如SPI Flash)来扩展存储空间。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分