【esp32】解决以太网+mqtt堆栈溢出问题 报错 no mem for receive buffer

本文主要记录了 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 ,然后就卡死了,只能手动重启

【esp32】解决以太网+mqtt堆栈溢出问题 报错 no mem for receive buffer_第1张图片

3.问题定位

以太网口 task 运行时,会动态分配 ETH_MAX_PACKET_SIZE = 1522Byte 的内存,为什么程序的堆栈溢出呢??

【esp32】解决以太网+mqtt堆栈溢出问题 报错 no mem for receive buffer_第2张图片

3.1监控堆栈

在 main 函数中,利用库函数监控堆栈的情况

ESP_LOGI("main", "[APP] Free memory: %d bytes", esp_g

你可能感兴趣的:(esp32,嵌入式C,物联网,c语言)