⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cksum.lst

📁 cf8020+cp2200(网络)的驱动实现
💻 LST
字号:
C51 COMPILER V7.09   CKSUM                                                                 07/27/2007 15:11:24 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE CKSUM
OBJECT MODULE PLACED IN CKSUM.obj
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE tcp\CKSUM.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\CKSUM.lst) OBJECT(CKSUM
                    -.obj)

line level    source

   1          /*
   2          ;-------------------------------------------------------------------------
   3          ; Copyright (c) 2002 Jim Brady
   4          ; Do not use commercially without author's permission
   5          ; Last revised August 2002
   6          ; CKSUM.A51
   7          ;
   8          ; This computes the internet checksum on an 8051
   9          ;
  10          ; Call from C program: uint cksum(UCHAR  * buf, uint length);
  11          ; Where * buf is pointer to first char (must be in  space)
  12          ; and "length" is number of bytes (not words) to sum over
  13          ;-------------------------------------------------------------------------
  14          */
  15          #include "net.h"
  16          #include "utils.h"
  17          
  18          uint cksum(UCHAR *check,uint length) //计算校验和
  19          {
  20   1              long sum=0;
  21   1              uint i;
  22   1              uint  *ptr; 
  23   1              uint t;
  24   1          ptr=(uint  *)check;
  25   1      
  26   1              for (i=0;i<(length)/2;i++)
  27   1              {
  28   2                      t = *ptr++;
  29   2      #ifdef __LITTLEENDIAN__         
                              t = ntohs((char*)&t, 0);                
              #endif
  32   2                      sum += t;
  33   2              }
  34   1              if (length&0x01)//表示长度为单数
  35   1              {
  36   2                      t = (*ptr);
  37   2                      
  38   2      #ifdef __LITTLEENDIAN__
                      //      t = ReadUInt16((char*)&t, 0);   
                              t = t<<8;
              #endif
  42   2                      sum = sum+(t&0xff00);
  43   2      //              sum += t;
  44   2              }
  45   1              sum=(sum&0xffff)+((sum>>16)&0xffff);//高16位和低16位相加
  46   1              if(sum&0xffff0000)
  47   1              {//表示有进位
  48   2                      sum++;
  49   2              }
  50   1              return ( (uint)((sum)&0xffff));
  51   1      //      return ( (uint)(~((sum)&0xffff)));
  52   1      }
  53          
  54          
C51 COMPILER V7.09   CKSUM                                                                 07/27/2007 15:11:24 PAGE 2   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    326    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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