freertos关键函数理解 uxListRemove


//删除pxItemToRemove节点
UBaseType_t uxListRemove(ListItem_t *pxItemToRemove)
{              
    //The list item knows which list it is in.  Obtain the list from the list item.
    //找到节点所在的链表

    //my_printf( "uxListRemove pxItemToRemove = %#p\n", pxItemToRemove );

    
    List_t *pxList = pxItemToRemove->pxContainer;


    List_t *pxList_;          //指向目标优先级的就绪任务列表 (通过TCB的优先级索引)
    //pxList_ = &pxReadyTasksLists[4];

        

    //my_printf( "pxList = %#p\n", pxList );
    //my_printf( "pxList->uxNumberOfItems = %d\n", pxList->uxNumberOfItems );
    //my_printf( "&pxList->uxNumberOfItems = %#p\n", &pxList->uxNumberOfItems );
    //my_printf( "pxList->pxIndex = %#p\n", pxList->pxIndex );
    //my_printf( "&pxList->pxIndex = %#p\n", &pxList->pxIndex );
    //my_printf( "pxList->pxIndex->pvOwner = %#p\n", pxList->pxIndex->pvOwner );
    //my_printf( "pxList->pxIndex->pxContainer = %#p\n", pxList->pxIndex->pxContainer );

    //|------->volatile UBaseType_t uxNumberOfItems = 1  0x20000088  链表中元素的个数          
    //| |<-----ListItem_t *pxIndex;                         0x2000008c  总是指向xListEnd节点,在链表尾部插入的时候,方便找到位置
    //| |  |-->TickType_t xItemValue = portMAX_DELAY     0x20000090  [MiniListItem_t xListEnd]   
    //| |  |   struct xLIST_ITEM *pxNext;     ----->|    0x20000094  后继节点
    //| |  |   struct xLIST_ITEM *pxPrevious; ----->|    0x20000098  前驱节点    
    //| |  |                                        |                  
    //| |--|-->TickType_t xItemValue; <-------------|    0x200004ac  链表节点的值        
    //|    |<--struct xLIST_ITEM *pxNext;                            后继节点
    //|    |<--struct xLIST_ITEM *pxPrevious;                        前驱节点
    //|        void *pvOwner;                            0x200004a8  保存私有数据         [ &TCB ]
    //|<------ struct xLIST *pxContainer;                0x20000088  节点所在的链表 [ &pxReadyTasksLists[x] ]

    pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
    pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;

    //Make sure the index is left pointing to a valid item. 
    if( pxList->pxIndex == pxItemToRemove ){
        pxList->pxIndex = pxItemToRemove->pxPrevious;
    }
    pxItemToRemove->pxContainer = NULL;
    pxList->uxNumberOfItems--;


    //         volatile UBaseType_t uxNumberOfItems = 0  0x20000088  链表中元素的个数          
    //  |<-----ListItem_t *pxIndex;                         0x2000008c  总是指向xListEnd节点,在链表尾部插入的时候,方便找到位置
    //  |->|-->TickType_t xItemValue = portMAX_DELAY     0x20000090  [MiniListItem_t xListEnd]   
    //     |<--struct xLIST_ITEM *pxNext;                0x20000094  后继节点
    //     |<--struct xLIST_ITEM *pxPrevious;            0x20000098  前驱节点    
                                                                     
    
    //返回剩余节点数
    return pxList->uxNumberOfItems;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值