LWIP TCP发送数据时间间隔过短导致LWIP DEBUG报错----解决方法;LWIP TCP如何以较短时间间隔发送数据?(STM32)

一、前言

  我需要用STM32作为TCP Server,周期性地通过网口向上位机发送数据(10个字节),时间周期需低于200us。

二、遇到问题

  我在STM32上用LWIP库实现TCP Server,但是发现发送数据时间间隔不能低于800us,否则LWIP会报内存错误,报错如下:

Assertion "mem_free: illegal memory" failed at line 639 in ../Middlewares/Third_Party/LwIP/src/core/mem.c
Assertion "pbuf_free: p->ref > 0" failed at line 753 in ../Middlewares/Third_Party/LwIP/src/core/pbuf.c
Assertion "pbbuf ref overflow" failed at line 834 in ../Middlewares/Third_Party/LwIP/src/core/pbuf.c

三、解决方法

  参考某位博主的方法(https://blog.csdn.net/weixin_41719055/article/details/102740216),在数据发送函数tcp_write()前,加入tcp_nagle_disable()这个函数即可解决问题,如下图代码:

在这里插入图片描述
  这样便可解决发送数据时间间隔过短导致LWIP DEBUG报错问题,经我测试,加入tcp_nagle_disable()函数后,周期性发送10个字节,发送数据时间间隔最短可为20us。如下图代码,以20us时间间隔发送一万次10字节数据,测试成功,不再出现报内存错误的情况:

在这里插入图片描述

四、代码

  代码我无法分享,实现比较简单,用STM32CubeMX生成LWIP库(切记不要用STM32CubeMX 6.5这个版本,这个版本有问题),然后参考正点原子的网口例程,用TCP Server那个,然后就差不多可以实现了。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值