ESP32 空闲堆内存测试

本文详细分析了ESP32在连接Wi-Fi和BLE时的空闲堆内存变化,对比了hello_world、station和ble_ibeacon示例的内存占用,揭示了Wi-Fi和BLE对内存消耗的影响及资源释放策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 测试目的

经常会有开发者提出基于 ESP32 的空闲堆内存问题,本文将测试在连接 Wi-Fi 和连接 BLE 的情况下 ESP32 的空闲堆内存大小。


二. 测试环境

为了保证测试结果的一致性,采用以下测试环境:

  • esp-idf
    编写本文时,使用的 esp-idf release 版本对应的 commit 为 2befd5c。可通过以下命令确认:

    git log --oneline -1
    

    结果为:

    2befd5c Merge branch 'feature/wifi_prov_ext_httpd_v3.3' into 'release/v3.3'
    
  • toolchain 版本
    gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a),可通过以下命令确认:

    xtensa-esp32-elf-gcc -v
    

    结果为(log 过长,只需要关注最后的这部分。如下):

    Thread model: posix
    gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a) 
    
  • 测试主机
    Linux 环境,Ubuntu 16.04 LTS,可选用其他平台。

  • 开发板
    ESP32-WROOM-32D 开发板,可选用其他基于 ESP32 的开发板。

  • 测试示例
    esp-idf/examples/get-started/hello_world 示例
    esp-idf/examples/wifi/getting_started/station 示例
    esp-idf/examples/bluetooth/ble_ibeacon 示例


三. 测试过程

在正常编译烧录示例的基础上加入了以下代码来打印空闲堆内存:

printf("free_heap_size = %d\n", esp_get_free_heap_size());

你可以分别在刚进入 app_main() 函数时、完成 Wi-Fi 或 BLE 初始化时和 app_main() 函数结束时加上上述代码来打印查看空闲堆内存。

如何使用 esp-idf 创建与编译示例请查看 ESP-IDF 编程指南


四. 测试结果

1. hello_world 示例

在此示例的 app_main() 函数中的入口处和结尾处分别打印了空闲堆内存,如下:

打印空闲堆内存的位置空闲堆内存大小
app_main() 入口处298724 B
app_main() 结尾处299600 B

2. station 示例

在此示例的 app_main() 函数中的入口处和初始化 Wi-Fi 前后分别打印了空闲堆内存,如下:

打印空闲堆内存的位置空闲堆内存大小
app_main() 入口处273996 B
初始化 Wi-Fi 前272372 B
初始化 Wi-Fi 后237364 B

3. ble_ibeacon 示例

在此示例的 app_main() 函数中的入口处、释放经典蓝牙协议栈前后和初始化 BLE 后分别打印了空闲堆内存,如下:

打印空闲堆内存的位置空闲堆内存大小
app_main() 入口处226360 B
释放经典蓝牙协议栈前224440 B
释放经典蓝牙协议栈后239728 B
初始化 BLE 后201396 B

五. 总结

经过上述测试后,我们可以总结得到:

  • ESP32 的用户最大可支配的堆内存大概为:298 KB
  • 初始化 Wi-Fi 需要使用 35 KB 左右的堆内存
  • 初始化 BLE 需要使用 38 KB 左右的堆内存
  • 如果在程序未来的运转中不需要某种服务,用户可以释放其对应的协议栈。比如上述过程中的经典蓝牙 BT,在释放经典蓝牙协议栈后的空闲堆内存增加了 15 KB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值