【问题标题】:Experiences with (free) embedded TCP / IP stacks? [closed]使用(免费)嵌入式 TCP / IP 堆栈的经验? [关闭]
【发布时间】:2010-11-12 17:17:34
【问题描述】:

是否有人对以下任何嵌入式 TCP/IP 堆栈有特别好的(或不好的)经验?

我需要一个可靠的、易于移植的堆栈。代码大小不是很重要,性能相对重要,但易用性和移植性很重要。

系统可能会使用 RTOS,但尚未确定,但根据我的经验,大多数堆栈都可以在有或没有 RTOS 的情况下使用。该平台很可能是 ARM 变体(很可能是 ARM7 或 CM3)。

不太关心将堆栈栓接到以太网驱动程序,因此这不是选择的重中之重。

我对从操作系统(例如 Linux、RTEMS 等)中提取堆栈不是很感兴趣。

我也对 Interniche、Micrium 等商业产品不感兴趣......

堆栈不需要各种花里胡哨,不需要 IPv6,而且我不需要任何东西(Web 服务器、FTP 服务器等)。事实上,有可能我将只使用 UDP,尽管我可以设想一些使用 TCP 更可取的场景。

我错过的其他堆栈的经验当然也很有趣。

感谢您的宝贵时间和意见。

【问题讨论】:

    标签: networking embedded tcp firmware rtos


    【解决方案1】:

    我已经广泛使用了 uIP 和 lwIP。

    uIP

    • 如果您只想要一些基本的东西,比如引导加载程序,那就太好了
    • 占地面积小。
    • 使用轮询,所以我们从来没有超过 3kbit :-(
    • 没有“开箱即用”的 DHCP
    • UDP 支持不佳

    lwIP

    • 完全中断驱动快得多 (~ x10)
    • 包括带有故障转移 AutoIP 的 DHCP
    • UDP 多播
    • 还有更多

    编辑:
    而且我们从来没有与 RTOS 一起使用过,因为从来没有需要。

    【讨论】:

    • 你可以让 uIP 做 3kbit/s 以上。我让它以 > 100kByte/s 的速度运行,但它需要进行大量调整。如果您的代码有限,uIP 很好,但它非常简单。
    • 我的实现目前以接近 245kbits/sec 的速度运行,并且绝对没有对底层进行任何调整。我只确保传出帧都尽可能接近 1500 字节,并且发送调用被阻塞。
    【解决方案2】:

    +1 为 lwIP。

    几年前我们在一个项目中成功使用了它,发现它通常非常可靠。我们发现并修复了一些我们提交给项目的问题(通常是 TCP 代码中的极端案例),尽管项目从那时起已经进行了相当长的一段时间,但我们通常没有发现它缺少任何功能。

    您怀疑它在有或没有 RTOS 的情况下都可以工作。在我们的系统上运行 RTOS 大约需要一周时间,其中包括我们必须进行的更改以支持不寻常的 DSP 编译器。由于您可能在 ARM 上使用 GCC,因此您可以避免这些工作。

    它确实包含比您需要的更多的功能,但如果您的需求在几年后发生变化,那么您最好从更大量的堆栈开始。

    【讨论】:

    • 另外,使用 LwIP,您很可能可以取消定义您不会使用的功能以节省代码占用空间。
    【解决方案3】:

    lwIP

    我参与了一个使用 3G 调制解调器的项目,我们需要一个基于 PPP 的 UDP/IP 堆栈(无 TCP)。我们缩小到 uIP 和 lwIP。我们最终选择了 lwIP,因为它已经有 PPP(uIP 没有),而且我们有足够的 RAM 可供使用。

    我们的特定项目没有使用 RTOS,而 lwIP 在没有 RTOS 的情况下也可以使用。

    我没有直接参与移植 lwIP 代码,尽管我在调制解调器驱动程序上工作以与之交互。我的印象是,对于我们之前有 TCP/IP 经验的工程师来说,移植需要几周时间才能顺利进行。 lwIP 代码已被许多人破解,因此有一些粗糙的边缘(例如,有人在某处扔了一个单独的 malloc()),但经过一些调整后它对我们有用。我们使用独立的验证套件对其进行了测试。

    总而言之,它对于我们的 UDP/IP 和 PPP 需求“非常实用”(但我无法评论它的 TCP 功能)。

    【讨论】:

    • 太棒了,感谢您的意见...
    【解决方案4】:

    +1 为 lwIP。

    它包含在 Luminary Micros(现为 TI)串行到以太网参考设计中,并具有一些在裸机(无 RTOS)上工作的附加功能(某种“服务器端脚本”和 cgi)。

    它坚如磐石,性能非常好,只有 32KB 或 RAM。

    问候

    PFM

    【讨论】:

      【解决方案5】:

      我对 Stellaris Cortex-M3 上的 lwip 感到满意。

      用于 LM3S6965 评估板的 StellarisWare 包括 enet_lwip 演示。这是一个运行在 lwip 上的小型 Web 服务器,它运行在裸机上——在这种情况下没有 FreeRTOS。系统由定时器和以太网中断驱动。拆除 Web 服务器并放入我的应用程序非常容易。我不必成为 lwip 专家就可以第一次运行它。

      后来我意识到我的应用本质上是呼叫驱动的。起初,它有一个插座到上拨垫圈。我用一个更简单的层替换了该层,它将 lwip 本机上调用转换为应用程序的上调用,并选择了 lwip 的套接字 API。这节省了更多的闪存和 RAM 空间,并使整个事情变得更快、更简单。稍作调整后,我使用 52K 闪存和 30K RAM 在 S2E 板上运行。

      【讨论】:

        【解决方案6】:

        我使用了 Microchip TCP/IP 堆栈。我对此非常满意。它很容易实现,有很多演示代码/教程可用,并且支持很多协议 HTTP、tFTP、SMTP、SNTP 等。但与您的要求不符的一点是它不容易移植到另一个架构。事实上,我认为堆栈的许可证明确禁止这样做,因为 Microchip 希望您仅使用他们的硬件 PIC18、PIC24 和 PIC32 来运行堆栈。然而,他们出售的外部以太网控制器允许您将这个堆栈的某些部分与他们的 ENC28J60 一起使用。

        【讨论】:

          【解决方案7】:

          你可以试试开源的FNET TCP/IP stack

          【讨论】:

          • 这真的不是他问题的答案。最好在评论中提及额外的堆栈。
          【解决方案8】:

          我在 FreeRTOS 上使用过 Interniche。 它是一个成熟的堆栈,支持相当多的功能。 由于您正在寻找非商业版本,因此我投票支持 lwIP。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-24
            • 2013-12-14
            • 1970-01-01
            • 2012-01-28
            • 1970-01-01
            • 2016-10-29
            相关资源
            最近更新 更多