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博客

相关推荐
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书5 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang5 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟5 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126915 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315205 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机