【求助】关于【psram】问题

[复制链接]
查看1838 | 回复15 | 2024-2-21 21:24:41 | 显示全部楼层 |阅读模式
本帖最后由 xiaoch669 于 2024-2-22 13:21 编辑

大家好,我又来了。
最近在移植一个模拟器项目,接口改的差不多了,结果编译报错
  1. 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'
  2. 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。
其中
项目代码中的大数组在下面
数组.png
为了用pSRAM,我又去找了psram的示例代码,运行了一下
在aithinker_Ai-M6X_SDK\drivers\lhal\include\compiler\compiler_ld.h
头文件里面找到这句
  1. #define ATTR_PSRAM_SECTION __attribute__((section(".psram_data")))
复制代码
GPT说是
  1. 这句宏定义 ATTR_PSRAM_SECTION 可能是为了在编写C代码时方便地将特定变量或函数指定存储在PSRAM(Pseudo Static Random Access Memory,伪静态随机存取存储器)的数据段中。

  2. __attribute__((section(".psram_data"))) 是GCC编译器的一种语法,用于指定变量或函数存放的段(section)。在这里,.psram_data 可能代表着一个PSRAM的数据段,意味着被此宏修饰的变量或函数将被存放在PSRAM中。这样做的目的可能是为了利用PSRAM的高速和临时存储特性,提高对这些数据的访问速度。
复制代码
我写了个示例,验证了一下
psram.png
结果并没有输出"hello",而是输出
  1. psram read write test
  2. Data stored in PSRAM: ªªªªªªªª
  3. psram_data[0] = ª
  4. psram_data[1] = ª
  5. psram_data[2] = ª
  6. psram_data[3] = ª
  7. psram_data[4] = ª
  8. psram_data[5] = ª
  9. Address of psram_data array in PSRAM: 0xa8000000
复制代码
请大佬们教教我为什么会这样?pSram怎么能充分利用?我的大数组该怎么存才能不报这种错误 region 'ram_memory' overflowed by 510760 bytes


工程文件如下

psram.rar (4.04 KB, 下载次数: 4)
回复

使用道具 举报

爱笑 | 2024-2-22 08:34:33 | 显示全部楼层
抓个技术来给你解决!
用心做好保姆工作
回复 支持 反对

使用道具 举报

Ai-Thinker小泽 | 2024-2-22 08:53:53 | 显示全部楼层
你先在proj.conf下启动PSRAM,然后可以看到在master分支下那个旧的AiPi-Cam工程中有一个bl616_psram.ld的文件,复制到你的工程下,然后修改CMakeLists.txt中添加链接sdk_set_linker_script(bl616_psram.ld)试试看。
回复 支持 反对

使用道具 举报

曹县 | 2024-2-22 09:12:40 | 显示全部楼层
回复

使用道具 举报

xiaoch669 | 2024-2-22 10:11:30 | 显示全部楼层
Ai-Thinker小泽 发表于 2024-2-22 08:53
你先在proj.conf下启动PSRAM,然后可以看到在master分支下那个旧的AiPi-Cam工程中有一个bl616_psram.ld的文 ...

微.png
已照做,但是串口没任何输出,board_init();输出也没有,不能运行
回复 支持 反对

使用道具 举报

7788 | 2024-2-22 13:14:51 | 显示全部楼层
还不行?
回复

使用道具 举报

xiaoch669 | 2024-2-22 13:18:51 | 显示全部楼层

是的,我把工程发出来
回复 支持 反对

使用道具 举报

xiaoch669 | 2024-2-22 13:22:50 | 显示全部楼层
Ai-Thinker小泽 发表于 2024-2-22 08:53
你先在proj.conf下启动PSRAM,然后可以看到在master分支下那个旧的AiPi-Cam工程中有一个bl616_psram.ld的文 ...

工程文件在文章末尾
回复 支持 反对

使用道具 举报

xiaoch669 | 2024-2-22 13:24:03 | 显示全部楼层

工程文件在文章末尾
回复 支持 反对

使用道具 举报

Ai-Thinker小泽 | 2024-2-22 14:32:44 | 显示全部楼层
本帖最后由 Ai-Thinker小泽 于 2024-2-22 14:33 编辑
xiaoch669 发表于 2024-2-22 13:22
工程文件在文章末尾

你开了PSRAM后,先定义那个宏,在需要定义在里面的变量前面加ATTR_PSRAM_SECTION
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则