打印

关于UCOS+LWIP在EMBEDALL的7X256上建立WEB服务器遇到的问题

[复制链接]
3188|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bluesteed|  楼主 | 2007-5-30 21:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前也在论坛里看到有帖子说EMBEDALL的7X256的附带的代码里只能PING通,不能做UDP,TCP 的运用.我现在也是遇到这样的问题,本来想在原来可以PING通的程序上面建立一个WEB服务器的,后来参照了龙一大侠的那个WEB服务器的代码.但现在就是发现那个LWIP 的进程必须依靠后面的一个FOR循环的亮灯程序才能保持LWIP 的进程(PING 的通),一旦把后面的那个FOR循环去掉,只把LWIP_main(p_arg);运行一遍,马上就PING 不通了,我已经用FOR循环的亮灯程序在程序的不同位置测试过,确信那个LWIP进程就是依靠FOR循环才能保持在运行状态.
不知道这里有没有遇到过同样情况的朋友,或者哪位高人指点一下.
之前一直以为是WEB服务器代码方面的问题,断断续续的搞了半个多月了.

相关帖子

沙发
bluesteed|  楼主 | 2007-5-30 21:55 | 只看该作者

附上主进程的代码

附上代码
 
   OS_STK_DATA        data;
   ST_NETCONN *__pstConn, *__pstNewConn;
   struct netbuf    *__pstNetbuf;
   
    int k,i;
    k = 1;
    
    (void)p_arg;

    //ConsoleSem  = OSSemCreate(1);
    lwip_input  = OSSemCreate(0);
    next        = OSSemCreate(1);
    lwip_output = OSSemCreate(1);
    Sem1 = OSSemCreate(0);    
    
    pri_info();
    //Entrance to the lwip stack.
    LWIP_main(p_arg);(就是这里,如果后面不加FOR循环,就PING 不通了)
                 for(;;){
    
        AT91F_PIO_ClearOutput( AT91D_BASE_PIO_LED, led_mask[0]);
        OSTimeDlyHMSM(0, 0, 0, SPEED);
        AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, led_mask[0] ) ;
        OSTimeDlyHMSM(0, 0, 0, SPEED);
                    }
        
    __pstConn = netconn_new(NETCONN_TCP);
    netconn_bind(__pstConn, NULL, 80);
    netconn_listen(__pstConn);
    
    
    
    while(TRUE)
    {
        __pstNewConn = netconn_accept(__pstConn);
        
        if(__pstNewConn != NULL)
        {            
            __pstNetbuf = netconn_recv(__pstNewConn);
            if(__pstNetbuf != NULL)
            {
                netconn_write(__pstNewConn, "HTTP/1.1 200 OK Content-type: text/html ", 44, NETCONN_COPY);
                netconn_write(__pstNewConn, "<body><h1>这是LWIP TCP测试!</h1></body>", 40, NETCONN_COPY);
                
                netbuf_delete(__pstNetbuf);    
            }
            
            netconn_close(__pstNewConn);
            while(netconn_delete(__pstNewConn) != ERR_OK)
                OSTimeDlyHMSM(0, 0, 1, 0);
                

     }           
    }
    
}

---------------------------
下面是LWIP初始化的代码
void LWIP_main(void *arg)
{     
    extern err_t ethernetif_init(struct netif *stNetif);
    u8_t    err;
      struct ip_addr ipaddr, netmask, gw;
      sys_sem_t sem;
    static st_netif netif_test;

      //netifnum = 0; //for count netif->num
  

    

      sys_init();
      mem_init();
      memp_init();
      pbuf_init();

    
//mainthread
      netif_init();                 

           sem = sys_sem_new(0);
      tcpip_init(NULL, NULL);
      tcpip_init(tcpip_init_done, &sem);
      sys_sem_wait(sem);
      sys_sem_free(sem);  
      
      udp_init();
 

      


    //* 建立并配置EMAC接口
    IP4_ADDR(&ipaddr, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(0):OURIP1, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(1):OURIP2, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(2):OURIP3, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetIPAddr(3):OURIP4);
            
    IP4_ADDR(&netmask, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(0):NETMASK1, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(1):NETMASK2, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(2):NETMASK3, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetNetMask(3):NETMASK4);
    IP4_ADDR(&gw, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(0):GATEWAY1, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(1):GATEWAY2, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(2):GATEWAY3, 
            (PST_NET_CFG_PARAM->ulFlag == NET_CFG_FLAG)?macGetGateway(3):GATEWAY4);
      
          netif_add(&netif_test,&ipaddr, &netmask, &gw, NULL, ethernetif_init,tcpip_input);
      
  
        netif_set_default(&netif_test);
        netif_set_up(&netif_test);
      
 
    

    
}

    

使用特权

评论回复
板凳
bluesteed|  楼主 | 2007-5-30 22:20 | 只看该作者

补充

补充一下,在主进程里面,即使后面不加WEB服务器的代码,如果不在LWIP_main(p_arg);后面加FOR循环,网络也会PING不通,这让我百得不思其解,按照以前那个帖子说的如果说是任务数或者OS_EVENT的原因,那光进程里放LWIP_main(p_arg);后面不加FOR循环也应该PING 的通的啊

使用特权

评论回复
地板
bluesteed|  楼主 | 2007-5-31 09:21 | 只看该作者

回楼上,我问你你们的技术支持好几次了,都说代码问题不

回楼上,我问你你们的技术支持好几次了,都说代码问题不负责
具体代码的问题不负责解答

使用特权

评论回复
5
mmd2102| | 2007-5-31 09:56 | 只看该作者

re

我们在测试这个代码,有结果后电话和你联系。客户使用我们的产品出了技术问题,我们没有理由不给客户不做技术支持!!!如果以后您对技术支持部门的工作不满意的话请直接给 075-83605322-18进行投诉,我们认真对待每个客户反馈的问题。同时问题没查出结果前,我们不敢随便下结论的。

使用特权

评论回复
6
bluesteed|  楼主 | 2007-6-1 13:13 | 只看该作者

还没有人解答

继续求教高人,还没有解答

使用特权

评论回复
7
heyunhuan| | 2007-6-1 14:52 | 只看该作者

你的讲述让我有点晕。

是你的叙述有问题呢,还是我理解上有问题呢?

什么加上for循环和不加for循环啊?
你要是相信我就把你的代码发给我,我看看吧,尽力帮你看看吧,我可不敢保证一定能帮上你的忙。

我的Email:Small.Box@163.com

Blog:http://heyunhuan513.blog.163.com 上面也有我移植的一部分笔记,由于时间关系,没有添加完,待续吧……

使用特权

评论回复
8
bluesteed|  楼主 | 2007-6-1 15:54 | 只看该作者

回楼上

我也是也是因为这样才被搞晕的阿,后面加不加FOR循环的跑灯程序的确会产生影响。我的感觉是因为有了FOR循环才使得前面的LWIP初始化始终处于运行的进程,否则就直接跑飞了。

使用特权

评论回复
9
bluesteed|  楼主 | 2007-6-3 20:18 | 只看该作者

继续求大侠

继续求高人指点啊

使用特权

评论回复
10
bluesteed|  楼主 | 2007-6-7 13:39 | 只看该作者

很失望

很失望贵公司最后还是说对代码问题不负责。

使用特权

评论回复
11
bluesteed|  楼主 | 2007-6-7 13:40 | 只看该作者

很伤心

很伤心

使用特权

评论回复
12
wydian| | 2007-6-12 14:25 | 只看该作者

都for了后面的肯定不执行了

使用特权

评论回复
13
bluesteed|  楼主 | 2007-6-12 18:16 | 只看该作者

回楼上

你是没看清楚,我的前提是FOR后面的程序我都已经删掉了,FOR不加的话,在FOR之前的LWIP初始化就不能正常运行

使用特权

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

本版积分规则

10

主题

30

帖子

0

粉丝