/*
** ver : 2.52
** file : os_time.c
** brief : 内存管理相关操作 C 文件
*/
#ifndef OS_MASTER_FILE
#include "includes.h"
#endif
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
/*
*******************************************************************************************
* 建立一个内存分区
*
* brief : 创建一大小固定的内存分区
*
* addr : 内存分区的起始地址
*
* nblks : 内存分区的总的内存块数量
*
* blksize : 每个内存块的字节数
*
* err : 错误信息
* Returns : 建立的内存分区的指针
*********************************************************************************************
*/
OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
OS_MEM *pmem;
INT8U *pblk;
void **plink;
INT32U i;
#if OS_ARG_CHK_EN > 0
if (addr == (void *)0) { /* 指针不能为空 */
*err = OS_MEM_INVALID_ADDR;
return ((OS_MEM *)0);
}
if (nblks < 2) { /* 每个分区至少有两个内存块 */
*err = OS_MEM_INVALID_BLKS;
return ((OS_MEM *)0);
}
if (blksize < sizeof(void *)) { /* 内存块大小至少能包含一个指针大小 */
*err = OS_MEM_INVALID_SIZE;
return ((OS_MEM *)0);
}
#endif
OS_ENTER_CRITICAL();
pmem = OSMemFreeList; /* 获取内存控制块 */
if (OSMemFreeList != (OS_MEM *)0) { /* 调整链表 */
OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
}
OS_EXIT_CRITICAL();
if (pmem ==
uC/OS-II源码解析(os_mem.c)
最新推荐文章于 2021-05-27 17:09:09 发布