附上代码<br /> <br /> OS_STK_DATA data;<br /> ST_NETCONN *__pstConn, *__pstNewConn;<br /> struct netbuf *__pstNetbuf;<br /> <br /> int k,i;<br /> k = 1;<br /> <br /> (void)p_arg;<br /><br /> //ConsoleSem = OSSemCreate(1);<br /> lwip_input = OSSemCreate(0);<br /> next = OSSemCreate(1);<br /> lwip_output = OSSemCreate(1);<br /> Sem1 = OSSemCreate(0); <br /> <br /> pri_info();<br /> //Entrance to the lwip stack.<br /> LWIP_main(p_arg);(就是这里,如果后面不加FOR循环,就PING 不通了)<br /> for(;;){<br /> <br /> AT91F_PIO_ClearOutput( AT91D_BASE_PIO_LED, led_mask[0]);<br /> OSTimeDlyHMSM(0, 0, 0, SPEED);<br /> AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, led_mask[0] ) ;<br /> OSTimeDlyHMSM(0, 0, 0, SPEED);<br /> }<br /> <br /> __pstConn = netconn_new(NETCONN_TCP);<br /> netconn_bind(__pstConn, NULL, 80);<br /> netconn_listen(__pstConn);<br /> <br /> <br /> <br /> while(TRUE)<br /> {<br /> __pstNewConn = netconn_accept(__pstConn);<br /> <br /> if(__pstNewConn != NULL)<br /> { <br /> __pstNetbuf = netconn_recv(__pstNewConn);<br /> if(__pstNetbuf != NULL)<br /> {<br /> netconn_write(__pstNewConn, "HTTP/1.1 200 OK
Content-type: text/html
", 44, NETCONN_COPY);<br /> netconn_write(__pstNewConn, "<body><h1>这是LWIP TCP测试!</h1></body>", 40, NETCONN_COPY);<br /> <br /> netbuf_delete(__pstNetbuf); <br /> }<br /> <br /> netconn_close(__pstNewConn);<br /> while(netconn_delete(__pstNewConn) != ERR_OK)<br /> OSTimeDlyHMSM(0, 0, 1, 0);<br /> <br /><br /> } <br /> }<br /> <br />}<br /><br />---------------------------<br />下面是LWIP初始化的代码<br />void LWIP_main(void *arg)<br />{ <br /> extern err_t ethernetif_init(struct netif *stNetif);<br /> u8_t err;<br /> struct ip_addr ipaddr, netmask, gw;<br /> sys_sem_t sem;<br /> static st_netif netif_test;<br /><br /> //netifnum = 0; //for count netif->num<br /> <br /><br /> <br /><br /> sys_init();<br /> mem_init();<br /> memp_init();<br /> pbuf_init();<br /><br /> <br />//mainthread<br /> netif_init(); <br /><br /> sem = sys_sem_new(0);<br /> tcpip_init(NULL, NULL);<br /> tcpip_init(tcpip_init_done, &sem);<br /> sys_sem_wait(sem);<br /> sys_sem_free(sem); <br /> <br /> udp_init();<br /> <br /><br /> <br /><br /><br /> //* 建立并配置EMAC接口<br /> IP4_ADDR(&ipaddr, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(0):OURIP1, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(1):OURIP2, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(2):OURIP3, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(3):OURIP4);<br /> <br /> IP4_ADDR(&netmask, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(0):NETMASK1, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(1):NETMASK2, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(2):NETMASK3, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(3):NETMASK4);<br /> IP4_ADDR(&gw, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(0):GATEWAY1, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(1):GATEWAY2, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(2):GATEWAY3, <br /> (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(3):GATEWAY4);<br /> <br /> netif_add(&netif_test,&ipaddr, &netmask, &gw, NULL, ethernetif_init,tcpip_input);<br /> <br /> <br /> netif_set_default(&netif_test);<br /> netif_set_up(&netif_test);<br /> <br /> <br /> <br /><br /> <br />}<br /><br />
|