espidf 使用psram

111hll
Posts: 8
Joined: Sat Jul 24, 2021 3:29 am

espidf 使用psram

Postby 111hll » Sat Jul 24, 2021 3:33 am

menuconfig 配置使用外部ram之后 在外部开辟了一个数组 编译总是提示数组分配到了内部ram区 我查看了SDKconfig文件 配置的内容都正确

abcrazy2020
Posts: 16
Joined: Thu May 06, 2021 6:01 am

Re: espidf 使用psram

Postby abcrazy2020 » Sat Jul 24, 2021 7:40 am

参考文档:
https://docs.espressif.com/projects/esp ... l-ram.html

申请内存空间时,需要指定片外内存。同时要注意使用的限制:

片外 RAM 使用限制
使用片外 RAM 有下面一些限制:

Flash cache 禁用时(比如,正在写入 flash),片外 RAM 将无法访问;同样,对片外 RAM 的读写操作也将导致 cache 访问异常。出于这个原因,ESP-IDF 不会在片外 RAM 中分配任务堆栈(详见下文)。

片外 RAM 不能用于储存 DMA 事物描述符,也不能用作 DMA 读写操作的缓冲区 (Buffer)。与 DMA 搭配使用的 Buffer 必须先使用 heap_caps_malloc(size, MALLOC_CAP_DMA) 进行分配,之后可以调用标准 free() 回调释放 Buffer。

片外 RAM 与片外 flash 使用相同的 cache 区域,这意味着频繁在片外 RAM 访问的变量可以像在片上 RAM 中一样快速读取和修改。但访问大块数据时(大于 32 KB),cache 空间可能会不足,访问速度将回落到片外 RAM 访问速度。此外,访问大块数据可以挤出 flash cache,可能会降低代码执行速度。

一般来说,片外 RAM 不可用作任务堆栈存储器。因此 xTaskCreate() 及类似函数将始终为堆栈和任务 TCB 分配片上储存器,而 xTaskCreateStatic() 类型的函数将检查传递的 Buffer 是否属于片上存储器。

111hll
Posts: 8
Joined: Sat Jul 24, 2021 3:29 am

Re: espidf 使用psram

Postby 111hll » Sat Jul 24, 2021 10:55 am

我是定义的静态变量 不是内存中分配局部变量
在数组前加了 ext-ram字样的符号

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: espidf 使用psram

Postby ESP_Gargamel » Mon Jul 26, 2021 7:57 am


Who is online

Users browsing this forum: Google [Bot] and 33 guests