espidf 使用psram
espidf 使用psram
menuconfig 配置使用外部ram之后 在外部开辟了一个数组 编译总是提示数组分配到了内部ram区 我查看了SDKconfig文件 配置的内容都正确
-
- Posts: 16
- Joined: Thu May 06, 2021 6:01 am
Re: espidf 使用psram
参考文档:
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 是否属于片上存储器。
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 是否属于片上存储器。
Re: espidf 使用psram
我是定义的静态变量 不是内存中分配局部变量
在数组前加了 ext-ram字样的符号
在数组前加了 ext-ram字样的符号
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Who is online
Users browsing this forum: Bing [Bot] and 86 guests