lwip:tcpip_thread: invalid message


问题1:使用操作系统rt-thread,基于lwip1.4.0 ,网络芯片为enc28j60,使用send函数发送数据,只要频繁(其实也不频繁)的操作该函数,就会出现:tcpip_thread: invalid message Assertion: 155 in ..\lwip\src\api\tcpip.c, thread tcpip (0) assert failed at sys_arch_assert:596

a.首先,出现这种问题,是很头疼的,因为有三个方面的因素混杂,一个是系统的因素,一个是lwip的bug,但是不会特别多,或者是配置参数有一些问题。最后一个就是enc28j60的bug有一些多(并不能确定)。像这种方案的选择,最好是选模块,因为问题的排查有可能是在进行着填坑的行为。

b.解决问题思路:

  1. 定位该问题出现的地方,在tcpip.c的155行,有该内容。对应的有7项:TCPIP_MSG_CALLBACK_STATIC、TCPIP_MSG_CALLBACK、TCPIP_MSG_UNTIMEOUT、TCPIP_MSG_TIMEOUT、TCPIP_MSG_NETIFAPI、TCPIP_MSG_INPKT、TCPIP_MSG_API。这些内容都是在在其他地方被设置成的类型。现在的问题是,它处于第八种可能。
    先简单看一下这几个类型的含义:
枚举类型 含义
TCPIP_MSG_API API消息,例如bind等
TCPIP_MSG_INPKT IP层递交的数据包
TCPIP_MSG_NETIFAPI netif API消息
TCPIP_MSG_TIMEOUT 超时消息
TCPIP_MSG_UNTIMEOUT 超时消息
TCPIP_MSG_CALLBACK 回调
TCPIP_MSG_CALLBACK_STATIC 未知含义

c.其实从上面这些方向来看,最终发现接收和发送数据的函数放在一个线程中执行就不会报错了,从这个方向来看,还是属于lwip并没有设计好。

你可能感兴趣的:(lwip:tcpip_thread: invalid message)