ESP32-内存优化

本文介绍了ESP32设备的内存优化方法,包括修改SPIRAM配置、调整BLE设置、检查全局变量大小、动态内存管理和任务栈大小优化。通过这些措施,可以在不使用外部PSRAM的情况下,有效提升内存利用率,解决物联网应用中可能出现的内存不足问题。
摘要由CSDN通过智能技术生成

参考链接

内存优化

1 修改 SPI RAM config
2 修改 BLE 的配置
在这里插入图片描述

3 检查是否有较大的全局变量
在这里插入图片描述

4 动态申请的空间调试
5 任务的栈的大小
内存优化
ESP32 内部 SRAM 有 520KB,但是系统启动后可用内存约为 300KB(以 Hello World 工程为例),很多物联网应用都会使用 Wi-Fi 连接云端/ Bluetooth 和手机通信/ OTA 升级等功能,可能会面临内存不足问题。尽管 ESP32 可以外挂 PSRAM,为了节省成本,可以不使用 PSRAM 当然最佳。

优化措施
1 修改 SPI RAM config
2 修改 BLE 的配置
如果有打开蓝牙功能,可以关闭没有使用到的蓝牙部分功能。如图:

修改 BLE 的配置

3 检查是否有较大的全局变量
使用 make size-components 查看生成的固件内存使用情况, 查看你的模块中是否存在较大的全局变量

total sizes:
DRAM .data size: 13272 bytes
DRAM .bss size: 34024 bytes
Used static DRAM: 47296 bytes ( 77284 available, 38.0% used)
Used static IRAM: 96352 bytes ( 34720 available, 73.5% used)
Flash code: 1101719 bytes
Flash rodata: 267772 bytes
Total image size:~1479115 bytes (.bin may be padded larger)
Per-archive contributions to ELF file:
Archive File DRAM .data & .bss IRAM Flash code & rodata Total
libbt.a 325 2338 460 155773 53596 212492
libmesh.a 186 3636 0 161096 38471 203389
libnet80211.a 924 8906 3782 111740 13750 139102
libmbedtls.a 100 268 30 108099 19263 127760
liblwip.a 19 4172 0 89540 16876 110607
libc.a 0 20 0 85809 6516 92345

DRAM: 链接器将非常量静态数据和未初始化数据放入 0x3FFB0000 — 0x3FFF0000 这 256kB 的区域。注意,如果使用蓝牙堆栈,此区域会减少 64kB(通过将起始地址移至 0x3FFC0000 )。如果使用了内存跟踪的功能,该区域的长度还要减少 16kB 或者 32kB。放置静态数据后,留在此区域中的剩余空间都用作运行时堆。常量数据也可以放在 DRAM 中,需要使用 DRAM_ATTR 宏来声明。

bss: 未初始化的全局变量。
data: 已初始化的全局变量。
IRAM: ESP-IDF 将内部 SRAM0 区域(在技术参考手册中有定义)的一部分分配为指令 RAM。除了开始的 64kB 用作 PRO CPU 和 APP CPU 的高速缓存外,剩余内存区域(从 0x40080000 至 0x400A0000 )被用来存储应用程序中部分需要在 RAM 中运行的代码。

4 动态申请的空间调试
重定义 内存 分配函数,实现分配记录
在运行过程中打印内存的分配情况
分析、修改代码实现内存及时回收
5 任务的栈的大小
打开 FreeRTOS 的 configUSE_TRACE_FACILITY 配置项和一些相关的配置项
使用 void vTaskList( char * pcWriteBuffer ) 获取所有 task 的相关状态
查看 任务的 HWM,即最小剩余内存
调整比较大的 HWM 对应的 task 堆栈大小
反复测试,确定是否满足应用需求

其他优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值