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

📄 os_mem.lst

📁 keil开发环境
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.10   OS_MEM                                                                07/02/2005 23:47:36 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE OS_MEM
OBJECT MODULE PLACED IN .\OS_MEM.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\OS\OS_MEM.C BROWSE PRINT(.\OS_MEM.lst) OBJECT(.\OS_MEM.obj)

line level    source

   1          /*********************************************************************************************************
   2          **                                                             Small RTOS(51)
   3          **                                   The Real-Time Kernel(For Keil c51)
   4          **
   5          **                                  (c) Copyright 2002-2003, chenmingji
   6          **                                           All Rights Reserved
   7          **
   8          **                                                  V1.20.0
   9          **
  10          **
  11          **--------------文件信息--------------------------------------------------------------------------------
  12          **文   件   名: OS_mem.c
  13          **创   建   人: 陈明计
  14          **最后修改日期:  2003年8月3日
  15          **描      述: 内存动态分配模块,可以在非Small RTOS(51)下使用。在Small RTOS(51)
  16          **             下必须配置为支持重入栈。
  17          **--------------历史版本信息----------------------------------------------------------------------------
  18          ** 创建人: 陈明计
  19          ** 版  本: V1.20.0
  20          ** 日 期: 2003年8月3日
  21          ** 描 述: 原始版本
  22          **
  23          **------------------------------------------------------------------------------------------------------
  24          **--------------当前版本修订------------------------------------------------------------------------------
  25          ** 修改人: 
  26          ** 日 期:
  27          ** 描 述:
  28          **
  29          **------------------------------------------------------------------------------------------------------
  30          ********************************************************************************************************/
  31          #define IN_OS_MEM
  32          #include "config.h"
  33          
  34          #ifndef EN_OS_MEM
              #define EN_OS_MEM       0
              #endif
  37          
  38          #if EN_OS_MEM > 0
              static struct _FreeMem xdata *OSFreeMem;                /* 自由内存块的双向链表的头 */
              
              
              /*********************************************************************************************************
              ** 函数名称: UserMemChkErr
              ** 功能描述: 内存回收时出错处理函数,将EN_UserMemChkErr定义为1时,用户可以自己定义这个函数。
              ** 输 入: Addr: 应当回收的内存块
              ** 输 出: 无
              ** 全局变量: 无
              ** 调用模块: 无
              **
              ** 作 者: 陈明计
              ** 日 期: 2003年8月3日
              **-------------------------------------------------------------------------------------------------------
              ** 修改人:
              ** 日 期:
              **------------------------------------------------------------------------------------------------------
C51 COMPILER V7.10   OS_MEM                                                                07/02/2005 23:47:36 PAGE 2   

              ********************************************************************************************************/
              #if EN_OS_MEM_CHK > 0 && EN_UserMemChkErr == 0
                      void UserMemChkErr(void xdata *Addr) reentrant
              {
                  Addr = Addr;
                  while (1);
              }
              #endif
              
              /*********************************************************************************************************
              ** 函数名称: OSMemInit
              ** 功能描述: 初始化动态内存分配模块。
              ** 输 入: Addr: 指向空闲空间起始位置的指针
              **        MemSize: 空闲空间的大小 
              ** 输 出: TRUE: 成功
              **        FALSE: 失败
              ** 全局变量: 无
              ** 调用模块: 无
              **
              ** 作 者: 陈明计
              ** 日 期: 2003年8月3日
              **-------------------------------------------------------------------------------------------------------
              ** 修改人:
              ** 日 期:
              **------------------------------------------------------------------------------------------------------
              ********************************************************************************************************/
                      uint8 OSMemInit(void xdata *Addr, unsigned int MemSize)
              {
                  struct _FreeMem xdata *MemFree;
                  
                  MemSize = MemSize & ~(sizeof(int) - 1);     /* 内存按照字(word)为单位分配 */
                                                              /* 调整MemSize为字(word)的整数倍 */
              
                  /* 判断自由空间是否有效 */
                  if (Addr != NULL && MemSize > sizeof(struct _UsingMem))
                  {
                      /* 建立只有一个节点的双向队列 */
                      OS_ENTER_CRITICAL();
                      MemFree = (struct _FreeMem xdata *)Addr;
                      OSFreeMem = MemFree;
                      MemFree->Size = MemSize;
                      MemFree->Next = NULL;
                      MemFree->Last = NULL;
                      OS_EXIT_CRITICAL();
                      return TRUE;
                  }
                  else
                  {
                      return FALSE;
                  }
              }
              
              /*********************************************************************************************************
              ** 函数名称: OSMemNew
              ** 功能描述: 分配内存。
              ** 输 入: Size: 所需内存的大小
              ** 输 出: 指向已分配的内存开始的地址的指针,NULL为失败。
              ** 全局变量: 无
              ** 调用模块: 无
              **
              ** 作 者: 陈明计
              ** 日 期: 2003年8月3日
C51 COMPILER V7.10   OS_MEM                                                                07/02/2005 23:47:36 PAGE 3   

              **-------------------------------------------------------------------------------------------------------
              ** 修改人:
              ** 日 期:
              **------------------------------------------------------------------------------------------------------
              ********************************************************************************************************/
                      void xdata *OSMemNew(unsigned int Size) reentrant
              {
                  struct _FreeMem xdata *ThisFreeMem;
                  struct _UsingMem xdata *Rt;
                  
                  OS_ENTER_CRITICAL();
                  ThisFreeMem = OSFreeMem;
                  
                  /* 调整应当分配的大小(必须为字(word))的整数倍,且要加入分配给头的空间 */
                  Size = ((Size + sizeof(int) - 1) & ~(sizeof(int) - 1)) + 
                         sizeof(struct _UsingMem);
                  
                  /* 查找足够大的自由内存块 */
                  while(ThisFreeMem != NULL)
                  {
                      if ((ThisFreeMem->Size) >= Size)
                      {
                          break;
                      }
                      ThisFreeMem = ThisFreeMem->Next;
                  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -