硬汉嵌入式论坛

 找回密码
 立即注册
查看: 170|回复: 0
收起左侧

[LwIP] LwIP Tcp客户端发送数据慢

[复制链接]

21

主题

53

回帖

116

积分

初级会员

积分
116
发表于 2025-10-30 15:10:46 | 显示全部楼层 |阅读模式
目前使用GD32F470ZI(SRAM:768KB)+dm9162,跑了FreeRTOS+LwIP 2.1.0,速率是100Mbps;
问题描述:


      SPI以DMA的方式每20毫秒接收24576字节数据,在DMA接收完成中断中调用xQueueSendFromISR发送给Tcp发送线程。DMA开启了双缓冲,队列大小开了2*24576字节。

现在出现了TCP发送数据慢的问题,似乎是20ms内来不及发送24576字节数据。
TCP发送第一包24576字节数据是正确的,后面的数据都错位了。按道理队列数据是不会覆盖的,数据应该少20ms的数据,而不是错位才对吧。
spi dma中断优先级是最高的,Tcp发送任务的优先级也是最高的。
请教一下坛友们,评估一下,这个方案是否可行,Lwip有没有能优化的地方。
下面是Lwip的配置


#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

#define SYS_LIGHTWEIGHT_PROT    1

#define NO_SYS                              0

#define NO_SYS_NO_TIMERS           0

#define MEM_ALIGNMENT                4

#define MEM_SIZE                ( 100 * 1024 )

#define MEMP_NUM_PBUF           50

#define MEMP_NUM_UDP_PCB        20

#define MEMP_NUM_TCP_PCB        40

#define MEMP_NUM_TCP_PCB_LISTEN 3

#define MEMP_NUM_TCP_SEG        960

#define MEMP_NUM_SYS_TIMEOUT    20

#define MEMP_NUM_NETCONN          64

#define MEMP_NUM_NETBUF             40

#define MEMP_MEM_MALLOC                        0

#define MEM_LIBC_MALLOC                        0

#define MEM_USE_POOLS                                        0
#define MEMP_USE_CUSTOM_POOLS                        0

#define PBUF_POOL_SIZE          64

#define PBUF_POOL_BUFSIZE       1536//LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)

#define LWIP_TCP                       1
#define TCP_TTL                         255

#define TCP_QUEUE_OOSEQ         0

#define TCP_MSS                 ( 1500 - 40 )          /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */

#define TCP_SND_BUF             ( 24 * TCP_MSS )

#define TCP_SND_QUEUELEN        ( 32 * TCP_SND_BUF / TCP_MSS )

#define TCP_WND                 ( 12 * TCP_MSS )
#define LWIP_WND_SCALE                        ( 1 )
#define TCP_RCV_SCALE               ( 3 )        // 窗口缩放因子 支持2^n倍扩展

#define TCP_TMR_INTERVAL                         10

#define LWIP_SO_RCVTIMEO                         1

#define LWIP_SO_SNDTIMEO                                1

#define LWIP_SO_SNDRCVTIMEO_NONSTANDARD     1

#define LWIP_SO_RCVBUF                                        0

#define RECV_BUFSIZE_DEFAULT                             26 * 1024

#define LWIP_ICMP                       1

#define        TCP_LISTEN_BACKLOG                           5

#define        TCP_DEFAULT_LISTEN_BACKLOG           0x05


#define SO_REUSE                        1

#define LWIP_DHCP                      1

#define LWIP_UDP                        1
#define UDP_TTL                          255

#define LWIP_DNS                         0
#define DNS_TABLE_SIZE                    2        // DNS 缓存表大小
#define DNS_MAX_SERVERS           2        // 最大 DNS 服务器数量
#define LWIP_RAND()                         ( ( uint32_t )rand() ) //lwip1.4.1 不需要添加该宏定义

#define LWIP_STATS                                 0
#define LWIP_PROVIDE_ERRNO                 1

#define LWIP_NETIF_LINK_CALLBACK        1

#define CHECKSUM_BY_HARDWARE

#ifdef CHECKSUM_BY_HARDWARE
  /* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
  #define CHECKSUM_GEN_IP                  0
  /* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
  #define CHECKSUM_GEN_UDP                0
  /* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
  #define CHECKSUM_GEN_TCP                0
  /* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
  #define CHECKSUM_CHECK_IP               0
  /* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
  #define CHECKSUM_CHECK_UDP              0
  /* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
  #define CHECKSUM_CHECK_TCP              0
  /* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
  #define CHECKSUM_GEN_ICMP               0
#else
  /* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
  #define CHECKSUM_GEN_IP                 1
  /* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
  #define CHECKSUM_GEN_UDP                1
  /* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
  #define CHECKSUM_GEN_TCP                1
  /* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
  #define CHECKSUM_CHECK_IP               1
  /* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
  #define CHECKSUM_CHECK_UDP              1
  /* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
  #define CHECKSUM_CHECK_TCP              1
  /* CHECKSUM_CHECK_ICMP==1: Check checksums by hardware for incoming ICMP packets.*/
  #define CHECKSUM_GEN_ICMP               1
#endif



#define LWIP_NETCONN                    1

#define LWIP_SOCKET                     1

#define DEFAULT_UDP_RECVMBOX_SIZE       10
#define DEFAULT_TCP_RECVMBOX_SIZE       10
#define DEFAULT_ACCEPTMBOX_SIZE         10
#define DEFAULT_THREAD_STACKSIZE        8192

#define TCPIP_THREAD_NAME              "lwip"
#define TCPIP_THREAD_STACKSIZE          8192
#define TCPIP_MBOX_SIZE                 32
#define TCPIP_THREAD_PRIO               31


//#define IPERF_SERVER_THREAD_NAME            "iperf_server"
//#define IPERF_SERVER_THREAD_STACKSIZE        1024
//#define IPERF_SERVER_THREAD_PRIO             0


//#define BLOCK_TIME                                        250
//#define BLOCK_TIME_WAITING_FOR_INPUT        ( ( portTickType ) 100 )

#define LWIP_TCP_KEEPALIVE                                ( 1 )
#define TCP_KEEPIDLE_DEFAULT                        ( 30000UL )
#define TCP_KEEPINTVL_DEFAULT                        ( 5000UL )
#define TCP_KEEPCNT_DEFAULT                                ( 3UL )
//#define TCP_MAXIDLE                                                ( LWIP_KEEPCNT_DEFAULT * LWIP_KEEPINTVL_DEFAULT )

//#define LWIP_DEBUG                      1


#endif


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-21 23:47 , Processed in 0.036533 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表