问个关于LWIP的问题

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

??

你是怎么初始化的阿?<br />ip_input(msg-&gtmsg.inp.p,&nbsp;msg-&gtmsg.inp.netif)<br />运行这个函数是因为底层的ethernetif_input()调用tcpip_input(),向tcpip_thread()发送消息后运行的。<br /><br />api_msg_input(msg-&gtmsg.apimsg)<br />应该是上层api向tcpip_thread()发送消息,然后运行的。
 楼主| bluesteed 发表于 2007-7-9 16:45 | 显示全部楼层

初始化

初始化:<br />void&nbsp;LWIP_main(void&nbsp;*arg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;u8_t&nbsp;&nbsp;&nbsp;&nbsp;err;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;ip_addr&nbsp;ipaddr,&nbsp;netmask,&nbsp;gw;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys_sem_t&nbsp;sem;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;struct&nbsp;netif&nbsp;netif_test;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netifnum&nbsp;=&nbsp;0;&nbsp;//for&nbsp;count&nbsp;netif-&gtnum<br />&nbsp;&nbsp;<br />#ifdef&nbsp;STATS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stats_init();<br />#endif&nbsp;/*&nbsp;STATS&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mem_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memp_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pbuf_init();<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netif_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;tcpip_init(NULL,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;udp_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />//mainthread<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netif_init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//netif_list&nbsp;=&nbsp;netif_default&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sem&nbsp;=&nbsp;sys_sem_new(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//tcpip_init(tcpip_init_done,&nbsp;&sem);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sys_sem_wait(sem);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sys_sem_free(sem);&nbsp;&nbsp;<br />&nbsp;<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//add&nbsp;ne2k&nbsp;interface<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP4_ADDR(&gw,&nbsp;GATEWAY1,GATEWAY2,GATEWAY3,GATEWAY4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP4_ADDR(&ipaddr,&nbsp;OURIP1,OURIP2,OURIP3,OURIP4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP4_ADDR(&netmask,&nbsp;NETMASK1,NETMASK2,NETMASK3,NETMASK4);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netif_add(&netif_test,&ipaddr,&nbsp;&netmask,&nbsp;&gw,&nbsp;NULL,&nbsp;ethernetif_init,tcpip_input);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netif_set_default(&netif_test);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netif_set_up(&netif_test);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />
nanpia 发表于 2007-7-9 16:59 | 显示全部楼层

??

你把修改前和修改后的都贴出来呀,好看些
 楼主| bluesteed 发表于 2007-7-9 17:21 | 显示全部楼层

好的

改前:<br />&nbsp;&nbsp;&nbsp;&nbsp;(void)p_arg;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ConsoleSem&nbsp;&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;lwip_input&nbsp;&nbsp;=&nbsp;OSSemCreate(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;lwip_output&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;Sem1&nbsp;=&nbsp;OSSemCreate(0);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pri_info();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//Entrance&nbsp;to&nbsp;the&nbsp;lwip&nbsp;stack.<br />&nbsp;&nbsp;&nbsp;&nbsp;LWIP_main(p_arg);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91D_BASE_PIO_LED,&nbsp;led_mask[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDlyHMSM(0,&nbsp;0,&nbsp;0,&nbsp;SPEED);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91D_BASE_PIO_LED,&nbsp;led_mask[0]&nbsp;)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDlyHMSM(0,&nbsp;0,&nbsp;0,&nbsp;SPEED);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />改后:<br />&nbsp;&nbsp;&nbsp;&nbsp;ST_NETCONN&nbsp;*__pstConn,&nbsp;*__pstNewConn;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;netbuf&nbsp;&nbsp;&nbsp;&nbsp;*__pstNetbuf;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k,i;<br />&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;(void)p_arg;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ConsoleSem&nbsp;&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;lwip_input&nbsp;&nbsp;=&nbsp;OSSemCreate(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;lwip_output&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;Sem1&nbsp;=&nbsp;OSSemCreate(0);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pri_info();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//Entrance&nbsp;to&nbsp;the&nbsp;lwip&nbsp;stack.<br />&nbsp;&nbsp;&nbsp;&nbsp;LWIP_main(p_arg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;__pstConn&nbsp;=&nbsp;netconn_new(NETCONN_TCP);<br />&nbsp;&nbsp;&nbsp;&nbsp;netconn_bind(__pstConn,&nbsp;NULL,&nbsp;80);<br />&nbsp;&nbsp;&nbsp;&nbsp;netconn_listen(__pstConn);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(TRUE)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__pstNewConn&nbsp;=&nbsp;netconn_accept(__pstConn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(__pstNewConn&nbsp;!=&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__pstNetbuf&nbsp;=&nbsp;netconn_recv(__pstNewConn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(__pstNetbuf&nbsp;!=&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netconn_write(__pstNewConn,&nbsp;&quot;HTTP/1.1&nbsp;200&nbsp;OK
Content-type:&nbsp;text/html

&quot;,&nbsp;44,&nbsp;NETCONN_COPY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netconn_write(__pstNewConn,&nbsp;&quot;&ltbody&gt&lth1&gt这是LWIP&nbsp;TCP测试!&lt/h1&gt&lt/body&gt&quot;,&nbsp;40,&nbsp;NETCONN_COPY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netbuf_delete(__pstNetbuf);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netconn_close(__pstNewConn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(netconn_delete(__pstNewConn)&nbsp;!=&nbsp;ERR_OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDlyHMSM(0,&nbsp;0,&nbsp;1,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}
nanpia 发表于 2007-7-9 17:29 | 显示全部楼层

不明白

呵呵,看不明白,不知道什么原因,<br /><br />不过对你这句话不是很理解:<br />因为我一直在说我的LWIP初始化无法单独存在,必须依靠UCOS的保持进程的一些语句。。。<br /><br />能否再解释下?
 楼主| bluesteed 发表于 2007-7-9 17:47 | 显示全部楼层

我自己也觉得很奇怪

<br />我自己也觉得很奇怪,按道理LWIP只要能运行过了,不管后面怎么样,都应该ping的来,但现在就使这样步行。<br />我现在是LWIP在任务1里面,任务2是循环亮灯;任务1必须加FOR或者加OSTaskDel(OS_PRIO_SELF);这样的语句,才能使任务处于进程,这样才能ping&nbsp;的来<br />
nanpia 发表于 2007-7-9 22:31 | 显示全部楼层

是不是tcpip_thread()这个任务没有创建成功?
yulri 发表于 2011-7-20 17:13 | 显示全部楼层
先记下再说啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部