想做个内存管理的,类似stm32的内存管理,但是超出芯片自带内存就报错了
这样定义编译正常
uint8_t membase[1024] __attribute__((at(0x30000000)));
这样就报错内存溢出
uint8_t membase[300*1024] __attribute__((at(0x30000000)));
W800默认所有函数都是xip运行,xip相比于ram运行速率更低,如果算法对算力有要求,可以指定一些函数在ram运行,实现方法如下:
__attribute__((section(".sram.text")))
int TestSram(void)
{
return 0;
}
*(.sram.text)
W800还支持某些文件或者某些库的代码段都在ram运行,实现方法如下:
*(.text)
*(.text*)
*(.text.*)
替换为
*(EXCLUDE_FILE (*libuser.a *wm_diy_demo.o).text*)
*(.text*)
W800支持一些只读全局变量加载到ram,实现方法如下
__attribute__((section(".sram.data")))
char sram_buf[16] = "hello";
*(.sram.data)
以上内容来源于大神@Alex
又来了一位大神,好嗨哦
你试下调到288K以上的数组,应该就报错了

@heeson 大哥 我怎么记得D-SRAM 分配的总大小就那么大一点,总得给程序其他变量留点活路吧
@ZYQ 外扩了一个8mb的Psram,我想直接定义一个100K的数组到外部PSRAM地址,是不能这样搞?stm32可以的
uint8_t membase[100*1024] __attribute__((at(0x30000000)));---内存溢出
@heeson 嗯,刚看了下map文件,地址还是在内存里的,不是在ox30000000地址
@heeson 可以的,你只需要在链接脚本里定义号你的PSRAM 的起始地址和大小,然后仿造下面的书写形式就可以了,然后定义数组的时候再在后面加上——attribute 限定你的地址就OK
@heeson 简单点直接写uint8_t membase = (uint8_t )(0x30000000);这样是在psram里的。
uint8_t membase = (uint8_t )(0x30000000);这样是在psram里的。
咦,打不上指针*号
@abcd 可以啊,你这样也可以没毛病