Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Frees a memory block back to memory pool.

Files

lib_mem.h/lib_mem.c

Prototype

          void  Mem_PoolBlkFree (MEM_POOL  *pmem_pool,
                                 void      *pmem_blk,
                                 LIB_ERR   *perr);

Arguments

pmem_pool

Pointer to memory pool to free memory block to.

pmem_blk

Pointer to memory block address to free.

perr

Pointer to variable that will receive the return error code from this function:

LIB_MEM_ERR_NONE
LIB_MEM_ERR_NULL_PTR
LIB_MEM_ERR_POOL_FULL
LIB_MEM_ERR_INVALID_POOL
LIB_MEM_ERR_INVALID_BLK_ADDR
LIB_MEM_ERR_INVALID_BLK_ADDR_IN_POOL

Returned Value

None.

Required Configuration

Available only if LIB_MEM_CFG_ALLOC_EN is DEF_ENABLED in lib_cfg.h (see section 4-4).

Notes / Warnings

None.

Example Usage

MEM_POOL     AppMemPool;
CPU_SIZE_T   octets_reqd;
void        *pmem_blk;
LIB_ERR      err;


Mem_PoolCreate((MEM_POOL       *)&AppMemPool,
             (void           *)  0,              /* Create pool from heap   ...                    */
             (CPU_SIZE_T      )  0u,
             (MEM_POOL_BLK_QTY) 10u,             /* ... with 10 blocks      ...                    */
             (CPU_SIZE_T      )100u,             /* ... of  100 octets each ...                    */
             (CPU_SIZE_T      )  4u,             /* ... and align each block to a 4-byte boundary. */
             (CPU_SIZE_T     *)&octets_reqd,
             (LIB_ERR        *)&err);

if (err != LIB_ERR_NONE) {
  printf("COULD NOT CREATE MEMORY POOL.");
  if (err == LIB_MEM_ERR_HEAP_EMPTY) {
      printf("Heap empty   ... %u more octets needed.", octets_reqd);
  }
    return;
}

                                                 /* Get an 80-byte memory block from the pool.     */
pmem_blk = Mem_PoolBlkGet(&AppMemPool, 80u, &err);
if (err != LIB_ERR_NONE) {
  printf("COULD NOT GET MEMORY BLOCK FROM MEMORY POOL.");
    return;
}
                                                 /* Free   80-byte memory block back to  pool.     */
Mem_PoolBlkFree(&AppMemPool, pmem_blk, &err);
if (err != LIB_ERR_NONE) {
    printf("COULD NOT FREE MEMORY BLOCK TO MEMORY POOL.");
    return;
}
  • No labels