本文主要记录了 esp32 + 以太网 +mqtt 功能时遇到的堆栈溢出的情况,千里之堤毁于蚁穴,开发过程的不细心导致多付出了一天多的时间,记录于此,共勉
📋 个人简介
- 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎
- 📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页🔥
- 🎉 支持我:点赞👍+收藏⭐️+留言📝
- 📣 系列专栏:esp32二次开发专栏 🍁
- 💬格言:写文档啊不是写文章,重要的还是直白!🔥
【esp32】解决以太网+mqtt堆栈溢出问题 报错 no mem for receive buffer
- 1.程序架构:
- 2.问题场景描述:
- 3.问题定位
-
- 3.1监控堆栈
- 4.查找内存泄漏的原因
- 5.问题解决
- 6.总结
1.程序架构:
if(以太网连接成功){
mqtt_start();
}
// 创建一个任务,每间隔1s,将数据发到 mqtt broker
xTaskCreate(mqtt_publish_test, "mqtt_publish_test", 1024*4, NULL, configMAX_PRIORITIES, NULL);
2.问题场景描述:
esp32 开发板以太网连接上网,连接成功后通过 mqtt 将消息上传至服务器,但是存在问题
代码运行一段时间后,报错内存溢出 no mem for receive buffer
,然后就卡死了,只能手动重启
3.问题定位
以太网口 task 运行时,会动态分配 ETH_MAX_PACKET_SIZE
= 1522Byte 的内存,为什么程序的堆栈溢出呢??
3.1监控堆栈
在 main 函数中,利用库函数监控堆栈的情况
ESP_LOGI("main", "[APP] Free memory: %d bytes", esp_g