📄 uip_arch.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 + -