外扩8M的PSRAM,请问能用__attribute__((at(0x30000000)))这样定义变量吗?

发布于 2022-04-08 14:25:48

想做个内存管理的,类似stm32的内存管理,但是超出芯片自带内存就报错了
这样定义编译正常
uint8_t membase[1024] __attribute__((at(0x30000000)));
这样就报错内存溢出
uint8_t membase[300*1024] __attribute__((at(0x30000000)));
image.png
image.png

查看更多

关注者
0
被浏览
18k
2 个回答
abcd
abcd 认证专家 2022-04-08
我只是个路过的老年人~

可以吧,我用我的外扩psram的板子试了,可以正常打印出来数据。
image.png
image.png

isme
isme 认证专家 2022-04-08
冰镇大西瓜
W800默认所有函数都是xip运行,xip相比于ram运行速率更低,如果算法对算力有要求,可以指定一些函数在ram运行,实现方法如下:
  1. 给函数设置attribute
__attribute__((section(".sram.text")))
int TestSram(void)
{
    return 0;
}
  1. 修改gcc_csky.ld,在.data中添加如下一行
  *(.sram.text)
W800还支持某些文件或者某些库的代码段都在ram运行,实现方法如下:
  1. 修改gcc_csky.ld,在.text把下面三行
  *(.text)
  *(.text*)
  *(.text.*)

替换为

  *(EXCLUDE_FILE (*libuser.a *wm_diy_demo.o).text*)
  1. 修改gcc_csky.ld,在.data中添加如下一行
  *(.text*)
W800支持一些只读全局变量加载到ram,实现方法如下
  1. 给全局变量设置attribute
 __attribute__((section(".sram.data")))
char sram_buf[16] = "hello";
  1. 修改gcc_csky.ld,在.data中添加如下一行
  *(.sram.data)

以上内容来源于大神@Alex

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览