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

📄 uip_arch.lst

📁 基于STC单片机与MICROCHIP ENC28J60的TCPIP以太网控制器
💻 LST
字号:
C51 COMPILER V8.08   UIP_ARCH                                                              08/22/2008 14:32:52 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE UIP_ARCH
OBJECT MODULE PLACED IN uip_arch.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE uip_arch.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2           * Copyright (c) 2001, Adam Dunkels.
   3           * All rights reserved. 
   4           *
   5           *
   6           * This file is part of the uIP TCP/IP stack.
   7           *
   8           * $Id: uip_arch.c,v 1.2.2.1 2003/10/04 22:54:17 adam Exp $
   9           *
  10           */
  11          
  12          
  13          
  14          #include "uip.h"
  15          #include "uip_arch.h"
  16          
  17          #define BUF ((uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
  18          #define IP_PROTO_TCP    6
  19          
  20          /*----------------------------------------------------------------------------*/
  21          void
  22          uip_add32(u8_t *op32, u16_t op16)               //产生一随机序列
  23          {
  24   1        
  25   1        uip_acc32[3] = op32[3] + (op16 & 0xff);
  26   1        uip_acc32[2] = op32[2] + (op16 >> 8);
  27   1        uip_acc32[1] = op32[1];
  28   1        uip_acc32[0] = op32[0];                               //高位
  29   1        
  30   1        if(uip_acc32[2] < (op16 >> 8)) {
  31   2          ++uip_acc32[1];    
  32   2          if(uip_acc32[1] == 0) {
  33   3            ++uip_acc32[0];
  34   3          }
  35   2        }
  36   1        
  37   1        
  38   1        if(uip_acc32[3] < (op16 & 0xff)) {
  39   2          ++uip_acc32[2];  
  40   2          if(uip_acc32[2] == 0) {
  41   3            ++uip_acc32[1];    
  42   3            if(uip_acc32[1] == 0) {
  43   4              ++uip_acc32[0];
  44   4            }
  45   3          }
  46   2        }
  47   1      }
  48          /*-----------------------------------------------------------------------------------*/
  49          u16_t
  50          uip_chksum(u16_t *sdata, u16_t len)                     //
  51          {
  52   1        u16_t acc;
  53   1        
  54   1        for(acc = 0; len > 1; len -= 2) {
  55   2          acc += *sdata;
C51 COMPILER V8.08   UIP_ARCH                                                              08/22/2008 14:32:52 PAGE 2   

  56   2          if(acc < *sdata) {
  57   3            /* Overflow, so we add the carry to acc (i.e., increase by
  58   3               one). */
  59   3            ++acc;
  60   3          }
  61   2          ++sdata;
  62   2        }
  63   1      
  64   1        /* add up any odd byte */
  65   1        if(len == 1) {
  66   2          acc += htons(((u16_t)(*(u8_t *)sdata)) << 8);
  67   2          if(acc < htons(((u16_t)(*(u8_t *)sdata)) << 8)) {
  68   3            ++acc;
  69   3          }
  70   2        }
  71   1      
  72   1        return acc;
  73   1      }
  74          /*-----------------------------------------------------------------------------------*/
  75          u16_t
  76          uip_ipchksum(void)
  77          {                                               //如果用ENC28J60的检验和呢?
  78   1        return uip_chksum((u16_t *)&uip_buf[UIP_LLH_LEN], 20);
  79   1      }
  80          /*-----------------------------------------------------------------------------------*/
  81          u16_t
  82          uip_tcpchksum(void)                                                                             //BUF->len里面放的长度没有加以太网头
  83          {
  84   1        u16_t hsum, sum;
  85   1      
  86   1       
  87   1        /* Compute the checksum of the TCP header. */
  88   1        hsum = uip_chksum((u16_t *)&uip_buf[20 + UIP_LLH_LEN], 20);  //add5
  89   1      
  90   1        /* Compute the checksum of the data in the TCP packet and add it to
  91   1           the TCP header checksum. */
  92   1        sum = uip_chksum((u16_t *)uip_appdata,
  93   1                         (u16_t)(((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 40)));                   //add5
  94   1      
  95   1        if((sum += hsum) < hsum) {
  96   2          ++sum;
  97   2        }
  98   1        
  99   1        if((sum += BUF->srcipaddr[0]) < BUF->srcipaddr[0]) {
 100   2          ++sum;
 101   2        }
 102   1        if((sum += BUF->srcipaddr[1]) < BUF->srcipaddr[1]) {
 103   2          ++sum;
 104   2        }
 105   1        if((sum += BUF->destipaddr[0]) < BUF->destipaddr[0]) {
 106   2          ++sum;
 107   2        }
 108   1        if((sum += BUF->destipaddr[1]) < BUF->destipaddr[1]) {
 109   2          ++sum;
 110   2        }
 111   1        if((sum += (u16_t)htons((u16_t)IP_PROTO_TCP)) < (u16_t)htons((u16_t)IP_PROTO_TCP)) {
 112   2          ++sum;
 113   2        }
 114   1      
 115   1        hsum = (u16_t)htons((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 20);                //减IP头?
 116   1        
 117   1        if((sum += hsum) < hsum) {
C51 COMPILER V8.08   UIP_ARCH                                                              08/22/2008 14:32:52 PAGE 3   

 118   2          ++sum;
 119   2        }
 120   1        
 121   1        return sum;
 122   1      }
 123          /*-----------------------------------------------------------------------------------*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    573    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   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 + -