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

📄 osmemory.lst

📁 MCS-51的一个小型操作系统,在KeilC中大模式下编译工作
💻 LST
字号:
C51 COMPILER V8.02   OSMEMORY                                                              11/05/2004 10:43:36 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE OSMEMORY
OBJECT MODULE PLACED IN OSMemory.OBJ
COMPILER INVOKED BY: D:\C51\BIN\C51.EXE OSMemory.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************
   2                  嵌入式系统 小型操作系统
   3                           作者:汪普宏
   4                      制作日期:2006.9
   5          *********************************************/
   6          /**********************************************
   7          二维数组动态管理
   8          作者:汪普宏
   9          制作日期:2006.10.31
  10          模块功能:动态内存分配函数
  11          模块接口:内存大小
  12          调用者:  任何函数
  13          返回值:   分配的内存地址指针
  14          **********************************************/  
  15          #include "os.h"
  16          #include "OS_Memory.h"
  17          OS_MEM xdata mem[ALL/NUM];
  18          uchar xdata memory[ALL/NUM][NUM];
  19          /****************************************
  20          函数功能:初始化数组内存
  21          调用者:初始化函数
  22          返回值:  无
  23          *****************************************/
  24          
  25          void OSInit_Malloc(void)
  26          {
  27   1       U16 i;
  28   1       for(i=0;i<ALL/NUM;i++)
  29   1       {
  30   2               mem[i].bef=&mem[i-1];
  31   2           mem[i].status=FREE;         //内存状态为未分配
  32   2               mem[i].size=ALL/NUM-i;  //空闲内存长度
  33   2       }
  34   1       mem[0].bef=NULL;
  35   1       mem[ALL/NUM].bef=NULL;
  36   1      }
  37          /****************************************
  38          函数功能:分配内存
  39          调用者:任务函数
  40          入口参数:需要的内存字节长度
  41          返回值:  成功时为数组首地址,否则为-1
  42          *****************************************/
  43          int OSMalloc(U16 lenth)
  44          {
  45   1       OS_MEM xdata *p;
  46   1       U16 num,i,temp;
  47   1       num=lenth/NUM;
  48   1       if(lenth%NUM)
  49   1       {
  50   2                 num++;     //需要的内存块的个数
  51   2       }
  52   1       for(i=temp=0;i<ALL/NUM;)
  53   1       {
  54   2                 p=&mem[i];   
  55   2                 if(num>ALL/NUM-i)   //需要的个数大于空闲内存总数
C51 COMPILER V8.02   OSMEMORY                                                              11/05/2004 10:43:36 PAGE 2   

  56   2                 {
  57   3                              return ERR;
  58   3                 }
  59   2                 if(p->status==FREE&&p->size>=num)    
  60   2                 {
  61   3                          (p+temp)->size=p->size-num; 
  62   3                              p->size=num;
  63   3                              p->bef=&mem[temp];
  64   3                              p->status=FULL;
  65   3                              return  i;        //返回合适的空闲内存首地址
  66   3                 } 
  67   2                temp=i;
  68   2                i+=p->size;
  69   2       }
  70   1       return ERR;   
  71   1      }
  72          /****************************************
  73          函数功能:释放内存
  74          调用者:任务函数
  75          入口参数:释放的数组内存首地址
  76          *****************************************/
  77          uchar OSMem_Free(L16 i)            //回收需要释放的内存
  78          {
  79   1       U16 temp;
  80   1       U16 num=mem[i].size;
  81   1       if(mem[i].status==FULL)
  82   1       {
  83   2                if(mem[i+num].status==FREE)
  84   2                {
  85   3                         mem[i].size+=mem[i+num].size;  //将该释放的内存与其后面连续的内存合并
  86   3                         mem[i+num].bef=mem[i].bef;
  87   3                }
  88   2                if(mem[i].bef->status==FREE)
  89   2                {
  90   3                         mem[i].status=FREE;                  //将该处控制块改为空闲状态
  91   3                         if(i>0)
  92   3                         {
  93   4                             temp=mem[i].size;
  94   4                                 while(i>=0&&mem[i].bef->status==FREE)
  95   4                             {
  96   5                                   mem[i].bef->size+=temp; //将该释放的内存与其前面连续的内存合并
  97   5                                               mem[i].bef=mem[i].bef->bef;
  98   5                                               i-=mem[i].bef->size;
  99   5                                 }
 100   4                         return OK;
 101   4                         }
 102   3            }
 103   2                mem[i].status=FREE;                   //将该处控制块改为空闲状态
 104   2                return OK;
 105   2       }
 106   1       else 
 107   1       { 
 108   2            return NULL; 
 109   2       }       
 110   1      }
 111          
 112          
 113          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    840    ----
C51 COMPILER V8.02   OSMEMORY                                                              11/05/2004 10:43:36 PAGE 3   

   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   3700    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       8
   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 + -