tcpip.c里面 static void tcpip_thread(void *arg) { struct tcpip_msg *msg;
(void)arg;
ip_init(); #if LWIP_UDP udp_init(); #endif #if LWIP_TCP tcp_init(); #endif #if IP_REASSEMBLY sys_timeout(1000, ip_timer, NULL); #endif if (tcpip_init_done != NULL) { tcpip_init_done(tcpip_init_done_arg); }
while (1) { /* MAIN Loop */ sys_mbox_fetch(mbox, (void *)&msg); switch (msg->type) { case TCPIP_MSG_API: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p
", (void *)msg)); api_msg_input(msg->msg.apimsg); break; case TCPIP_MSG_INPUT: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: IP packet %p
", (void *)msg)); ip_input(msg->msg.inp.p, msg->msg.inp.netif); break; case TCPIP_MSG_CALLBACK: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK %p
", (void *)msg)); msg->msg.cb.f(msg->msg.cb.ctx); break; default: break; } memp_free(MEMP_TCPIP_MSG, msg); } } 因为我一直在说我的LWIP初始化无法单独存在,必须依靠UCOS的保持进程的一些语句,现在通过打开调试信息发现一些问题,但不是很明白。当我把代码调整到可以LWIP正常初始化,ping 的通的话 调试信息显示这个函数是运行的这一行: case TCPIP_MSG_INPUT: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: IP packet %p
", (void *)msg)); ip_input(msg->msg.inp.p, msg->msg.inp.netif); break; 当我把代码调整到LWIP初始化以后无法ping通的话,是运行的这一行: case TCPIP_MSG_API: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p
", (void *)msg)); api_msg_input(msg->msg.apimsg); break; 请问是不是这里的问题,导致我有些时候LWIP初始化以后无法ping通? |