打印
[开发资料]

在单片机上运行Lwip!

[复制链接]
752|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szt1993|  楼主 | 2024-3-26 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、最近项目遇到的问题   
[color=rgba(0, 0, 0, 0.9)]最近在stm32上用cubemax移植了lwip协议栈,lwip就不用过多介绍了,(lightweight IP)一款轻量级的开源TCP/IP协议栈,专为嵌入式系统设计,具有小巧高效、可裁剪性强,主要是已经发展和广泛应用多年,可靠性还是可以的,基本上大多数嵌入式系统的网络通信需求都可以满足。
[color=rgba(0, 0, 0, 0.9)]然而最近项目中通信数据量大一点,老是send超时,运行时间久了还会直接挂在ethnetif_input,这可把我给整郁闷了。
[color=rgba(0, 0, 0, 0.9)]最后定位到原因还是lwip适配的两个线程优先级分配得有问题,导致FreeRTOS信号量超时异常。
2、两个主要线程
[color=rgba(0, 0, 0, 0.9)]在lwIP协议栈中,ethernetif_input线程和tcpip协议栈线程是两个核心的线程,在处理网络数据包和执行TCP/IP协议栈功能时的作用就不用多说了,下面简单的介绍下两个线程的作用:
  • ethernetif_input线程:

    • ethernetif_input线程负责接收来自网络接口(如以太网接口)的数据包,并将其传递给lwIP协议栈进行处理。
    • 这个线程通常运行在较低的优先级,因为它主要负责接收和缓存数据包,而不涉及复杂的协议处理。
    • 在实际应用中,可以根据系统的需求和性能进行调整,但通常情况下,ethernetif_input线程的优先级相对较低。

  • tcpip协议栈线程:

    • tcpip协议栈线程是lwIP协议栈的核心线程,负责处理TCP/IP协议栈的各种功能,包括TCP连接管理、IP数据报的路由和转发、以及UDP数据包的处理等。
    • 由于tcpip协议栈线程需要处理复杂的协议逻辑和数据包处理,因此它通常运行在较高的优先级。
    • 保持tcpip协议栈线程的较高优先级有助于确保网络数据包的及时处理和协议栈功能的高效执行。

[color=rgba(0, 0, 0, 0.9)]在实际的嵌入式系统设计中,需要根据具体的硬件平台和应用场景来合理设置这两个线程的优先级。通常情况下,可以通过操作系统或者裸机编程的方式来配置线程的优先级,以满足系统对网络数据处理和协议栈功能的实时性和效率要求。
3、总 结   
[color=rgba(0, 0, 0, 0.9)]所以通常情况下,tcpip协议栈线程的优先级需要设置得更高,因为tcpip协议栈线程需要处理复杂的协议逻辑、数据包处理、连接管理等任务,保持tcpip协议栈线程的较高优先级可以确保网络数据包的及时处理和协议栈功能的高效执行,从而提高系统的响应速度和网络通信的稳定性。
[color=rgba(0, 0, 0, 0.9)]ethernetif_input线程通常负责接收和缓存数据包,相对来说不涉及太多复杂的处理逻辑,因此可以设置相对较低的优先级。
经过优先级调整后,跑了2天都没有出现异常问题。

使用特权

评论回复
沙发
中国龙芯CDX| | 2024-4-10 13:52 | 只看该作者
tcpip协议栈线程的优先级需要设置得更高,因为tcpip协议栈线程需要处理复杂的协议逻辑、数据包处理、连接管理等任务,保持tcpip协议栈线程的较高优先级可以确保网络数据包的及时处理和协议栈功能的高效执行,从而提高系统的响应速度和网络通信的稳定性。

使用特权

评论回复
板凳
小夏天的大西瓜| | 2024-4-10 13:54 | 只看该作者
lwip一款轻量级的开源TCP/IP协议栈,专为嵌入式系统设计,具有小巧高效、可裁剪性强,主要是已经发展和广泛应用多年,可靠性还是可以的,基本上大多数嵌入式系统的网络通信需求都可以满足

使用特权

评论回复
地板
jf101| | 2024-4-14 14:45 | 只看该作者
lwip专为嵌入式系统设计款轻量级的开源TCP/IP协议栈

使用特权

评论回复
5
小小蚂蚁举千斤| | 2024-4-15 09:56 | 只看该作者
单片机上运行Lwip是以太网上的IP通信的一种实用方式

使用特权

评论回复
6
OKAKAKO| | 2024-4-19 18:45 | 只看该作者
Lwip是开源TCP/IP协议栈,专为嵌入式系统设计,具有小巧高效、可裁剪性强

使用特权

评论回复
7
星辰大海不退缩| | 2024-4-21 12:21 | 只看该作者
在lwIP协议栈中,ethernetif_input线程和tcpip协议栈线程是两个核心的线程,有处理网络数据包和执行TCP/IP协议栈功能

使用特权

评论回复
8
xiaohuihuiya| | 2024-8-16 19:19 | 只看该作者
想问下有遇到过数据发送失败的情况吗,我这个很容易遇到,发送失败的问题。老是出现在这个low_level_output()函数中的这个位置,一直处于被DMA持有。
if((DmaTxDesc->Status & ETH_DMATXDESC_OWN) != (uint32_t)RESET)
  {
    errval = ERR_USE;
    errortimeout++;
    goto error;
  }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

260

主题

2193

帖子

4

粉丝