stm32 freeRTOS lwip TCP快速发送,内存泄露问题

现象1:

发送缓慢,tcp_write之后要等200多ms才能过发送出去,而且粘包严重。

解决办法

tcp_write之后,立马调用tcp_output ,tcp就会立马发送。

cpp 复制代码
tcp_write
tcp_output 

现象2:

持续快速发送和接受TCP数据出现断言

cpp 复制代码
pbufs on queue => at least one queue non-empty
cpp 复制代码
 tcp_receive: valid queue length

而且出现TCP断连,死机情况。

其实就是一句话 主程序和以太网中断程序中对PCB->unsent 之类的处理出现了问题,tcp_write 不是没有临界保护,导致中断和主程序直接出现了共同操作

((pcb)->snd_buf)

((pcb)->snd_queuelen)

的问题,导致内存泄漏,越运行越慢

解决办法:

tcp_write 和 tcp_output,调用前关闭网口中断,调用结束开启中断

cpp 复制代码
	NVIC_DisableIRQ(ETH_IRQn);
    err = tcp_write(tpcb, mqtt_ringbuf_get_ptr(rb), send_len, TCP_WRITE_FLAG_COPY);
	HAL_NVIC_EnableIRQ(ETH_IRQn);
cpp 复制代码
	NVIC_DisableIRQ(ETH_IRQn);
    tcp_output(tpcb);
	HAL_NVIC_EnableIRQ(ETH_IRQn);

参考文献:

关于LWIP中大数据量传输问题的一些解决方法,速度慢,而且越运行越慢的 。另外一些心得_lwip提高收发速度_bird_bai001的博客-CSDN博客

相关推荐
DIY机器人工房9 小时前
简单理解:新唐 NuMicro M483这款MCU
stm32·diy机器人工房·新唐 numicro m480·m480
某林21210 小时前
基于SLAM Toolbox的移动机器人激光建图算法原理与工程实现
stm32·嵌入式硬件·算法·slam
DTI070111 小时前
xilinx的vivado工具综合一直转圈圈,卡死后如何解决?
嵌入式硬件·fpga开发
点灯小铭12 小时前
基于单片机的去皮计价与超重报警电子秤设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
章鱼哥嵌入式开发15 小时前
【 STM32 ADC电压采集与串口显示系统】
stm32·单片机·课程设计·嵌入式学习·实验室测量
树上掉下一只鱼15 小时前
STM32F4xxx系列 - DAC生成噪声波
stm32
HappyShengxiang16 小时前
TI发布全新Cortex-M33的MCU产品MSPM33C321A
单片机·嵌入式硬件·mcu·电赛
✧˖‹gσσ∂ иιghт›✧17 小时前
stm32 cube max+keil5的环境怎么printf重定向
stm32·单片机·嵌入式硬件
芋头莎莎18 小时前
keil 4 51单片机的安装教程
单片机·嵌入式硬件·51单片机
xingzhemengyou118 小时前
STM32 时钟树
stm32·单片机