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

相关推荐
hongmai6668886 小时前
FH8856V310芯片详解:6M高清+0.5TOPS算力,赋能智能安防新方案
人工智能·单片机·嵌入式硬件·物联网·智能家居
三易串口屏9 小时前
串口屏是什么
单片机·嵌入式硬件
冰茶丿12 小时前
嵌入式安全第一关:Secure Boot是怎么保护你的设备的?
嵌入式硬件·安全
卖萌的斜阳12 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
单片机·网络协议·tcp/ip
Kuakewei88812 小时前
4056充电芯片:28V高耐压+电池反接保护+热调节功能
嵌入式硬件
三品吉他手会点灯13 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
woohuwan13 小时前
CST 匝数比和采样电阻怎么算?
单片机·嵌入式硬件
王光环15 小时前
STM32H750串口一直进IRQ问题解决
stm32·单片机·嵌入式硬件
2401_8541515516 小时前
STM32 选项字节与读写保护(RDP)
stm32·单片机·嵌入式硬件
piaoyiren16 小时前
STC8 单片机蜂鸣器播放音乐
单片机·嵌入式硬件