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

📄 tcpipmem.lst.svn-base

📁 数字广播系统的开发源码
💻 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 + -