void *pvPortMalloc( size_t 
xWantedSize )
{
xBlockLink *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
static portBASE_TYPE xHeapHasBeenInitialised = pdFALSE;
void *pvReturn = NULL;
vTaskSuspendAll();
{
    /* If this is the first call to malloc then the heap will require
    initialisation to setup the list of free blocks. */
    if( xHeapHasBeenInitialised == pdFALSE )
    {
        prvHeapInit();
        xHeapHasBeenInitialised = pdTRUE;
    }
    /* The wanted size is increased so it can contain a xBlockLink
    structure in addition to the requested amount of bytes. */
    if( xWantedSize > 0 )
    {
        xWantedSize += heapSTRUCT_SIZE;
        /* Ensure that blocks are always aligned to the required number of bytes. */
        if( xWantedSize & portBYTE_ALIGNMENT_MASK )
        {
            /* Byte alignment required. */
            xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
        }
    }
    if( ( xWantedSize > 0 ) && ( xWantedSize < configTOTAL_HEAP_SIZE ) )
    {
        /* Blocks are stored in byte order - traverse the list from the start
        (smallest) block until one of adequate size is found. */
        pxPreviousBlock = &xStart;
        pxBlock = xStart.pxNextFreeBlock;
        while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock ) )
        {
            pxPreviousBlock = pxBlock;
            pxBlock = pxBlock->pxNextFreeBlock;
        }
        /* If we found the end marker then a block of adequate size was not found. */
        if( pxBlock != &xEnd )
        {
            /* Return the memory space - jumping over the xBlockLink structure
            at its start. */
            pvReturn = ( void * ) ( ( ( unsigned char * ) pxPreviousBlock->pxNextFreeBlock ) + heapSTRUCT_SIZE );
            /* This block is being returned for use so must be taken our of the
            list of free blocks. */
            pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
            /* If the block is larger than required it can be split into two. */
            if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
            {
                /* This block is to be split into two.  Create a new block
                following the number of bytes requested. The void cast is
                used to prevent byte alignment warnings from the compiler. */
                pxNewBlockLink = ( void * ) ( ( ( unsigned char * ) pxBlock ) + xWantedSize );
                /* Calculate the sizes of two blocks split from the single
                block. */
                pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
                pxBlock->xBlockSize = xWantedSize;
                /* Insert the new block into the list of free blocks. */
                prvInsertBlockIntoFreeList( ( pxNewBlockLink ) );
            }
            xFreeBytesRemaining -= pxBlock->xBlockSize;
        }
    }
}
xTaskResumeAll();
#if( configUSE_MALLOC_FAILED_HOOK == 1 )
{
    if( pvReturn == NULL )
    {
        extern void vApplicationMallocFailedHook( void );
        vApplicationMallocFailedHook();
    }
}
#endif
return pvReturn;
}
/
———————————————————–/
void vPortFree( void *pv )
{
unsigned char *puc = ( unsigned char * ) pv;
xBlockLink *pxLink;
if( pv )
{
    /* The memory being freed will have an xBlockLink structure immediately
    before it. */
    puc -= heapSTRUCT_SIZE;
    /* This casting is to keep the compiler from issuing warnings. */
    pxLink = ( void * ) puc;
    vTaskSuspendAll();
    {
        /* Add this block to the list of free blocks. */
        prvInsertBlockIntoFreeList( ( ( xBlockLink * ) pxLink ) );
        xFreeBytesRemaining += pxLink->xBlockSize;
    }
    xTaskResumeAll();
}
}
In the FreeRtos heap2_.c file where is the xwantedsize declared before or what does that mean.Please do guide me I am new to embedded system.