嵌入式技术论坛
直播中

安德森大

8年用户 1176经验值
擅长:接口/总线/驱动
私信 关注
[问答]

请教大神怎样去解决TCP server延时的问题呢?

下位机就运行一个tcp-server,lwip2.0.2,上位机不停的写入读取,tcp-server收到数据后返回数据。正常情况下,上位机写入数据后1ms内能得到数据回复,但是时不时出现延迟10ms左右甚至偶尔出现一两百ms才能收到数据,不知道卡在哪里了

回帖(12)

h1654155275.5614

2023-2-1 14:59:44
前几天我刚在整理怎么裁剪 lwip 。lwip + sal 使用了好几个线程,其中某个线程因为调度不及时都可能引起数据延迟。把 phy 和 erx etx 三个线程优先级提升一下试试能不能响应快些。
举报

安德森大

2023-2-1 14:59:53
读取phy状态寄存器会有影响吗?我把定时读取phy状态寄存器部分去掉还是延时大
举报

安德森大

2023-2-1 14:59:58
ETH发送完成中断ETH_DMA_FLAG_T 一直不会触发的
举报

h1654155275.5614

2023-2-1 15:00:09
DMA 配置失败了?
举报

安德森大

2023-2-1 15:00:21
如果配置失败,数据就发送不出去了
举报

h1654155275.5614

2023-2-1 15:00:33
有没有什么频繁触发的中断没清理掉,导致系统被阻塞了。有观察过收发数据的时候,系统运行正常吗?比如点灯频率变没变,finsh 终端里输入命令有没有变慢
举报

安德森大

2023-2-1 15:00:48
你的会触发ETH_DMA_FLAG_T 发送中断吗?HAL库驱动只看到有打开ETH_DMA_IT_R中断

if((heth->Init).RxMode == ETH_RXINTERRUPT_MODE)
{
   /* Enable the Ethernet Rx Interrupt */
   __HAL_ETH_DMA_ENABLE_IT((heth), ETH_DMA_IT_NIS | ETH_DMA_IT_R);
}
但是即便打开ETH_DMA_IT_T中断,也不会触发
举报

h1654155275.5614

2023-2-1 15:00:58
会啊,试过 ping 吗?不使用你的应用程序测试,先用 ping 有出过问题吗?
举报

安德森大

2023-2-1 15:01:10
有没有什么频繁触发的中断没清理掉,导致系统被阻塞了。有观察过收发数据的时候,系统运行正常吗?比如点灯频率变没变,finsh 终端里输入命令有没有变慢

@出出啊 finsh没影响,finsh线程优先级更高。工作线程都去掉了,就剩tcp收发了。时不时卡个10多ms。

if((heth->Init).RxMode == ETH_RXINTERRUPT_MODE)
{
/ Enable the Ethernet Rx Interrupt /
__HAL_ETH_DMA_ENABLE_IT((heth), ETH_DMA_IT_NIS | ETH_DMA_IT_R);
}
直接在这句里把ETH_DMA_IT_T 中断加上,行不行,但是加上根本不触发
举报

h1654155275.5614

2023-2-1 15:01:21
搞反了,外部接口类线程优先级要高的,finsh 这种搞最低。
卡的时候有一定可能性是切换到其它线程了,或者某个频繁的中断
举报

安德森大

2023-2-1 15:01:32
finsh不输入应该是挂起不受影响吧,即便有多个高优先级线程但是如果一直挂起不触发应该不受影响啊
举报

安德森大

2023-2-1 15:01:43
没有用SAL, erx etx 默认优先级12,已经很高了, phy线程应该不影响,phy线程在检测到硬件phy后会退出,改用定时器检测读取phy状态寄存器
举报

更多回帖

发帖
×
20
完善资料,
赚取积分