完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近基于esp-mesh-lit>examples>no_router的demo改写了一个从串口接收数据,然后广播到组网设备的功能。
验证功能过程中发现,每次调用esp_mesh_lite_try_sending_msg,可用的free heap就越来越少,多次调用后,系统因为heap不够奔溃了。 起初是以为cJSON的item没有释放掉,但查到后面发现只要注释掉esp_mesh_lite_try_sending_msg这个api,heap就正常,大伙有碰到过类似的问题么? 使用的硬件是esp32-c3-mini-1开发板, 各依赖组件版本如下: [1/5] espressif/cmake_utilities (0.5.3) [2/5] espressif/esp_modem (1.1.0) [3/5] espressif/iot_bridge (0.11.0) [4/5] espressif/mesh_lite (0.10.0) [5/5] idf (5.1.2) 下面是部分log, I (561116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -14, free heap: 167884 I (571116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 167884 I (581116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 167884 I (591116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 167884 I (601116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -14, free heap: 167752 I (604216) uart_port: uart1 recv, count: 0, len: 4 I (605076) uart_port: uart1 recv, count: 1, len: 4 I (605596) uart_port: uart1 recv, count: 2, len: 4 I (605856) uart_port: uart1 recv, count: 3, len: 4 I (611116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 167380 I (613746) uart_port: uart1 recv, count: 4, len: 4 I (613926) uart_port: uart1 recv, count: 5, len: 4 I (614136) uart_port: uart1 recv, count: 6, len: 4 I (614346) uart_port: uart1 recv, count: 7, len: 4 I (621116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 167036 I (623196) uart_port: uart1 recv, count: 8, len: 4 I (623416) uart_port: uart1 recv, count: 9, len: 4 I (623586) uart_port: uart1 recv, count: 10, len: 4 I (623816) uart_port: uart1 recv, count: 11, len: 4 I (631116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -14, free heap: 166688 I (631856) uart_port: uart1 recv, count: 12, len: 4 I (632036) uart_port: uart1 recv, count: 13, len: 4 I (632226) uart_port: uart1 recv, count: 14, len: 4 I (632436) uart_port: uart1 recv, count: 15, len: 4 I (641116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 166348 I (642306) uart_port: uart1 recv, count: 16, len: 4 I (642476) uart_port: uart1 recv, count: 17, len: 4 I (642666) uart_port: uart1 recv, count: 18, len: 4 I (642896) uart_port: uart1 recv, count: 19, len: 4 I (651116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 166004 I (661116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 166004 I (671116) no_router: sys info, channel: 11, layer: 2, self mac: 68:67:25:e6:a9:38, parent bssid: 10:91:a8:21:5c:e5, parent rssi: -15, free heap: 166004 |
|
相关推荐
1个回答
|
|
从您的描述来看,问题可能出在调用 `esp_mesh_lite_try_sending_msg` 函数时,内存泄漏或者没有正确释放内存。以下是一些建议来解决这个问题:
1. **检查内存分配和释放**:确保在发送消息之前,所有分配的内存在使用完毕后都已经被释放。使用 `malloc` 和 `free` 时,要确保每次分配的内存都被释放。 2. **使用内存分析工具**:使用 ESP-IDF 的内存分析工具,如 `esp_heap_caps_dump()` 和 `esp_heap_task_info()`,来检查内存使用情况和潜在的内存泄漏。 3. **优化数据结构**:检查您的数据结构,确保没有不必要的内存分配。例如,使用更小的数据类型,或者减少不必要的数据复制。 4. **减少消息发送频率**:如果可能,尝试减少调用 `esp_mesh_lite_try_sending_msg` 的频率。这可以降低内存消耗,从而避免系统崩溃。 5. **检查 cJSON 库**:虽然您提到已经排除了 cJSON 库的问题,但仍然建议您检查 cJSON 的使用,确保在使用后正确释放内存。 6. **更新依赖组件**:检查您使用的依赖组件版本是否为最新版本,以确保没有已知的内存泄漏问题。您提供的组件版本可能不是最新的,尝试更新到最新版本。 7. **查看 ESP-Mesh 源代码**:检查 ESP-Mesh 源代码,看看是否有已知的内存泄漏问题或者可以优化的地方。 8. **增加堆大小**:如果以上方法都无法解决问题,您可以尝试增加 ESP32 的堆大小。在 `menuconfig` 中,选择 `Component config > ESP32-specific > Min. free heap size`,然后设置一个更大的值。 希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。 |
|
|
|
只有小组成员才能发言,加入小组>>
968 浏览 1 评论
553浏览 6评论
462浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
447浏览 5评论
448浏览 4评论
418浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 23:30 , Processed in 0.632580 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号