AnsweredAssumed Answered

MQX系统 在 k64 总线 扩展 双网口 两个dm9000a 问题

Question asked by yongzhen yan on Nov 1, 2017
Latest reply on Nov 2, 2017 by yongzhen yan

单独初始化 其中任何一个 网口都好用;把两个都开,两个都不好用,两个都配置为服务器。大牛给看下有没有遇到过
只开2口程序:(开两个时i从1开始循环)
    /* Bind IP address for each interface */
    for (i = 2; i <=2; i++)
    {
        _enet_address           address;
        uint32_t                 phy_addr;
       // uint32_t                 sock;

 

       // sock = socket(AF_INET,SOCK_STREAM,0);
        phy_addr = i;
        if(i==2)
        ip_addr = IPADDR(A1,B1,C1,D1);
        else
          if(i==1)
            ip_addr = IPADDR(config1[5],config1[6],config1[7],config1[8]);  

        ENET_get_mac_address(phy_addr, ip_addr, address);

        /* Init ENET device */
        error = ipcfg_init_device (phy_addr, address);
        if (error != RTCS_OK)
        {
            printf("IPCFG: Device n.%d init failed. Error = 0x%X\n", i, error);
            _task_set_error(MQX_OK);
            n_devices--;
            i--;
            continue;
        }

        #if RTCSCFG_ENABLE_IP4
        ip_data.ip      = ip_addr;
        ip_data.mask    = IPADDR(config1[9],config1[10],config1[11],config1[12]);
       // if(i==1)
        ip_data.gateway = IPADDR(config1[13],config1[14],config1[15],config1[16]);
        /* Bind IPv4 address */
        error = ipcfg_bind_staticip (phy_addr, &ip_data);
        if (error != RTCS_OK)
        {
         //   printf("\nIPCFG: Failed to bind IP address. Error = 0x%X", error);
            _task_block();
        }
        #endif

    }

网口1任务:
void net1_rev_task(uint32_t initial_data)
{
uint32_t listensock,error,length;
uint16_t len;
int32_t          value = 256;
sockaddr_in  addr,addrin;
//char str[200];
listensock = socket(AF_INET,SOCK_STREAM,0);
addr.sin_addr.s_addr = ip_addr[1];
//addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_family = AF_INET;
addr.sin_port = config1[17];
error = bind(listensock,&addr,sizeof(addr));
error = listen(listensock,5);
while(1)

{任务程序}
}
网口2任务程序:
void net2_rev_task(uint32_t initial_data)
{
uint32_t sock1,listensock1,error1,length1;
uint16_t len1;
int32_t          value1 = 256;
sockaddr_in  addr1,addrin1;
//char str[1200];
listensock1 = socket(AF_INET,SOCK_STREAM,0);
addr1.sin_addr.s_addr = ip_addr[2];
//addr.sin_addr.s_addr = INADDR_ANY;
addr1.sin_family = AF_INET;
addr1.sin_port = 205;
error1 = bind(listensock1,&addr1,sizeof(addr1));
error1 = listen(listensock1,5);

//setsockopt(listensock,SOL_TCP,OPT_TBSIZE,&value,sizeof(value));
   while(1)
   {

  任务程序
}
}

Outcomes