首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lwip stm32 - http请求失败

lwip stm32 - http请求失败
EN

Stack Overflow用户
提问于 2017-08-29 09:49:07
回答 2查看 1.5K关注 0票数 1

我使用在freeRTOS处理器(stm32f407)上使用的socket运行stm32和LWIP1.4.1。总的来说,它运行得很好。我可以用udp和tcp发送和接收数据。

但在3到7天的时间窗里,我看到了一种奇怪的行为。

我的问题

每隔3至7天,我的客户端(每秒发送1-2个HTTP请求的Windows 10 )无法发送这些请求。当发生这种情况时,连续有10个请求失败。在很短的时间内,堆栈就不会再生了。

我猜

我想我可能在我的LWIP配置中错配置了什么。因为堆栈使用得很好,在这个方向上不应该有任何错误。

我的以太网设置

服务器和客户端直接连接,中间没有交换机、集线器或路由器。

服务器(stm32 32/lwip):

  • 静态,192.168.168.2
  • 网罩,255.255.255.0

client (win10) eth0:

  • 静态,192.168.168.1
  • 网罩,255.255.255.0

client (win10) eth1:

  • dhcp,正常工作网络

我的尝试

目前,我正在运行的测试是每秒发送7-8个请求,但是错误并不适用于更多的情况。我玩了lwip配置:

  • 堆栈的更多内存
  • 更多的pbufs
  • 更大的pbufs
  • 有/没有积压

但一切都没有改善这个连接问题。这是否是因为客户端经常重复使用的端口号,从而导致了这个问题?

这里有lwip调试输出的相关部分:

代码语言:javascript
复制
tcp debugging output

https://pastebin.com/a9JabhET

在这里,Wireshark日志:

orig screenshot

代码语言:javascript
复制
hole wireshark log:

20170828172950.html

我的伊wipoptsh:

代码语言:javascript
复制
lwip configuration:

https://pastebin.com/cW0v4hF6

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-08 10:20:43

我有了一份新工作,不再从事这方面的工作。

在我声明我的新工作之前,我可以证明这不是LwIP上的内存问题(我定义了不合理的大型pbufs和内存池),它们从未达到极限。

问题在于ETH的DMA驱动程序。当到达DMA驱动程序的内存链端时,链元素从未被释放,因此我遇到了RBU (接收缓冲区欠运行)问题,RBU标志再也没有被重新处理,而DMA ETH驱动程序挂在这个RBU中断中(即使有足够多的LwIP缓冲区从DMA链写入)。因此,我在DMA驱动程序中添加了一个大锤修复程序,并禁用了RBU中断(我在多种情况下轮询RBU标志,并在需要时清除它,然后开始从ETH重新读取)。

我认为从那以后,这个问题或多或少已经“解决”了。不太好,但成功了。

在我以前的工作地点,我得到了同事的一些信息: RBU中断和clear没有工作,因为我们使用的CAN堆栈与FreeRTOS不太好,CAN堆栈用于繁忙系统的CPU时间远远超过90%,这使ETH驱动程序和LWIP中的奇怪行为更加严重。

票数 0
EN

Stack Overflow用户

发布于 2020-04-30 06:28:51

这似乎是一个记忆问题,但由于这是暂时的,它可能是一个超时的东西。我建议使用LwIP的内存统计函数,并启用ARP调试消息。

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

https://stackoverflow.com/questions/45935885

复制
相关文章

相似问题

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