wyzjjyx@126.com 发表于 2012-10-11 11:30:17

有弄过rl TCPNET的吗?求助

   最近在弄以太网通信,花不少时间在LPC2468上弄TCPNET的以太网程序硬是地址不能解析,ping不到我板子IP地址。求救啊!!,先谢谢了
主函数部分代码

          Ethernet_Init();                //初始化以太网
    Ethernet_ReadCFG();            //从EEPROM中读port 等

      DELAY_SYS(6000*60); //delay 60ms
      
      DELAY_SYS(6000*60); //delay 60ms      

      DELAY_SYS(6000*60); //delay 60ms      
               
                init_TcpNet();
         socket_udp = udp_get_socket(0,0, udp_callback);
         if(socket_udp!=0)
         {
               udp_open(socket_udp,uw16_UDPLocalPort);//uw16_UDPLocalPort
               
         }
                /*socket_udp_2 = udp_get_socket(0,0, udp_callback);
         if(socket_udp_2!=0)
         {
               udp_open(socket_udp_2,2399);
               //      flag=1;
         }*/
         socket_tcp = tcp_get_socket ((TCP_TYPE_SERVER|TCP_TYPE_KEEP_ALIVE), 0, 10, tcp_callback);
      VICVectCntl21 = 2;
      if (socket_tcp != 0)
      {
                tcp_listen (socket_tcp, PORT_NUM);
      }
         
   
      //IVCH_ReportVer();                         // 报告软件版本
    //PC_RD_MCU();// 报告MCU号和BOOTLOAD版本                //???
//Ethernet_ARPBuilt();
    while ( 1 )                                                   // 主循环
      {
         main_TcpNet ();
               // 网络通道处理
      //      CheckIfResetSystem();      //12.08.2009 add
//                if (!(SocketStatus & SOCK_ACTIVE)) TCPPassiveOpen();   // listen for incoming TCP-connection
                  timer_poll ();

                        /* network receive process */
//DoNetworkRxStuff();
                  /* network send process */
                  DoNetworkTxStuff();
                //      if(flag)
                              SystemLED();
                        /* network pack */   
            //Pro CmdParse   // Cmd::CmdParse();
          //MitsProWork();
      
            IP_CmdParse();

            /* Cmd data parse */   
         IVCH_CmdClassify();
         

    }
               

就是这个函数arp_cache_ip不能返回true
void DoNetworkTxStuff(void)
{
      if(uc_IPFlags == IP_ADDR_NOTRESOLVED)
    {
      if (arp_cache_ip (uc_remotemIpAdr, ARP_FIXED_IP) == __TRUE)
                {
                  // Wait, 'rem_IP' address resolved yet. //
                  uc_IPFlags = IP_ADDR_RESOLVED4UDP;
                                                flag=1;
                }
                        }
}


这里my_state返回的是2为监听状态,就是不能进入TCP_STATE_CONNECT
void IP_CmdParse(void)               
{
    //组装网络包
    //unsigned short nDataCount;
    //unsigned charbExistDataInBufferFlag;
      uint16 k=0;
      uint8 my_state = 0;
      my_state = tcp_get_state(socket_tcp);
      if((my_state != TCP_STATE_CONNECT)|(ENET_BufLen == 0))            // check if somebody has connected to our TCP
      {
                if(uc_udpENET_BufLen == 0)
                  return;
                //flag=1;
      }      // check if remote TCP sent data
      else
      {
                flag=1;
      }
    for(k=6; k<=uc_udpENET_BufLen; k++)
      {
                uc_IVCH_CmdBuf = uc_udpENET_BUF;
      }
      uc_IVCH_CmdBufFlg = 1;
      uw16_IVCH_CmdBuf_Index      = uc_udpENET_BufLen-6;
      uc_udpENET_BufLen = 0;
      uc_udpENET_BufEnd = 0;
}


//初始化以太网
void Ethernet_Init(void)
{
    /*初始化网络控制器,如果每个项目各不相同, 请按项目分类*/
    init_ethernet();

    uw32_IPTimer   = 0;
    uw16_TxFrameSize = 0;
    uc_IPFlags         = IP_ADDR_NOTRESOLVED;
    uw16_IPTimerCounter = 1000;
    uw32_nIPSnapshotTimeValue = 0;

        TCPFlags = 0;
        TCPStateMachine = CLOSED;
        SocketStatus = 0;

   
        *(unsigned char *)uw16_RemoteIP = 196; //EEP_RemoteIP;               // uncomment those lines to get the远程计算机IP
        *((unsigned char *)uw16_RemoteIP + 1) = 168; //EEP_RemoteIP;          // quote of the day from a real
        *((unsigned char *)uw16_RemoteIP + 2) = 1;//EEP_RemoteIP;         // internet server! (gateway must be
        *((unsigned char *)uw16_RemoteIP + 3) = 100; //EEP_RemoteIP;//208 203; //       // set to your LAN-router)
//
        *(unsigned char *)uw16_MyIP= 196; // EEP_RemoteIP;//192;                  // "MYIP1.MYIP2.MYIP3.MYIP4"    本机IP
        *((unsigned char *)uw16_MyIP + 1)= 168; //EEP_RemoteIP;//168;
        *((unsigned char *)uw16_MyIP + 2)= 1; //EEP_RemoteIP;// 1;
        *((unsigned char *)uw16_MyIP + 3)= uc_dsp_id;
//
    *((unsigned char *)uc_MyMAC+ 5)= uc_dsp_id;

        TCPLocalPort = 5678;//2025;本地端口号

        TCPRemotePort = 9030;//TCP_PORT_QOTD;远程端口号

        uw16_UDPLocalPort = 2040;//2025;本地端口号
        uw16_UDPRemotePort = 9030;//UDP_PORT_QOTD;远程端口号


        m_CommLastStamp = uw32_TimeStamp;          //   用于复位网络           // 20111018YY
        m_CmdLastStamp = uw32_TimeStamp;        //   用于复位硬件        // 20111018YY       
}

void Ethernet_ReadCFG(void)
{
// 读取以太网配置信息(远程本地端口IP)
    IVCH_ReadDriveIP();               
    IVCH_ReadMCULocalPort();/*读取并设置本地端口号*/
    uw16_UDPRemotePort = 9030;/*UDP_PORT_QOTD;远程端口号*/   
}
页: [1]
查看完整版本: 有弄过rl TCPNET的吗?求助