本帖最后由 xiaoch669 于 2024-12-23 22:39 编辑
大家好,我又来了。
编译报错
- d:/pai/aipi-open-kits/aithinker_ai-m6x_sdk/toolchain_gcc_t-head_windows/bin/../lib/gcc/riscv64-unknown-elf/10.2.0/../../../../riscv64-unknown-elf/bin/ld.exe: build_out\bl616_gba_bl616.elf section `.bss' will not fit in region `ram_memory'
- d:/pai/aipi-open-kits/aithinker_ai-m6x_sdk/toolchain_gcc_t-head_windows/bin/../lib/gcc/riscv64-unknown-elf/10.2.0/../../../../riscv64-unknown-elf/bin/ld.exe: region `ram_memory' overflowed by 510760 bytes
复制代码 问了GPT,说是
section '.bss' will not fit in region 'ram_memory':这说明了链接器在尝试将.bss节(通常是用来存放未初始化的全局变量或静态变量的内存段)放入名为ram_memory的内存区域时出现了溢出。 region 'ram_memory' overflowed by 510760 bytes:这是指内存区域ram_memory溢出了510760字节,也就是该区域无法容纳所有的数据。
M61-32S的配置是4MBpSRAM,532KB SRAM,128KBROM,应该是SRAM不够,我看看网上的方案,应该可以用pSRAM。
其中
项目代码中的大数组在下面
为了用pSRAM,我又去找了psram的示例代码,运行了一下
在aithinker_Ai-M6X_SDK\drivers\lhal\include\compiler\compiler_ld.h
头文件里面找到这句
- #define ATTR_PSRAM_SECTION __attribute__((section(".psram_data")))
复制代码 GPT说是
- 这句宏定义 ATTR_PSRAM_SECTION 可能是为了在编写C代码时方便地将特定变量或函数指定存储在PSRAM(Pseudo Static Random Access Memory,伪静态随机存取存储器)的数据段中。
- __attribute__((section(".psram_data"))) 是GCC编译器的一种语法,用于指定变量或函数存放的段(section)。在这里,.psram_data 可能代表着一个PSRAM的数据段,意味着被此宏修饰的变量或函数将被存放在PSRAM中。这样做的目的可能是为了利用PSRAM的高速和临时存储特性,提高对这些数据的访问速度。
复制代码 我写了个示例,验证了一下
结果没有任何输出。
而运行psram示例代码可以正确打印
请大佬们教教我为什么会这样?pSram怎么能充分利用?我的大数组该怎么存才能不报这种错误 region 'ram_memory' overflowed by 510760 bytes
工程文件如下
|