当前位置: 首页 > news >正文

ESP-Bluedroid这个在C5上能不能用Psram内存

可以。ESP32-C5 上的 ESP-Bluedroid 可以使用 PSRAM,但不是 100% 全部蓝牙内存都能搬到 PSRAM。正确说法是:Bluedroid 的一部分动态内存、部分 BSS 静态内存可以放到 PSRAM,蓝牙控制器、DMA、任务栈、时序敏感内存仍然会占用内部 RAM

ESP-IDF 的 ESP32-C5 配置里有专门选项:CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST,说明是BT/BLE 优先从 PSRAM malloc 内存;还有CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY,用于让 Bluedroid 的 BLE 环境内存改为动态分配。(Espressif Systems)

建议配置

idf.py menuconfig里这样开:

Component config → ESP PSRAM → Support for external SPI RAM → SPI RAM config → Make RAM allocatable using malloc() as well → Allow .bss segment to be placed in external memory

ESP32-C5 官方文档说明,PSRAM 可以加入 capability allocator,用heap_caps_malloc(..., MALLOC_CAP_SPIRAM)分配;也可以配置为普通malloc()可用,这是默认推荐方式。(Espressif Systems)

然后再开 Bluedroid 相关配置:

Component config → Bluetooth → Bluetooth Host → Bluedroid Component config → Bluetooth → Bluedroid Options → BT/BLE will first malloc the memory from the PSRAM → Use dynamic memory allocation in BT/BLE stack

对应配置大概是:

CONFIG_BT_ENABLED=y CONFIG_BT_BLUEDROID_ENABLED=y CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=y CONFIG_SPIRAM=y CONFIG_SPIRAM_USE_MALLOC=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y

如果你的menuconfig里看不到SPI RAM选项,需要在组件依赖里加esp_psram,因为 ESP32-C5 的官方文档说明,只有工程包含esp_psram组件时,SPI RAM 配置项才会出现。(Espressif Systems)

main/CMakeLists.txt示例:

idf_component_register( SRCS "main.c" INCLUDE_DIRS "." REQUIRES esp_psram bt )

Bluedroid 哪些能放 PSRAM

可以优化的主要是这几类:

1. Bluedroid 的部分动态 malloc 内存 2. BLE 环境内存 3. Bluedroid 库里的部分 .bss 静态区 4. 你自己应用层的大 buffer、队列、缓存

ESP32-C5 外部 RAM 文档明确写到,打开CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY后,lwIP、net80211、libpp、wpa_supplicant 和bluedroid这些 ESP-IDF 库的零初始化 BSS 数据可以放到外部 RAM。(Espressif Systems)

但这些一般还会留在内部 RAM:

1. Bluetooth Controller 关键内存 2. HCI / Controller 相关低层 buffer 3. ISR / DMA / cache 敏感内存 4. 默认 FreeRTOS 任务栈 5. 需要 MALLOC_CAP_INTERNAL 的分配

ESP32-C5 官方文档也提醒,PSRAM 在 flash cache disabled 时不可访问,默认情况下任务栈也不会放到外部 RAM。(Espressif Systems)

验证是否真的省了内部 RAM

你可以在蓝牙初始化前后打印内部 RAM 和 PSRAM:

#include "esp_log.h" #include "esp_heap_caps.h" #include "esp_psram.h" static const char *TAG = "mem"; static void print_mem(const char *stage) { ESP_LOGI(TAG, "[%s] internal free: %u", stage, (unsigned)heap_caps_get_free_size(MALLOC_CAP_INTERNAL)); ESP_LOGI(TAG, "[%s] psram free: %u", stage, (unsigned)heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); ESP_LOGI(TAG, "[%s] psram size: %u", stage, (unsigned)esp_psram_get_size()); }

调用位置:

print_mem("before bt init"); /* esp_bt_controller_init() esp_bt_controller_enable() esp_bluedroid_init() esp_bluedroid_enable() */ print_mem("after bluedroid enable");

如果配置有效,你会看到:

内部 RAM 下降减少 PSRAM 下降增加

但不要期待内部 RAM 完全不掉。

关键结论

ESP32-C5 + ESP-Bluedroid 可以用 PSRAM,建议至少打开:

CONFIG_SPIRAM_USE_MALLOC CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY

不过如果你们是C5 上 Wi-Fi + BLE + Matter/Thread/应用业务一起跑,内部 RAM 仍然会比较紧。新项目如果没有 Bluedroid 历史包袱,NimBLE 通常比 Bluedroid 更适合 C5,因为 ESP-IDF 官方说明 NimBLE 是 BLE-only 的轻量 Host,更适合资源受限应用。(Espressif Systems)

http://www.zskr.cn/news/1452447.html

相关文章:

  • 从工地到代码:安全帽检测数据集VOC格式详解与LabelMe标注实战
  • 手机号码定位系统:3步实现精准位置查询与地图可视化
  • 国内头部海参供应商实力排行 品质与服务双维度解析 - 真知灼见33
  • 避坑指南:YOLOv5训练猫狗数据集时,为什么你的模型只识别出一种动物?(附标签检查与数据清洗实战)
  • PyTorch模型部署实战:用TorchScript把动态图‘冻’起来,告别Python依赖
  • 设计个人四季衣物收纳轮换程序,根据季节气温自动推荐穿搭收纳方案,适配小户型。
  • pycharm可视化,中文显示方框
  • AI工具与设计工具整合全链路拆解,从Prompt工程到交付验收的12个关键断点及修复方案
  • 多模态推荐系统:技术演进与MUSE框架实践
  • 极空间自带的文件管理不够用?我用File Browser补上了!
  • Seraphine:基于LCU API的英雄联盟数据查询与智能辅助工具技术解析
  • 鸿蒙数学 108 篇 第四十三篇:四象运算基础应用
  • uni-app一键接入腾讯云人脸核身:身份证OCR+动作活体+1:1比对全链路支持
  • 3步搞定网盘直链下载助手:告别限速的全能解决方案
  • 智慧树自动刷课插件:终极学习助手快速上手指南
  • 基于MPU-9250与Arduino的3D记忆游戏立方体设计与实现
  • RTX Spark重磅来袭:知识图谱+AI Agent,重新定义未来个人电脑
  • 告别PyTorch依赖:用ONNX Runtime在CPU上高效运行BGE中文向量模型
  • 从医学影像到街景理解:U-Net模型跨界应用全指南(含数据准备与模型微调技巧)
  • ENVI FLAASH大气校正报错?别慌,先检查你的高程数据准不准(附Landsat8实操避坑)
  • 绿联科技上线开发者平台,为什么说这是NAS行业的一个关键落子?
  • SpringBoot OAuth2单点登录实战包:含认证中心、Java客户端及一键部署指南
  • .NET 2.0环境下可直接编译的WebSocket服务与客户端(支持WS/WSS)
  • 麒麟V10系统4K屏字体太小?别急,用这三条命令搞定(实测有效)
  • PTC全家桶的license管理,我劝你别一个个单搞了
  • Collabio Game:游戏化社交行为数据挖掘实验平台的设计与实践
  • 新手入门:跟快马学编程,轻松解决小皮面板80端口冲突问题
  • 不锈钢热转印花膜厂家实力排行:珠三角长三角头部梯队盘点 - 奔跑123
  • 从零到一:如何用BepInEx为你的游戏注入无限可能
  • 用Python和Scikit-learn给人民币‘看相’:一个颜色矩+SVM的纸币面额识别小项目