外扩 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

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览