外擴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
被浏覽
15.6k
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

撰寫答案

請登錄後再發布答案,點擊登錄

發布
問題

分享
好友

手機
浏覽

掃碼手機浏覽