Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
void  *OSMemGet (OS_MEM  *p_mem,
                 OS_ERR  *p_err)

File

Called from

Code enabled by

os_mem.c

Task or ISR

OS_CFG_MEM_EN

...

Description

Obtains a memory block from a memory partition. It is assumed that the application knows the size of each memory block obtained. Also, the application must return the memory block [using OSMemPut()] to the same memory partition when it no longer requires it. OSMemGet() may be called more than once until all memory blocks are allocated.

Files

os.h/os_mem.c

Prototype

Code Block
void  *OSMemGet (OS_MEM  *p_mem,
                 OS_ERR  *p_err)

Arguments

p_mem

is a pointer to the desired memory partition control block.

...

is a pointer to a variable that holds an error code:

OS_ERR_NONEif

If a memory block is available and returned to the application.

OS_ERR_MEM_INVALID_P_MEMif

If OS_CFG_ARG_CHK_EN is set to

...

DEF_ENABLED in os_cfg.h: if p_mem is a NULL pointer.

OS_ERR_MEM_NO_FREE_BLKSif

If the memory partition does not contain additional memory blocks to allocate.

OS_ERR_OBJ_TYPE

If OS_CFG_OBJ_TYPE_CHK_EN is set to DEF_ENABLED in os_cfg.h: if the user did not pass a pointer to a memory partition.

Returned Value

OSMemGet() returns a pointer to the allocated memory block if one is available. If a memory block is not available from the memory partition, OSMemGet() returns a NULL pointer. It is up to the application to “cast” the pointer to the proper data type since OSMemGet() returns a void *.

Required Configuration

OS_CFG_MEM_EN must be enabled in os_cfg.h. Refer to µC-OS-III Configuration Manual,

Callers

Application and ISRs.

Notes/Warnings

  1. Memory partitions must be created before they are used.

...

Example Usage

Code Block
titleOSMemGet() example usage
          OS_MEM  CommMem;
           
           
          void Task (void *p_arg)
          {
              OS_ERR       err;
              CPU_INT32U  *p_msg;
           
           
              (void)&p_arg;
              while (DEF_ON) {
                  p_msg = (CPU_INT32U *)OSMemGet(&CommMem,
                                                 &err);
                  /* Check "err" */
                  :
                  :
              }
          }