首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >难以使用lwip API立即发送小的lwip数据包

难以使用lwip API立即发送小的lwip数据包
EN

Stack Overflow用户
提问于 2013-03-06 02:53:35
回答 1查看 2.4K关注 0票数 3

我正在ST Cortex M3设备上创建服务器。我使用的是lwip API和FreeRTOS。一切都正常,但响应时间还差得很远。我目前使用的是lwip 1.3.2和FreeRTOS 7.3。

单个客户端连接到服务器,并且必须频繁发送一些时间关键型数据。这些分组大约为6个字节。其他时候,我会发送超过20K的邮件。

我遇到的问题是,这些较小的数据包似乎要花很长时间才能发送。我认为这是因为lwip正在等待更多的数据进入队列,以便进行更有效的传输。我不能等待2到3秒来发送数据;客户端期望数据名义上只有几微秒或几毫秒。

我尝试过使用lwip_send和lwip_write。(我知道一个和另一个是一样的,最后传递了一个标志。只需要尝试一下……)我已经尝试在套接字上设置TCP_NODELAY,但没有效果。我尝试将SO_SNDLOWAT设置为“1”,但总是返回-1,所以我认为它不受支持。

我不想使用TCP RAW重做我的所有代码。有没有办法在TCP模式之外调用tcp_output()函数?有没有什么方法可以加快速度,或者这就是小数据包的lwip TCP有多慢?

欢迎提出任何建议。谢谢。

--EDIT--我还想补充说,一旦我准备好传输,我会确保我在FreeRTOS中的TX任务处于最高优先级。在我调用lwip_send/write之前,没有其他任务在运行。

EN

回答 1

Stack Overflow用户

发布于 2016-03-24 11:22:06

我对xilinx上的裸机lwIP有相当的经验,lwip不会等着把东西发送出去。它将根据以太网硬件,在确认您的中断时以最快的速度输出数据包。我一直只使用UDP。然而,我想到的是,你的问题可能出在接收端。如果您正在使用TCP,则可能是因为您遇到了接收问题,所以这些小数据包发送得较晚。你需要做的是在代码中找到以太网传输的最低电平点,在上面放一个通用的输出开关。然后还在接收到以太网分组时将通用输出切换置为on。查看示波器上的信号。如果它证实了您的假设,那么移动输出切换来缩小问题的范围。清洗,冲洗,重复,直到你找到问题所在。这是粗糙和耗时的,但由于纯粹的决心,这种蛮力方法通常可以解决许多“不可能”的嵌入式软件问题。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15231800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档