📄 tcpipmem.lst.svn-base
字号:
C51 COMPILER V7.06 TCPIPMEM 07/24/2007 16:32:53 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TCPIPMEM
OBJECT MODULE PLACED IN E:\NETBRO~1\TRUNK\NETBRO~1\VW\TCPIPMEM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\NETBRO~1\TRUNK\NETBRO~1\VW\TCPIPMEM.C DB SB OE
stmt level source
1 /*
2 */
3 #include "config.h"
4 #include "GloblDef.h"
5 #include "TCPIPmem.h"
6
7 /* buf for all tcpip packet */
8 static unsigned char xdata TCPIPBuf[TCPIP_BUF_SIZE];
9 static struct SMemHead xdata* xdata MemHeadEnd; /* end of the chain */
10 static struct SMemHead xdata* xdata MemHeadStart;
11
12 static unsigned int xdata FreeSize; /* free memsize can use */
13
14 void MemInit() reentrant
15 {
16 1 MemHeadEnd = (struct SMemHead xdata*)(TCPIPBuf + TCPIP_BUF_SIZE);
17 1 MemHeadStart = (struct SMemHead xdata*)TCPIPBuf;
18 1
19 1 /* at inital there is only a buf block. value in
20 1 mem head is as following */
21 1 MemHeadStart->pNext = MemHeadEnd;
22 1 MemHeadStart->pPre = MemHeadStart;
23 1 MemHeadStart->used = FALSE;
24 1
25 1 FreeSize = TCPIP_BUF_SIZE - sizeof(struct SMemHead);
26 1 }
27
28 /* allocate a buffer size of size, and set pStart to the start of buffer,pEnd
29 to end of buffer.Also decrease FreeSize. */
30 struct SMemHead xdata * MemAllocate(unsigned int size) reentrant
31 {
32 1 struct SMemHead xdata *MemHead;
33 1 struct SMemHead xdata *NewMemHead;
34 1 unsigned int MemPlayloadSize;
35 1
36 1 /* search though the mem blocks */
37 1 for(MemHead = MemHeadStart; MemHead != MemHeadEnd; MemHead = MemHead->pNext)
38 1 {
39 2 /* if unused and mem playload size > size, select it. */
40 2 if(MemHead->used == FALSE &&
41 2 (MemPlayloadSize = (unsigned char xdata*)(MemHead->pNext) - (unsigned char xdata*)MemHead - sizeof(stru
-ct SMemHead)) >= size)
42 2 {
43 3 /* if MemPalyloadSize - size > sizeof(struct SMemHead) create
44 3 a new SMemHead at the excess memory leaving for later usage */
45 3 if(MemPlayloadSize - size > sizeof(struct SMemHead))
46 3 {
47 4 NewMemHead = (struct SMemHead xdata*)((unsigned char xdata*)MemHead + sizeof(struct SMemHead)+ size );
48 4
49 4 /* link into link chain */
50 4 NewMemHead->pNext = MemHead->pNext;
51 4 MemHead->pNext = NewMemHead;
52 4 NewMemHead->pPre = MemHead;
53 4 if(NewMemHead->pNext != MemHeadEnd)
54 4 {
C51 COMPILER V7.06 TCPIPMEM 07/24/2007 16:32:53 PAGE 2
55 5 NewMemHead->pNext->pPre = NewMemHead;
56 5 }
57 4
58 4 /* set new mem as unused */
59 4 NewMemHead->used = FALSE;
60 4
61 4 /* decrease FreeSize: playload of MemHead and the head of NewMemHead */
62 4 FreeSize -= (unsigned char xdata*)(MemHead->pNext) - (unsigned char xdata*)MemHead;
63 4 }
64 3 else
65 3 {
66 4 /* decrease: playload of MemHead */
67 4 FreeSize -= (unsigned char xdata*)(MemHead->pNext) - (unsigned char xdata*)MemHead - sizeof(struct SMe
-mHead);
68 4 }
69 3
70 3
71 3 /* set pStart */
72 3 MemHead->pStart = (unsigned char xdata*)MemHead + sizeof(struct SMemHead);
73 3
74 3 MemHead->pEnd = MemHead->pStart + size;
75 3
76 3 /* set as used */
77 3 MemHead->used = TRUE;
78 3
79 3 return MemHead;
80 3 }
81 2 }
82 1 return NULL;
83 1 }
84
85 void MemFree(struct SMemHead xdata* MemHead) reentrant
86 {
87 1 struct SMemHead xdata* MemHeadMergePre;
88 1 struct SMemHead xdata* MemHeadMergeNext;
89 1
90 1 /* set used flag to false */
91 1 MemHead->used = FALSE;
92 1
93 1 /* inc FreeSize the size of playload of 'MemHead'*/
94 1 FreeSize += (unsigned char xdata*)(MemHead->pNext) - (unsigned char xdata*)MemHead - sizeof(struct SMemHe
-ad);
95 1
96 1 /*
97 1 * if pNext or pPre is a unused memblock, merge with it
98 1 */
99 1
100 1 /* find the two MemHead going to merge */
101 1 if(MemHead->pPre->used == FALSE)
102 1 {
103 2 MemHeadMergePre = MemHead->pPre; /* note: if MemHead == TCPBuf, MemHead->pPre == MemHead, but it is not
-a problom */
104 2 }
105 1 else
106 1 {
107 2 MemHeadMergePre = MemHead;
108 2 }
109 1 if(MemHead->pNext != MemHeadEnd && MemHead->pNext->used == FALSE)
110 1 {
111 2 MemHeadMergeNext = MemHead->pNext;
112 2
113 2 /* MemHead of 'MemHead->pNext' will be free. Free size inc*/
C51 COMPILER V7.06 TCPIPMEM 07/24/2007 16:32:53 PAGE 3
114 2 FreeSize += sizeof(struct SMemHead);
115 2 }
116 1 else
117 1 {
118 2 MemHeadMergeNext = MemHead;
119 2 }
120 1
121 1 /* merge is necessary? */
122 1 if(MemHeadMergePre != MemHeadMergeNext)
123 1 {
124 2 /* merge. that is del MemHeadMergeNext from the chain */
125 2 MemHeadMergePre->pNext = MemHeadMergeNext->pNext;
126 2 if(MemHeadMergeNext->pNext != MemHeadEnd)
127 2 MemHeadMergeNext->pNext->pPre = MemHeadMergePre;
128 2
129 2 /* will MemHead of 'MemHead' will be free? */
130 2 if(MemHead != MemHeadMergePre)
131 2 FreeSize += sizeof(struct SMemHead);
132 2
133 2 }
134 1 }
135
136 unsigned int MemFreeSize() reentrant
137 {
138 1 return FreeSize;
139 1 }
140
141
142
143
144
145
C51 COMPILER V7.06 TCPIPMEM 07/24/2007 16:32:53 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
DWORD. . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
TCPIPBuf . . . . . . . . . . . . . . . STATIC XDATA ARRAY 0000H 8192
FreeSize . . . . . . . . . . . . . . . STATIC XDATA U_INT 2000H 2
MemHeadStart . . . . . . . . . . . . . STATIC XDATA PTR 2002H 2
BOOL . . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
MemHeadEnd . . . . . . . . . . . . . . STATIC XDATA PTR 2004H 2
BYTE . . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
WORD . . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
_?MemFree. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
MemHead. . . . . . . . . . . . . . . AUTO IDATA PTR 0004H 2
MemHeadMergePre. . . . . . . . . . . AUTO IDATA PTR 0000H 2
MemHeadMergeNext . . . . . . . . . . AUTO IDATA PTR 0002H 2
_?MemInit. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_?MemFreeSize. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
SMemHead . . . . . . . . . . . . . . . * TAG * ----- STRUCT ----- 9
pNext. . . . . . . . . . . . . . . . MEMBER ----- PTR 0000H 2
pPre . . . . . . . . . . . . . . . . MEMBER ----- PTR 0002H 2
used . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0004H 1
pStart . . . . . . . . . . . . . . . MEMBER ----- PTR 0005H 2
pEnd . . . . . . . . . . . . . . . . MEMBER ----- PTR 0007H 2
_?MemAllocate. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
size . . . . . . . . . . . . . . . . AUTO IDATA U_INT 0006H 2
MemHead. . . . . . . . . . . . . . . AUTO IDATA PTR 0000H 2
NewMemHead . . . . . . . . . . . . . AUTO IDATA PTR 0002H 2
MemPlayloadSize. . . . . . . . . . . AUTO IDATA U_INT 0004H 2
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 948 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 8198 ----
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 + -