问题标签 [lwip]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
891 浏览

linux - 将网络应用程序从 pc posix (linux) 移植到 STM32 / lwip

我想将我的基于 pc 的源代码移植到使用 posix 标准的网络应用程序到使用 LWIP 堆栈的 cortex M4 微控制器。我找到了与套接字相关的 API,但我被困在以下内容中:

那么在哪里可以找到丢失文件的c语言源代码呢?它们可以在 PC 上还是在网络上...?是否可以重写它们?

先感谢您。

0 投票
4 回答
3309 浏览

multicast - 加入 igmp_group 不在轻量级 IP (lwip) 中工作

我是 lwip 的新手,我想用 lwip 创建一个多播接收器。我的步骤如下: 1. 启用 LWIP_IGMP;2.在low_level_init()中设置NETIF_FLAG_IGMP;3.加入多播组,创建和绑定pcb;4. udp_connect 到remote_ip(或者多播IP地址?都试过了,都失败了)

加入组返回成功,程序执行时一切正常。但是多播接收器不起作用,没有多播数据进入网络接口。似乎我实际上并没有将我的接收器加入 igmp 组,尽管加入过程看起来不错。有谁知道我错过了什么?

我在 igmp_joingroup() 中找到了“netif->igmp_mac_filter != NULL”,但是这个回调被设置为 NULL 并且没有实现。我需要自己实现它来设置MAC过滤器还是可以将其保留为NULL?

非常感谢你的帮助!

瑞安

0 投票
1 回答
333 浏览

c - 关于如何为 lwip 堆栈中声明的一个全局数组计算大小的困惑

目前我正在尝试在嵌入式板上移植 LWIP(轻量级 TCP/IP 堆栈)。

在查看代码期间,我想出了一个数组声明(在memp.c文件中),这看起来很奇怪,我过去从未见过这种类型的声明。

虽然它是有效的声明,但我对此感到困惑,这意味着它占用了多少空间,我该如何计算它?宏如何LWIP_MEMPOOL扩展?

声明看起来像

array现在让我给你上面声明中使用的每个宏定义

MEMP_MAX在这里定义

这是memp_std.h

其中memp_std.h有许多结构名称用于sizeof(struct xxx)但我无法包含所有结构的定义。所以你可以假设它有一些大小。

你能解释一下LWIP_MEMPOOL宏是如何使用的吗?数组是如何定义的?那个数组的大小是怎么知道的?

0 投票
1 回答
2060 浏览

tcp - lwip 初始化网络接口

再会!

我想创建一个客户端并将其连接到 netcat 简单服务器。

1) 使用默认设置和#define 编译 lib(唯一的东西 - 我设置了一些调试信息) 2) 将 lib 链接到项目(工作正常) 3) 使用 ubuntu 设置虚拟机并让 netcat 使用

这意味着我们正在监听端口 7(七)。

现在还好。

4) ping 和 telnet 工作正常 - 我看到他们可以访问 netcat。

我的 ifconfig 统计数据是

5)现在我正在尝试使用我的客户端连接到 netcat 服务器,使用 lwip 编写输出是:

完整清单:

从这里我开始认为问题在于我没有设置NETIF。

但我不知道如何。

我想我不希望 lwip 默认创建 tap0

(它使

)

我想将我的应用程序绑定到 localhost 或 eth1 - 无论如何......我该怎么做?我在申请中做错了什么?

顺便说一句 - 当我这样做的时候

在我的初始化函数中,我得到了这个输出

它落在

(不通过它...)

1 可以帮忙吗?

0 投票
3 回答
4434 浏览

c - TCP 服务器似乎无法在 LWIP+FreeRTOS 中运行

我使用lwip+freeRTOS在我的一个嵌入式设备中开发了一个 tcp 服务器。现在这是我使用我的设备(我们将其命名为lwipDevice )与其他设备(其他设备具有 Linux 系统,我们将其命名为LinuxDevice)进行通信的流程

  1. 将 UDP 数据包从lwipDevice发送到LinuxDevice以启动我准备分享我的信息。

  2. 现在LinuxDevice成功识别了这个消息,并发送一个 TCP 数据包(包含命令)给lwipDevice,告诉 lwipDevice 发送它的信息。

  3. 但是在lwipDevice端没有收到这个消息。所以它不会向LinuxDevice发送任何响应。步骤 1-3 一次又一次地重复。

现在这是 TCP 服务器的 lwipDevice 代码:

我检查了lwip_accept函数,它将从此条件返回:

编辑:

我知道该netconn_is_nonblocking(sock->conn)条件将始终为真,因为已将套接字设置为非阻塞模式。但是为什么 sock->rcvevent总是零甚至LinuxDevice已经发送数据包给它呢?

编辑:

出于测试目的,已在任务(请参阅//some code for other stuff)中注释了所有其他内容代码,然后套接字被成功接受,我尝试接收数据包,但现在问题是它现在卡在lwip_recvfrom功能中(注意:LinuxDevice继续发送数据包)。所以进一步调试,发现它卡在函数中sys_arch_mbox_fetch(函数调用流::)lwip_recvfrom\netconn_recv\netconn_recv_data\sys_arch_mbox_fetch

有谁知道它有什么问题?

0 投票
1 回答
1315 浏览

sockets - 调用accept()后如何改变socket的监听端口?

我想更改套接字正在侦听的端口。问题是只要调用 accept() 仍在进行中,我就无法做到这一点。我尝试关闭期望 accept() 退出并返回负值的套接字。但这不会发生在 FreeRTOS 上。当我从不同的线程关闭套接字时,accept() 仍然执行。我想出的唯一解决方法是在变量中设置一个标志,建立一个 TCP 连接,然后当 accept() 完成时,检查标志,bind() 与新端口和调用listen()。但也许有更优雅的方法?

0 投票
1 回答
2083 浏览

tcp - LWIP:TCP_INTERVAL 与 ACK 消息的接收到底有什么关系?

我正在尝试实现从嵌入式板到 PC 的数据传输。为此,我需要使用低延迟通信,并且我必须使用带有 TCP/IP 的以太网。此外,我正在使用 lwip 堆栈。

首先,我禁用了 nagle 算法,因为我必须发送小数据包(10 KB)并且我希望它们尽快发送,而无需等待中间 ACKS。Wireshark 日志告诉我这工作得很好(整个数据在大约 1 毫秒内被发送到 PC)。

之后,PC 大约需要 200 毫秒来发送最后一个 ACK​​(因为最后一个 Segment 不是最大大小)。

现在的问题是,在嵌入式处理器上,需要很长时间,直到 lwip 向我的应用程序提供所有数据都已确认的消息。当我减少 TCP_INTERVAL(比如说 5)时,它会大大加快速度。

我想知道,为什么 lwip 会这样?我认为 Periodic-TCP-Tasks (根据 TCP_INTERVAL 调用)与接收帧的处理无关(这实际上是主要的另一个调用)。

我希望我能以某种可以理解的方式陈述我的问题,如果不是,我会很感激反馈,所以我可以改进我的问题!

谢谢!

编辑:

经过更多调试,我发现发送数据的过程导致以下函数调用:

  • 我的主要电话是 tcp_write(...)
  • tcp_tmr() 被多次调用(通过 LwIP_Periodic_Handle() 函数)。这种情况发生了七次。在第八次通话期间:
  • tcp_output() 被调用。在此调用期间,在最后一次 tcp_write() 调用期间添加的所有段都通过调用 tcp_output_segment() 发送。

所以现在很清楚,如果我减少 TCP_INTERVAL,当然数据会更快发送,因为 tcp_tmr() 函数被更快地调用。

但我的问题仍然是:这是正常行为吗?看起来有点奇怪,lwIP 在实际发送数据之前等待了这么长时间。

0 投票
1 回答
4868 浏览

c - LwIP 上的 SO_RCVTIMEO 选项

我将 LwIP 与 FreeRTOS 一起使用。我的项目基于此 URL FreeRTOS with LwIP project上的示例。我还在使用带有 LPCXpresso 版本 6 的 LPC1769。CMSIS 版本 2。

我正在使用 LwIP 通过 UDP 套接字流式传输 MP3 文件。传输速度很快,但问题是有时 lwip_recvfrom 会在数千次操作后阻塞。我永远看不到超时条件。我想我做错了什么。

接下来的步骤是:

有人知道这里有什么问题吗?

0 投票
0 回答
930 浏览

node.js - node-gyp 编译错误 - 句柄无效

安装lwip模块(提供图像处理和操作,无需外部运行时依赖):

我收到以下输出:

我目前正在使用:

  • Windows 7 专业版 64 位
  • 视觉工作室高级版 2013
  • 蟒蛇 (2.7)
0 投票
2 回答
20349 浏览

http - 如何使用 lwIP 堆栈发送简单的 HTTP 请求?

如果问题不相关,请移动/关闭它。

核心:Cortex-M4

微处理器:TI TM4C1294NCPDT。

IP 堆栈:lwIP 1.4.1

我正在使用这个微处理器进行一些数据记录,并且我想通过 HTTP 请求以以下形式将一些信息发送到单独的 Web 服务器:

http://123.456.789.012:8800/process.php?data1=foo&data2=bar&time=1234568789

我希望处理器能够看到响应标头(即,如果它是 200 OK 或出现问题) - 它不必显示/接收实际内容。

lwIP 有一个用于微处理器的 http 服务器,但我追求的是相反的(微处理器是客户端)。

我不确定数据包如何与请求/响应标头相关联,因此我不确定我打算如何实际发送/接收信息。