移植/熟悉过microchip TCP/IP的大虾进来帮我看看呀,求助中...

2020-02-06 10:27发布

客户端使用嵌入式开发的设备(PIC18F66J60),想移植microchip TCP/IP的协议。

客户端很简单,就是向服务器IP地址为目的IP打包数据发送和接收服务器往本IP地址的数据,一切以IP地址为唯一沟通身份,不使用DHCP。
如果想达到这样的目的,需要加载哪些TCPIP的协议呀?
Announce.c
ARP.c
DHCP.c
DNS.c
Helpers.c
ICMP.c
IP.c
MPFS.c
SPIRAM.c
StackTsk.c
TCP.c
Tick.c
UDP.c
SSL.c
FTP.c
HTTP2
NBNS.c
……
对TCPIP不了解呀,大侠指点一二吧。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
worksnfkpynn99
2020-02-08 17:09
本帖最后由 worksnfkpynn99 于 2013-2-4 17:02 编辑

问题:最近使用Microchip TCP/IP协议栈,在应用UDP通讯的时候,偶尔会出现读不到数据的情况。(感觉每次出现这种情况都是在当:设备发送数据,服务器立马(100ms内)回复的时候设备就一直读不到了。)

平台:MPLAB V8.86
编译器:MPLAB C18 V3.44
设备硬件:PIC18F66J60
工作方式是:设备通过UDP的方式与远端服务器进行数据交换。指定收发端口号为:8889/8890,指定服务器的IP地址和MAC地址。

不知道有没有研究过Microchip TCP/IP协议栈的大侠,下面是我的UDP收发代码,参考的是Announce.c 文件里"void DiscoveryTask(void );" 程序结构:
  1. void MyUDPTask(void)  
  2. {  
  3.          static enum {  
  4.                    MyUDP_HOME = 0,  
  5.                    MyUDP_READ,  
  6.                    MyUDP_SEND,  
  7.                    MyUDP_DISABLED  
  8.          } MyUDPSM = MyUDP_HOME;  
  9.    
  10.          static UDP_SOCKET          MySocket;  
  11.          NODE_INFO              Remote;  
  12.    
  13.          switch(MyUDPSM)  
  14.          {  
  15.                    case MyUDP_HOME:  
  16.                             if(!MACIsLinked())  
  17.                                      return;  
  18.                             if(ServerIPAddress[0]==0xFF || ServerIPAddress[0]==0x00)  
  19.                             {  
  20.                                      memset(&Remote, 0xFF, sizeof(Remote));  
  21.                             }  
  22.                             else  
  23.                             {  
  24.                                      //only read from or send to my server.  
  25.                                      Remote.MACAddr.v[0]=ServerMACAddress[0];  
  26.                                      Remote.MACAddr.v[1]=ServerMACAddress[1];  
  27.                                      Remote.MACAddr.v[2]=ServerMACAddress[2];  
  28.                                      Remote.MACAddr.v[3]=ServerMACAddress[3];  
  29.                                      Remote.MACAddr.v[4]=ServerMACAddress[4];  
  30.                                      Remote.MACAddr.v[5]=ServerMACAddress[5];  
  31.                                      Remote.IPAddr.Val = ServerIPAddress[3];  
  32.                                      Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress[2];  
  33.                                      Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress[1];  
  34.                                      Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress[0];  
  35.                             }  
  36.                             MySocket = UDPOpenEx((DWORD)&Remote,UDP_OPEN_NODE_INFO,UDPREAD_PORT,UDPSEND_PORT);  
  37.                             if(MySocket == INVALID_UDP_SOCKET)  
  38.                                      return;  
  39.                             else  
  40.                                      MyUDPSM = MyUDP_READ;  
  41.                             break;  
  42.                    case MyUDP_READ:  
  43.                             if(!UDPIsGetReady(MySocket))  
  44.                             {  
  45.                                      if(RXTimes>30)  
  46.                                                MyUDPSM = MyUDP_SEND;  
  47.                                      else  
  48.                                                RXTimes++;  
  49.                                      return;  
  50.                             }  
  51.                             UDPGetArray(ReadBuffer,64);  
  52.                             UDPDiscard();  
  53.                             //Here is my read app.  
  54.                             for(i=0;i<64;i++)  
  55.                             {  
  56.                                      ReadBuffer[i] = 0x00;  
  57.                             }  
  58.                             MyUDPSM = MyUDP_SEND;  
  59.                    case MyUDP_SEND:  
  60.                             if(!UDPIsPutReady(MySocket))  
  61.                             {  
  62.                                      return;  
  63.                             }  
  64.                             //Here is my send app   
  65.                             UDPPutArray((BYTE*)&SendBuffer[0],64);  
  66.                             UDPFlush();  
  67.                             for(i=0;i<64;i++)  
  68.                             {  
  69.                                      SendBuffer[i] = 0x00;  
  70.                             }   
  71.                             MyUDPSM = MyUDP_DISABLED;   
  72.                             break;  
  73.                    case MyUDP_DISABLED:  
  74.                             RXTimes = 0;  
  75.                             UDPClose(MySocket);  
  76.                             MyUDPSM = MyUDP_HOME;  
  77.                             break;  
  78.          }  
  79. }
复制代码有知晓的友友帮我看看,貌似不知道哪里不对,一头雾水。。。。

一周热门 更多>