一、硬件说明
模块型号:ESP32‑WROOM‑32UE‑MQN4R2 主控芯片:ESP32‑D0WD‑V3(双核 LX6,非 ESP32C3) 存储配置:4MB Flash + 2MB PSRAM 编译目标:esp32
二、Flash 与 PSRAM 核心区别
很多新手分不清两者用途,一句话总结: Flash(4MB)= 硬盘:断电数据不丢失,存固件、网页文件、NVS 配置参数 PSRAM(2MB)= 扩展内存条:断电数据清空,只用于程序运行时大缓存
ESP32 原生内部 SRAM 仅 520KB,处理图片、HTTP 大缓冲区极易溢出,PSRAM 就是用来解决内存不足的。
三、必须开启的配置
idf.py menuconfig 开启如下选项: Component config → ESP32‑specific → Support for external SPI RAM
编译指令:
idf.py set-target esp32
idf.py build flash monitor
四、完整实战源码(可直接运行)
功能:打印设备存储信息、测试内部内存溢出、测试 PSRAM 读写
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "heap_caps.h"
#include "nvs_flash.h"
#include "spi_flash.h"
// 打印Flash、内部RAM、PSRAM信息
void print_mem_info(void)
{
size_t int_free = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
size_t psram_free = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
printf("========== 存储信息 ==========\\n");
printf("内部SRAM空闲:%d KB\\n", (int)(int_free / 1024));
printf("PSRAM空闲:%d KB\\n", (int)(psram_free / 1024));
uint32_t flash_size = spi_flash_get_chip_size();
printf("Flash总容量:%d MB\\n", (int)(flash_size / 1024 / 1024));
printf("==============================\\n");
}
void psram_test_task(void *arg)
{
print_mem_info();
// 1.测试:内部RAM申请1MB内存(必然失败)
uint8_t *int_buf = malloc(1024 * 1024);
if (int_buf == NULL)
{
printf("【测试通过】内部RAM不足,1MB申请失败\\n");
}
else
{
free(int_buf);
}
// 2.测试:PSRAM申请1MB大缓存(正常成功)
uint8_t *psram_buf = heap_caps_malloc(1024 * 1024, MALLOC_CAP_SPIRAM);
if (psram_buf != NULL)
{
printf("【测试通过】PSRAM 1MB内存申请成功\\n");
// 读写测试
memset(psram_buf, 0x66, 1024 * 1024);
if (psram_buf[0] == 0x66)
{
printf("【测试通过】PSRAM读写正常\\n");
}
heap_caps_free(psram_buf);
printf("PSRAM内存已释放\\n");
}
else
{
printf("【报错】未开启PSRAM配置!\\n");
}
while (1)
{
vTaskDelay(pdMS_TO_TICKS(3000));
}
}
void app_main(void)
{
// 初始化NVS闪存
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
nvs_flash_erase();
nvs_flash_init();
}
// 创建测试任务
xTaskCreate(psram_test_task, "psram_test", 4096, NULL, 5, NULL);
}
五、正常运行日志
========== 存储信息 ==========
内部SRAM空闲:380 KB
PSRAM空闲:1950 KB
Flash总容量:4 MB
==============================
【测试通过】内部RAM不足,1MB申请失败
【测试通过】PSRAM 1MB内存申请成功
【测试通过】PSRAM读写正常
PSRAM内存已释放
网硕互联帮助中心





评论前必须登录!
注册