udp.lst

来自「CP2201和51单片机实现ARP ICMP IP UDP协议」· LST 代码 · 共 90 行

LST
90
字号
C51 COMPILER V7.06   UDP                                                                   12/04/2007 13:46:19 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE UDP
OBJECT MODULE PLACED IN udp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE udp.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "ne2000.h"
   2          #include "ip.h"
   3          #include "netcomm.h"
   4          #include <stdio.h>
   5          
   6          extern union NetNode xdata myNode;
   7          extern union ip_address_type xdata pc_ip_addr;
   8          void udp_send(INT8U xdata *inbuf,union ip_address_type sender_ipaddr,INT16U source_port,INT16U dest_port, 
             -INT16U len)
   9          {      
  10   1              udp_head xdata *udp;
  11   1              ip_head xdata *ip;
  12   1              INT16U idata i;
  13   1              INT32U idata sum;
  14   1              INT16U idata result;
  15   1              INT8U xdata outbuf[342];
  16   1              if(len>300)
  17   1              return;
  18   1              for(i=42;i<len+42;i++)
  19   1              outbuf[i]=*inbuf++;
  20   1              ip=(ip_head xdata *)(outbuf+14);
  21   1              udp=(udp_head xdata *)(outbuf+34);    //将数据放入UDP数据区
  22   1              udp->destport =dest_port;                //sender_udpport; //
  23   1              udp->sourceport = source_port;       //
  24   1              udp->length=8+len;                  //
  25   1              udp->crc=0;                         //
  26   1              for(i=0;i<4;i++)                     //
  27   1               {
  28   2                      ip->sourceip[i]=myNode.nodebytes.ipbytes[i];
  29   2                      ip->destip[i]=sender_ipaddr.bytes[i];
  30   2                }
  31   1              sum = (INT32U)chksum((outbuf+26), udp->length+8);
  32   1              sum += (INT32U)0x0011;
  33   1              sum += (INT32U)udp->length;
  34   1              result = (INT16U)(sum + (sum >> 16));
  35   1              udp->crc=~result; 
  36   1          ip_send(outbuf,sender_ipaddr,17,udp->length );
  37   1             
  38   1      }
  39          void udp_rcve(INT8U xdata *inbuf,INT16U len)
  40          {
  41   1              INT8U i;
  42   1              udp_head xdata *udp;
  43   1              ip_head xdata *ip;
  44   1              INT32U idata sum;
  45   1              INT16U idata result;
  46   1              udp=(udp_head xdata *)(inbuf+34);
  47   1              ip=(ip_head xdata *)(inbuf+14);
  48   1              sum = (INT32U)chksum(inbuf+26, 8+len);
  49   1              sum += (INT32U)0x0011;
  50   1              sum += (INT32U)udp->length;
  51   1              result = (INT16U)(sum + (sum >> 16));
  52   1              if(result==0xffff)
  53   1              {
  54   2                      
C51 COMPILER V7.06   UDP                                                                   12/04/2007 13:46:19 PAGE 2   

  55   2                      for(i=42;i<len+34;i++)
  56   2                        printf ("%.2x", (unsigned int)inbuf[i]);
  57   2                        udp_send(&inbuf[42],pc_ip_addr, 0x05dc, 1500,len-8);
  58   2                      
  59   2               }
  60   1              else return;
  61   1      }
  62                          
  63                  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    713    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =   ----     342
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      23
   IDATA SIZE       =   ----      14
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?