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 小时前
单片机,主循环和中断资源访问冲突的案例
单片机·嵌入式硬件
花落已飘5 小时前
STM32 Bootloader:使用文件头加载并启动应用程序
stm32·bootloader
猿来不是梦6 小时前
RT_Thread内核源码分析(五)——内存管理@小堆内存管理算法
stm32·单片机·算法·系统架构·rt_thread操作系统
JXNL@7 小时前
STM32外设学习之USB
stm32·嵌入式硬件·学习
aerror13 小时前
使用mpu6500/6050, PID,互补滤波实现一个简单的飞行自稳控制系统
单片机·飞控
WIZnet 中国社区官方博客14 小时前
【第二十三章 IAP】
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·iap简介·iap程序设计
yifa2016040415 小时前
STM32、Arduino和51单片机
stm32·学习·51单片机
tyl211017 小时前
凌科芯安国产安全MCU简介
单片机·嵌入式硬件·安全
郦77718 小时前
国产入门级32位单片机PY32F002A开发板
单片机·嵌入式硬件
电院工程师18 小时前
轻量级密码算法CHAM的python实现
python·嵌入式硬件·算法·安全·密码学