📄 dmce.c
字号:
/* resulting in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* *//*************************************************************************/STATUS DMCE_Delete_Memory_Pool(NU_MEMORY_POOL *pool_ptr){DM_PCB *pool; /* Pool control block ptr */STATUS status; /* Completion status */ /* Move input pool pointer into internal pointer. */ pool = (DM_PCB *) pool_ptr; /* Determine if the dynamic memory pool pointer is valid. */ if ((pool) && (pool -> dm_id == DM_DYNAMIC_ID)) /* Dynamic memory pool pointer is valid, call the function to delete it. */ status = DMC_Delete_Memory_Pool(pool_ptr); else /* Dynamic memory pool pointer is invalid, indicate in completion status. */ status = NU_INVALID_POOL; /* Return completion status. */ return(status);}/*************************************************************************//* *//* FUNCTION *//* *//* DMCE_Allocate_Memory *//* *//* DESCRIPTION *//* *//* This function performs error checking on the parameters supplied *//* to the allocate memory function. *//* *//* CALLED BY *//* *//* Application *//* *//* CALLS *//* *//* DMC_Allocate_Memory Actual memory allocation *//* function *//* TCCE_Suspend_Error Check for suspension error *//* *//* INPUTS *//* *//* pool_ptr Memory pool pointer *//* return_pointer Pointer to the destination *//* memory pointer *//* size Number of bytes requested *//* suspend Suspension option if full *//* *//* OUTPUTS *//* *//* NU_INVALID_POOL Indicates the supplied pool *//* pointer is invalid *//* NU_INVALID_POINTER Indicates the return pointer *//* is NULL *//* NU_INVALID_SIZE Indicates the size is 0 or *//* larger than the pool *//* NU_INVALID_SUSPEND Invalid suspension requested *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* 03-01-1994 Modified function interface , *//* resulting in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* *//*************************************************************************/STATUS DMCE_Allocate_Memory(NU_MEMORY_POOL *pool_ptr, VOID **return_pointer, UNSIGNED size, UNSIGNED suspend){DM_PCB *pool; /* Pool control block ptr */STATUS status; /* Completion status */ /* Move input pool pointer into internal pointer. */ pool = (DM_PCB *) pool_ptr; /* Determine if dynamic memory pool pointer is invalid. */ if (pool == NU_NULL) /* Dynamic memory pool pointer is invalid, indicate in completion status. */ status = NU_INVALID_POOL; else if (pool -> dm_id != DM_DYNAMIC_ID) /* Dynamic memory pool pointer is invalid, indicate in completion status. */ status = NU_INVALID_POOL; else if (return_pointer == NU_NULL) /* Return pointer is invalid. */ status = NU_INVALID_POINTER; else if ((size == 0) || (size > (pool -> dm_pool_size - (2 * DM_OVERHEAD)))) /* Return the invalid size error. */ status = NU_INVALID_SIZE; else if ((suspend) && (TCCE_Suspend_Error())) /* Suspension from an non-task thread. */ status = NU_INVALID_SUSPEND; else /* Parameters are valid, call actual function. */ status = DMC_Allocate_Memory(pool_ptr, return_pointer, size, suspend); /* Return the completion status. */ return(status);}/*************************************************************************//* *//* FUNCTION *//* *//* DMCE_Deallocate_Memory *//* *//* DESCRIPTION *//* *//* This function performs error checking on the parameters supplied *//* to the deallocate memory function. *//* *//* CALLED BY *//* *//* Application *//* *//* CALLS *//* *//* DMC_Deallocate_Memory Actual deallocate memory *//* function *//* *//* INPUTS *//* *//* memory Pointer to dynamic memory *//* *//* OUTPUTS *//* *//* NU_INVALID_POINTER Indicates the supplied *//* pointer is invalid *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* 03-01-1994 Modified function interface, *//* resulting in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* *//*************************************************************************/STATUS DMCE_Deallocate_Memory(VOID *memory){DM_PCB *pool; /* Pool pointer */DM_HEADER *header_ptr; /* Pointer to memory block */STATUS status; /* Completion status */ /* Pickup the associated pool's pointer. It is inside the header of each memory block. */ header_ptr = (DM_HEADER *) (((BYTE_PTR) memory) - DM_OVERHEAD); /* Determine if the pointer(s) are NULL. */ if ((header_ptr == NU_NULL) || (memory == NU_NULL)) /* Dynamic memory pointer is invalid. */ status = NU_INVALID_POINTER; /* Determine if dynamic memory pool pointer is invalid. */ else if ((pool = header_ptr -> dm_memory_pool) == NU_NULL) /* Dynamic memory pointer is invalid, indicate in completion status. */ status = NU_INVALID_POINTER; else if (pool -> dm_id != DM_DYNAMIC_ID) /* Dynamic memory pool pointer is invalid, indicate in completion status. */ status = NU_INVALID_POINTER; else if (header_ptr -> dm_memory_free) /* Dynamic memory is free - must not be allocated. */ status = NU_INVALID_POINTER; else /* Parameters are valid, call actual function. */ status = DMC_Deallocate_Memory(memory); /* Return the completion status. */ return(status);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -