uCOSII实时操作系统内核源代码注释.docx

上传人:b****2 文档编号:2750634 上传时间:2023-05-04 格式:DOCX 页数:17 大小:21.12KB
下载 相关 举报
uCOSII实时操作系统内核源代码注释.docx_第1页
第1页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第2页
第2页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第3页
第3页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第4页
第4页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第5页
第5页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第6页
第6页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第7页
第7页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第8页
第8页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第9页
第9页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第10页
第10页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第11页
第11页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第12页
第12页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第13页
第13页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第14页
第14页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第15页
第15页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第16页
第16页 / 共17页
uCOSII实时操作系统内核源代码注释.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

uCOSII实时操作系统内核源代码注释.docx

《uCOSII实时操作系统内核源代码注释.docx》由会员分享,可在线阅读,更多相关《uCOSII实时操作系统内核源代码注释.docx(17页珍藏版)》请在冰点文库上搜索。

uCOSII实时操作系统内核源代码注释.docx

uCOSII实时操作系统内核源代码注释

/*

*********************************************************************************************************

*                                               uC/OS-II

*                                             实时操作内核

*                                               内存管理

*

*                         (c)版权1992-2002,JeanJ.Labrosse,Weston,FL

*                                          AllRightsReserved

*

*文件名:

OS_MEM.C

*作者  :

JeanJ.Labrosse

*注释  :

彭森2007/9/2

*********************************************************************************************************

*/

#ifndef OS_MASTER_FILE

#include"includes.h"

#endif

#if(OS_MEM_EN>0)&&(OS_MAX_MEM_PART>0)

/*

*********************************************************************************************************

*                                       创建一个内存分区

*

*说明       :

创建一个固定大小的内存分区,这个内存分区通过uC/OS-II管理。

*

*参数       :

addr    内存分区的起始地址

*

*              nblks   来自分区的内存块的数目.

*

*              blksize 每个内存分区中的内存块的大小.

*

*              err     指向一个变量包含错误的信息,这个信息通过这个函数或其他来设置:

*

*                       OS_NO_ERR           内存分区创建正确返回值.

*                       OS_MEM_INVALID_ADDR 指定的是无效地址作为分区的内存存储空间

*                       OS_MEM_INVALID_PART 没有未使用的有用的分区

*                       OS_MEM_INVALID_BLKS 使用者指定一个无效的内存块(必须>=2)

*                       OS_MEM_INVALID_SIZE 使用者指定一个无效的内存空间值

*                                            (必须大于指针的空间大小)

*返回值    :

!

=(OS_MEM*)0 分区被创建

*             ==(OS_MEM*)0 分区没有被创建由于无效的参数,没有未使用的分区可用

*********************************************************************************************************

*/

OS_MEM *OSMemCreate(void*addr,INT32Unblks,INT32Ublksize,INT8U*err)

{

#ifOS_CRITICAL_METHOD==3                          /*AllocatestorageforCPUstatusregister为CPU状态寄存器分配存储空间    */

   OS_CPU_SR cpu_sr;

#endif   

   OS_MEM   *pmem;

   INT8U    *pblk;

   void    **plink;

   INT32U    i;

#ifOS_ARG_CHK_EN>0

   if(addr==(void*)0){                         /*Mustpassavalidaddressforthememorypart.必须是一个有效的内存部分*/

       *err=OS_MEM_INVALID_ADDR;

       return((OS_MEM*)0);

   }

   if(nblks<2){                                 /*Musthaveatleast2blocksperpartition     每个分区至少有两个分区*/

       *err=OS_MEM_INVALID_BLKS;

       return((OS_MEM*)0);

   }

   if(blksize

       *err=OS_MEM_INVALID_SIZE;

       return((OS_MEM*)0);

   }

#endif

   OS_ENTER_CRITICAL();

   pmem=OSMemFreeList;                            /*Getnextfreememorypartition                得到下一个未使用的内存分区*/

   if(OSMemFreeList!

=(OS_MEM*)0){              /*Seeifpooloffreepartitionswasempty      查看是否有未使用的分区空间是空的*/

       OSMemFreeList=(OS_MEM*)OSMemFreeList->OSMemFreeList;

   }

   OS_EXIT_CRITICAL();

   if(pmem==(OS_MEM*)0){                       /*Seeifwehaveamemorypartition             查看是否我们有一个内存分区*/

       *err=OS_MEM_INVALID_PART;

       return((OS_MEM*)0);

   }

   plink=(void**)addr;                           /*Createlinkedlistoffreememoryblocks      创建未使用的内存块的可连接的列表*/

   pblk =(INT8U*)addr+blksize;

   for(i=0;i<(nblks-1);i++){

       *plink=(void*)pblk;

       plink =(void**)pblk;

       pblk  =pblk+blksize;

   }

   *plink             =(void*)0;                 /*LastmemoryblockpointstoNULL              最后的内存块指针指向NULL*/

   pmem->OSMemAddr    =addr;                      /*Storestartaddressofmemorypartition       保存内存分区的起始地址*/

   pmem->OSMemFreeList=addr;                      /*Initializepointertopooloffreeblocks     为未使用的内存块初始化指针*/

   pmem->OSMemNFree   =nblks;                     /*StorenumberoffreeblocksinMCB            在内存控制块中保存许多未使用的内存块*/

   pmem->OSMemNBlks   =nblks;

   pmem->OSMemBlkSize =blksize;                   /*Storeblocksizeofeachmemoryblocks        保存每个内存块的块大小*/

   *err               =OS_NO_ERR;

   return(pmem);

}

/*$PAGE*/

/*

*********************************************************************************************************

*                                         得到一个内存控制块

*

*说明       :

从分区中得到一个内存块

*

*参数       :

pmem   指针指向一个内存分区控制块

*

*              err    指向一个变量包含一个错误信息,这个错误信息通过这个函数或其他来设计

*

*                      OS_NO_ERR          假如内存分区被正确的创建.

*                      OS_MEM_NO_FREE_BLKS假如没有更多的内存块被分配给调用者

*                      OS_MEM_INVALID_PMEM假如已经为'pmem'通过一个空指针

*

*返回值    :

一个指针指向一个内存控制块,假如没有察觉错误

*             一个指针指向空指针,假如有错误被察觉到

*********************************************************************************************************

*/

void *OSMemGet(OS_MEM*pmem,INT8U*err)

{

#ifOS_CRITICAL_METHOD==3                          /*AllocatestorageforCPUstatusregister   为CPU状态寄存器分配存储空间 */

   OS_CPU_SR cpu_sr;

#endif   

   void     *pblk;

#ifOS_ARG_CHK_EN>0

   if(pmem==(OS_MEM*)0){                       /*Mustpointtoavalidmemorypartition       必须指向一个有效的内存分区 */

       *err=OS_MEM_INVALID_PMEM;

       return((OS_MEM*)0);

   }

#endif

   OS_ENTER_CRITICAL();

   if(pmem->OSMemNFree>0){                      /*Seeifthereareanyfreememoryblocks      查看是否有其他未使用的内存块*/

       pblk               =pmem->OSMemFreeList;   /*Yes,pointtonextfreememoryblock         是的,指针指向下一个未使用的内存块*/

       pmem->OSMemFreeList=*(void**)pblk;        /*     Adjustpointertonewfreelist         调整指针指向一个新的未使用的空间列表*/

       pmem->OSMemNFree--;                          /*     Onelessmemoryblockinthispartition 在这个分区中减少一个内存块*/

       OS_EXIT_CRITICAL();

       *err=OS_NO_ERR;                            /*     Noerror                                没有错误*/

       return(pblk);                               /*     Returnmemoryblocktocaller           返回内存控制块给调用者*/

   }

   OS_EXIT_CRITICAL();

   *err=OS_MEM_NO_FREE_BLKS;                      /*No, Notifycallerofemptymemorypartition 告知调用者是空的内存分区*/

   return((void*)0);                              /*     ReturnNULLpointertocaller           返回NULL个调用者*/

}

/*$PAGE*/

/*

*********************************************************************************************************

*                                        释放一个内存块

*

*说明       :

返回一个内存块给分区

*

*参数       :

pmem   指针指向内存分区控制块

*

*              pblk   指针指向被保留的内存块.

*

*返回值     :

OS_NO_ERR           假如内存块是被插入的分区

*              OS_MEM_FULL         假如返回一个已经全部内存分区的内存块

*                                   (你释放了更多你分配的内存块!

*              OS_MEM_INVALID_PMEM 假如指针'pmem'指向NULL。

*              OS_MEM_INVALID_PBLK 假如指向释放的内存块为空.

*********************************************************************************************************

*/

INT8U OSMemPut(OS_MEM *pmem,void*pblk)

{

#ifOS_CRITICAL_METHOD==3                     /*AllocatestorageforCPUstatusregister      为CPU状态寄存器分配存储空间   */

   OS_CPU_SR cpu_sr;

#endif   

   

   

#ifOS_ARG_CHK_EN>0

   if(pmem==(OS_MEM*)0){                  /*Mustpointtoavalidmemorypartition        必须指向一个有效的内存分区     */

       return(OS_MEM_INVALID_PMEM);

   }

   if(pblk==(void*)0){                    /*Mustreleaseavalidblock                    必须保留一个有效的内存块   */

       return(OS_MEM_INVALID_PBLK);

   }

#endif

   OS_ENTER_CRITICAL();

   if(pmem->OSMemNFree>=pmem->OSMemNBlks){ /*Makesureallblocksnotalreadyreturned     确认所有的内存块没有已经返回   */

       OS_EXIT_CRITICAL();

       return(OS_MEM_FULL);

   }

   *(void**)pblk     =pmem->OSMemFreeList;  /*Insertreleasedblockintofreeblocklist    将释放的内存块插入未使用的内存块表  */

   pmem->OSMemFreeList=pblk;

   pmem->OSMemNFree++;                         /*Onemorememoryblockinthispartition       在分区中增加一个内存块   */

   OS_EXIT_CRITICAL();

   return(OS_NO_ERR);                         /*Notifycallerthatmemoryblockwasreleased  告知调用者内存块被释放   */

}

/*$PAGE*/

/*

*********************************************************************************************************

*                                         查询内存分区

*

*说明:

          这个函数被使用来查询在内存分区中已经使用的内存块数及尚未使用的内存数

*              

*

*参数  :

pmem   指针指向一个内存分区控制块

*

*         pdata  指针指向一个结构体,该结构体包含关于内存分区的信息

*

*返回值     :

OS_NO_ERR           假如没有错误发生.

*              OS_MEM_INVALID_PMEM 假如指针'pmem'指向NULL。

*              OS_MEM_INVALID_PDATA假如指向释放的内存块为空.

*********************************************************************************************************

*/

#ifOS_MEM_QUERY_EN>0

INT8U OSMemQuery(OS_MEM*pmem,OS_MEM_DATA*pdata)

{

#ifOS_CRITICAL_METHOD==3                     /*AllocatestorageforCPUstatusregister     为CPU状态寄存器分配存储空间    */

   OS_CPU_SR cpu_sr;

#endif   

   

   

#ifOS_ARG_CHK_EN>0

   if(pmem==(OS_MEM*)0){                  /*Mustpointtoavalidmemorypartition       必须指向一个有效的内存分区    */

       return(OS_MEM_INVALID_PMEM);

   }

   if(pdata==(OS_MEM_DATA*)0){            /*Mustreleaseavalidstorageareaforthedata  为这些数据必须释放一个有效的存储区域 */

       return(OS_MEM_INVALID_PDATA);

   }

#endif

   OS_ENTER_CRITICAL();

   pdata->OSAddr    =pmem->OSMemAddr;

   pdata->OSFreeList=pmem->OSMemFreeList;

   pdata->OSBlkSize =pmem->OSMemBlkSize;

   pdata->OSNBlks   =pmem->OSMemNBlks;

   pdata->OSNFree   =pmem->OSMemNFree;

   OS_EXIT_CRITICAL();

   pdata->OSNUsed   =pdata->OSNBlks-pdata->OSNFree;

   return(OS_NO_ERR);

}

#endif                                          /*OS_MEM_QUERY_EN                                   */

/*$PAGE*/

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2