首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LWIP1.4.1在tcp_fasttmr中停留在无穷无尽的时间循环上

LWIP1.4.1在tcp_fasttmr中停留在无穷无尽的时间循环上
EN

Stack Overflow用户
提问于 2021-04-17 13:12:47
回答 1查看 306关注 0票数 0

核心:皮质-M7

微控制器: stm32f765zi

IP堆栈: lwIP 1.4.1

我有一个基于STM32F7的嵌入式系统,它使用LwIP设置tcp服务器,在应用层接受3个连接。服务器按预期运行几个小时,并随机停留在tcp_fasttmr函数的while循环中,如下所示:

代码语言:javascript
复制
void
tcp_fasttmr(void)
{
  struct tcp_pcb *pcb;

  ++tcp_timer_ctr;

tcp_fasttmr_start:
  pcb = tcp_active_pcbs;

  **while(pcb != NULL) {**
    if (pcb->last_timer != tcp_timer_ctr) {
      struct tcp_pcb *next;
      pcb->last_timer = tcp_timer_ctr;
      /* send delayed ACKs */
      if (pcb->flags & TF_ACK_DELAY) {
        LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n"));
        tcp_ack_now(pcb);
        tcp_output(pcb);

在调查中,pcb->和tcp_timer_ctr的值相同,为58。

代码语言:javascript
复制
pcb->last_timer = tcp_timer_ctr = 58

如果有人能解释LwIP这种行为的原因,那将是很有帮助的。

进一步调查还指出,三个客户端连接中有两个指向同一多氯联苯。我也不确定这是如何发生的,因为wireshark跟踪显示,这3个不同的客户端一直在成功地进行通信,直到被困在while循环中。

我在其中一个论坛中发现,我可以通过放置任意的超时计数器来使其成为有限时间循环。但是由于这个问题在几个小时后随机发生,我不知道我是否真的解决了这个问题。这就是为什么我想知道发生这种事的原因。

EN

回答 1

Stack Overflow用户

发布于 2022-02-22 10:46:37

我在这里找到了以下答案:https://lists.gnu.org/archive/html/lwip-users/2012-12/msg00003.html

--这是lwIP端口中一个常见的错误,不服从lwIP的线程处理要求。pcb ->下一个指向pcb的原因通常是多个执行上下文同时调用lwIP函数。在您的情况下(没有OS),我猜您使用的是来自主循环和ISR的lwIP (例如,从中断级别将数据包输入到ethernet_input或ip_input,或者从中断级别调用lwIP计时器函数),这是不支持的。

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

https://stackoverflow.com/questions/67138575

复制
相关文章

相似问题

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