Connect with us

What Is List In Program

Discussion in 'Microcontrollers, Programming and IoT' started by vead, Sep 30, 2017.

Thread Status:
Not open for further replies.
Scroll to continue with content
  1. vead

    vead

    473
    14
    Nov 27, 2011
    Hello
    This code is source file of list. generally List means the number of items. I want to understand what is use of this program ? why do we need this source file ?
    Code:
    #include <stdlib.h>
    #include "FreeRTOS.h"
    #include "list.h"
    
    void vListInitialise( xList * const pxList )
    {
        /* The list structure contains a list item which is used to mark the
        end of the list.  To initialise the list the list end is inserted
        as the only list entry. */
        pxList->pxIndex = ( xListItem * ) &( pxList->xListEnd );            /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
    
        /* The list end value is the highest possible value in the list to
        ensure it remains at the end of the list. */
        pxList->xListEnd.xItemValue = portMAX_DELAY;
    
        /* The list end next and previous pointers point to itself so we know
        when the list is empty. */
        pxList->xListEnd.pxNext = ( xListItem * ) &( pxList->xListEnd );    /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
        pxList->xListEnd.pxPrevious = ( xListItem * ) &( pxList->xListEnd );/*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
    
        pxList->uxNumberOfItems = ( unsigned portBASE_TYPE ) 0U;
    }
    /*-----------------------------------------------------------*/
    
    void vListInitialiseItem( xListItem * const pxItem )
    {
        /* Make sure the list item is not recorded as being on a list. */
        pxItem->pvContainer = NULL;
    }
    /*-----------------------------------------------------------*/
    
    void vListInsertEnd( xList * const pxList, xListItem * const pxNewListItem )
    {
    xListItem * pxIndex;
    
        /* Insert a new list item into pxList, but rather than sort the list,
        makes the new list item the last item to be removed by a call to
        pvListGetOwnerOfNextEntry. */
        pxIndex = pxList->pxIndex;
    
        pxNewListItem->pxNext = pxIndex;
        pxNewListItem->pxPrevious = pxIndex->pxPrevious;
        pxIndex->pxPrevious->pxNext = pxNewListItem;
        pxIndex->pxPrevious = pxNewListItem;
    
        /* Remember which list the item is in. */
        pxNewListItem->pvContainer = ( void * ) pxList;
    
        ( pxList->uxNumberOfItems )++;
    }
    /*-----------------------------------------------------------*/
    
    void vListInsert( xList * const pxList, xListItem * const pxNewListItem )
    {
    xListItem *pxIterator;
    portTickType xValueOfInsertion;
    
        /* Insert the new list item into the list, sorted in ulListItem order. */
        xValueOfInsertion = pxNewListItem->xItemValue;
    
        if( xValueOfInsertion == portMAX_DELAY )
        {
            pxIterator = pxList->xListEnd.pxPrevious;
        }
        else
        {
    
            for( pxIterator = ( xListItem * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
            {
                /* There is nothing to do here, we are just iterating to the
                wanted insertion position. */
            }
        }
    
        pxNewListItem->pxNext = pxIterator->pxNext;
        pxNewListItem->pxNext->pxPrevious = pxNewListItem;
        pxNewListItem->pxPrevious = pxIterator;
        pxIterator->pxNext = pxNewListItem;
    
        /* Remember which list the item is in.  This allows fast removal of the
        item later. */
        pxNewListItem->pvContainer = ( void * ) pxList;
    
        ( pxList->uxNumberOfItems )++;
    }
    /*-----------------------------------------------------------*/
    
    unsigned portBASE_TYPE uxListRemove( xListItem * const pxItemToRemove )
    {
    xList * pxList;
    
        pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
        pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
    
        /* The list item knows which list it is in.  Obtain the list from the list
        item. */
        pxList = ( xList * ) pxItemToRemove->pvContainer;
    
        /* Make sure the index is left pointing to a valid item. */
        if( pxList->pxIndex == pxItemToRemove )
        {
            pxList->pxIndex = pxItemToRemove->pxPrevious;
        }
    
        pxItemToRemove->pvContainer = NULL;
        ( pxList->uxNumberOfItems )--;
    
        return pxList->uxNumberOfItems;
    }
     
  2. (*steve*)

    (*steve*) ¡sǝpodᴉʇuɐ ǝɥʇ ɹɐǝɥd Moderator

    25,473
    2,819
    Jan 21, 2010
    davenn likes this.
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Thread Status:
Not open for further replies.
Electronics Point Logo
Continue to site
Quote of the day

-