启用LWIP锁定以解决ESP8266快速传输TCP数据包时的崩溃问题

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

为解决ESP8266在快速数据传输时的崩溃问题,优化了LWIP配置和SPI闪存读写,调整了线程优先级,并改进了TCP数据包处理。通过使用LWIP_TCPIP_CORE_LOCKING避免函数重入,成功解决了崩溃问题,确保了TCP通信速度。

🎯

关键要点

  • 为了解决ESP8266在快速数据传输时的崩溃问题,优化了LWIP配置和SPI闪存读写。
  • 调整了主线程和LWIP线程的优先级,确保主线程优先级高于LWIP线程。
  • TCP数据包处理状态机进行了优化,单个1200字节数据包的发送和接收时间约为40毫秒。
  • 在进行网页测试时,ESP8266崩溃并重启,报告了LoadProhibited错误。
  • 崩溃的原因是seg、useg及其tcp头部为NULL,导致tcp_write_checks函数失败。
  • 通过分析发现pcb->unacked在函数调用中未被改变,可能是由于线程不安全导致的重入问题。
  • LWIP线程和HTTP服务器线程同时调用tcp_output函数,导致了崩溃。
  • 为避免函数重入,决定使用LWIP_TCPIP_CORE_LOCKING特性。
  • 在lwipopt.h文件中定义了LWIP_TCPIP_CORE_LOCKING,并在主线程中添加了锁定和解锁操作。
  • 解决了内核崩溃问题,TCP通信速度满足256kb/s的带宽需求。
➡️

继续阅读