04 FreeRTOS - 列表API

4.1 列表初始化

/*********************************************************************************
* 函数名: vListInitialise
* 功能:   初始化链表
* 输入:   pxList [要初始化的链表指针]
* 输出:   无
*********************************************************************************/ 
void vListInitialise( List_t * const pxList );

4.2 链表项初始化

/*********************************************************************************
* 函数名: vListInitialiseItem
* 功能:   初始化链表
* 输入:   pxItem [要初始化的链表项指针]
* 输出:   无
*********************************************************************************/ 
void vListInitialiseItem( ListItem_t * const pxItem )

4.3 插入链表项

/*********************************************************************************
* 函数名: vListInsert
* 功能:   向列表中插入列表项
* 输入:   pxList[列表地址] pxNewListItem[列表项地址]
* 输出:   无
* 备注:   列表项在列表的位置是按照值的大小来排序的
*********************************************************************************/ 
void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
/*********************************************************************************
* 函数名: vListInsertEnd
* 功能:   向列表尾部插入列表项
* 输入:   pxList[列表地址] pxNewListItem[列表项地址]
* 输出:   无
*********************************************************************************/ 
void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )

4.4 移除列表项 因为列表项中存在属于哪个列表,所以参数只有列表项一项就够了

/*********************************************************************************
* 函数名: uxListRemove
* 功能:   列表中移除列表项
* 输入:   移除的列表项
* 输出:   列表中剩余的列表项数
*********************************************************************************/ 
UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )

4.5 应用示例

//task1任务函数
void task1_task(void *pvParameters)
{
    ListItem_t uNode1;
    ListItem_t uNode2;
    ListItem_t uNode3;
    ListItem_t uNode4;
    ListItem_t uNode5;
    List_t     uList;
    
    vListInitialise(&uList);      // 初始化列表
    vListInitialiseItem(&uNode1); // 初始化列表项
    vListInitialiseItem(&uNode2); // 初始化列表项
    vListInitialiseItem(&uNode3); // 初始化列表项
    vListInitialiseItem(&uNode4); // 初始化列表项
    vListInitialiseItem(&uNode5); // 初始化列表项
    
    uNode1.xItemValue = 5;  // 列表项赋值
    uNode2.xItemValue = 10; // 列表项赋值
    uNode3.xItemValue = 15; // 列表项赋值
    uNode4.xItemValue = 20; // 列表项赋值
    uNode5.xItemValue = 25; // 列表项赋值
    
    printf("uList addr is %X\r\n",(int)&uList);
    printf("uNode1.xItemValue = %X, uNode1 addr is %X\r\n",uNode1.xItemValue, (int)&uNode1);
    printf("uNode2.xItemValue = %X, uNode2 addr is %X\r\n",uNode2.xItemValue, (int)&uNode2);
    printf("uNode3.xItemValue = %X, uNode3 addr is %X\r\n",uNode3.xItemValue, (int)&uNode3);
    printf("uNode4.xItemValue = %X, uNode4 addr is %X\r\n",uNode4.xItemValue, (int)&uNode4);
    printf("uNode5.xItemValue = %X, uNode5 addr is %X\r\n",uNode5.xItemValue, (int)&uNode5);
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    printf("\r\n");
    vListInsert(&uList,&uNode1);
    printf("\r\nvListInsert(&uList,&uNode1);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    printf("uList.pxIndex = %X \r\n",(int)uList.pxIndex);
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    printf("\r\n");
    
    vListInsert(&uList,&uNode5);
    printf("\r\nvListInsert(&uList,&uNode5);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    vListInsert(&uList,&uNode3);
    printf("\r\nvListInsert(&uList,&uNode3);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode3.pxPrevious = %X \r\n",(int)uNode3.pxPrevious);
    printf("uNode3.pxNext = %X \r\n",    (int)uNode3.pxNext);
    printf("uNode3.xItemValue = %X \r\n",(int)uNode3.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    
    vListInsertEnd(&uList,&uNode2);
    printf("\r\nvListInsertEnd(&uList,&uNode2);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode2.pxPrevious = %X \r\n",(int)uNode2.pxPrevious);
    printf("uNode2.pxNext = %X \r\n",    (int)uNode2.pxNext);
    printf("uNode2.xItemValue = %X \r\n",(int)uNode2.xItemValue);
    
    printf("uNode3.pxPrevious = %X \r\n",(int)uNode3.pxPrevious);
    printf("uNode3.pxNext = %X \r\n",    (int)uNode3.pxNext);
    printf("uNode3.xItemValue = %X \r\n",(int)uNode3.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    
    vListInsert(&uList,&uNode4);
    printf("\r\nvListInsert(&uList,&uNode4);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode2.pxPrevious = %X \r\n",(int)uNode2.pxPrevious);
    printf("uNode2.pxNext = %X \r\n",    (int)uNode2.pxNext);
    printf("uNode2.xItemValue = %X \r\n",(int)uNode2.xItemValue);
    
    printf("uNode3.pxPrevious = %X \r\n",(int)uNode3.pxPrevious);
    printf("uNode3.pxNext = %X \r\n",    (int)uNode3.pxNext);
    printf("uNode3.xItemValue = %X \r\n",(int)uNode3.xItemValue);
    
    printf("uNode4.pxPrevious = %X \r\n",(int)uNode4.pxPrevious);
    printf("uNode4.pxNext = %X \r\n",    (int)uNode4.pxNext);
    printf("uNode4.xItemValue = %X \r\n",(int)uNode4.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    
    
    uxListRemove(&uNode4);
    printf("\r\nuxListRemove(&uNode4);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode2.pxPrevious = %X \r\n",(int)uNode2.pxPrevious);
    printf("uNode2.pxNext = %X \r\n",    (int)uNode2.pxNext);
    printf("uNode2.xItemValue = %X \r\n",(int)uNode2.xItemValue);
    
    printf("uNode3.pxPrevious = %X \r\n",(int)uNode3.pxPrevious);
    printf("uNode3.pxNext = %X \r\n",    (int)uNode3.pxNext);
    printf("uNode3.xItemValue = %X \r\n",(int)uNode3.xItemValue);
    
    printf("uNode4.pxPrevious = %X \r\n",(int)uNode4.pxPrevious);
    printf("uNode4.pxNext = %X \r\n",    (int)uNode4.pxNext);
    printf("uNode4.xItemValue = %X \r\n",(int)uNode4.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    
    
    uxListRemove(&uNode1);
    printf("\r\nuxListRemove(&uNode1);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode2.pxPrevious = %X \r\n",(int)uNode2.pxPrevious);
    printf("uNode2.pxNext = %X \r\n",    (int)uNode2.pxNext);
    printf("uNode2.xItemValue = %X \r\n",(int)uNode2.xItemValue);
    
    printf("uNode3.pxPrevious = %X \r\n",(int)uNode3.pxPrevious);
    printf("uNode3.pxNext = %X \r\n",    (int)uNode3.pxNext);
    printf("uNode3.xItemValue = %X \r\n",(int)uNode3.xItemValue);
    
    printf("uNode4.pxPrevious = %X \r\n",(int)uNode4.pxPrevious);
    printf("uNode4.pxNext = %X \r\n",    (int)uNode4.pxNext);
    printf("uNode4.xItemValue = %X \r\n",(int)uNode4.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    
    
    uxListRemove(&uNode2);
    printf("\r\nuxListRemove(&uNode2);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode2.pxPrevious = %X \r\n",(int)uNode2.pxPrevious);
    printf("uNode2.pxNext = %X \r\n",    (int)uNode2.pxNext);
    printf("uNode2.xItemValue = %X \r\n",(int)uNode2.xItemValue);
    
    printf("uNode3.pxPrevious = %X \r\n",(int)uNode3.pxPrevious);
    printf("uNode3.pxNext = %X \r\n",    (int)uNode3.pxNext);
    printf("uNode3.xItemValue = %X \r\n",(int)uNode3.xItemValue);
    
    printf("uNode4.pxPrevious = %X \r\n",(int)uNode4.pxPrevious);
    printf("uNode4.pxNext = %X \r\n",    (int)uNode4.pxNext);
    printf("uNode4.xItemValue = %X \r\n",(int)uNode4.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    
    
    uxListRemove(&uNode5);
    printf("\r\nuxListRemove(&uNode5);\r\n");
    printf("uList.uxNumberOfItems = %d\r\n",(int)uList.uxNumberOfItems);
    
    printf("uNode1.pxPrevious = %X \r\n",(int)uNode1.pxPrevious);
    printf("uNode1.pxNext = %X \r\n",    (int)uNode1.pxNext);
    printf("uNode1.xItemValue = %X \r\n",(int)uNode1.xItemValue);
    
    printf("uNode2.pxPrevious = %X \r\n",(int)uNode2.pxPrevious);
    printf("uNode2.pxNext = %X \r\n",    (int)uNode2.pxNext);
    printf("uNode2.xItemValue = %X \r\n",(int)uNode2.xItemValue);
    
    printf("uNode3.pxPrevious = %X \r\n",(int)uNode3.pxPrevious);
    printf("uNode3.pxNext = %X \r\n",    (int)uNode3.pxNext);
    printf("uNode3.xItemValue = %X \r\n",(int)uNode3.xItemValue);
    
    printf("uNode4.pxPrevious = %X \r\n",(int)uNode4.pxPrevious);
    printf("uNode4.pxNext = %X \r\n",    (int)uNode4.pxNext);
    printf("uNode4.xItemValue = %X \r\n",(int)uNode4.xItemValue);
    
    printf("uNode5.pxPrevious = %X \r\n",(int)uNode5.pxPrevious);
    printf("uNode5.pxNext = %X \r\n",    (int)uNode5.pxNext);
    printf("uNode5.xItemValue = %X \r\n",(int)uNode5.xItemValue);
    
    
    
    
    while(1)
    {
        vTaskDelay(1000); // 延时1s,也就是1000个时钟节拍    
    }
}

/*
打印结果:
uList addr is 20000678
uNode1.xItemValue = 5, uNode1 addr is 20000650
uNode2.xItemValue = A, uNode2 addr is 2000068C
uNode3.xItemValue = F, uNode3 addr is 200006A0
uNode4.xItemValue = 14, uNode4 addr is 200006B4
uNode5.xItemValue = 19, uNode5 addr is 20000664

uList.uxNumberOfItems = 0


vListInsert(&uList,&uNode1);
uList.uxNumberOfItems = 1
uList.pxIndex = 20000680 
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 20000680 
uNode1.xItemValue = 5 


vListInsert(&uList,&uNode5);
uList.uxNumberOfItems = 2
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 20000664 
uNode1.xItemValue = 5 
uNode5.pxPrevious = 20000650 
uNode5.pxNext = 20000680 
uNode5.xItemValue = 19 

vListInsert(&uList,&uNode3);
uList.uxNumberOfItems = 3
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 200006A0 
uNode1.xItemValue = 5 
uNode3.pxPrevious = 20000650 
uNode3.pxNext = 20000664 
uNode3.xItemValue = F 
uNode5.pxPrevious = 200006A0 
uNode5.pxNext = 20000680 
uNode5.xItemValue = 19 

vListInsertEnd(&uList,&uNode2);
uList.uxNumberOfItems = 4
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 200006A0 
uNode1.xItemValue = 5 
uNode2.pxPrevious = 20000664 
uNode2.pxNext = 20000680 
uNode2.xItemValue = A 
uNode3.pxPrevious = 20000650 
uNode3.pxNext = 20000664 
uNode3.xItemValue = F 
uNode5.pxPrevious = 200006A0 
uNode5.pxNext = 2000068C 
uNode5.xItemValue = 19 

vListInsert(&uList,&uNode4);
uList.uxNumberOfItems = 5
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 200006A0 
uNode1.xItemValue = 5 
uNode2.pxPrevious = 20000664 
uNode2.pxNext = 20000680 
uNode2.xItemValue = A 
uNode3.pxPrevious = 20000650 
uNode3.pxNext = 200006B4 
uNode3.xItemValue = F 
uNode4.pxPrevious = 200006A0 
uNode4.pxNext = 20000664 
uNode4.xItemValue = 14 
uNode5.pxPrevious = 200006B4 
uNode5.pxNext = 2000068C 
uNode5.xItemValue = 19 

uxListRemove(&uNode4);
uList.uxNumberOfItems = 4
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 200006A0 
uNode1.xItemValue = 5 
uNode2.pxPrevious = 20000664 
uNode2.pxNext = 20000680 
uNode2.xItemValue = A 
uNode3.pxPrevious = 20000650 
uNode3.pxNext = 20000664 
uNode3.xItemValue = F 
uNode4.pxPrevious = 200006A0 
uNode4.pxNext = 20000664 
uNode4.xItemValue = 14 
uNode5.pxPrevious = 200006A0 
uNode5.pxNext = 2000068C 
uNode5.xItemValue = 19 

uxListRemove(&uNode1);
uList.uxNumberOfItems = 3
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 200006A0 
uNode1.xItemValue = 5 
uNode2.pxPrevious = 20000664 
uNode2.pxNext = 20000680 
uNode2.xItemValue = A 
uNode3.pxPrevious = 20000680 
uNode3.pxNext = 20000664 
uNode3.xItemValue = F 
uNode4.pxPrevious = 200006A0 
uNode4.pxNext = 20000664 
uNode4.xItemValue = 14 
uNode5.pxPrevious = 200006A0 
uNode5.pxNext = 2000068C 
uNode5.xItemValue = 19 

uxListRemove(&uNode2);
uList.uxNumberOfItems = 2
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 200006A0 
uNode1.xItemValue = 5 
uNode2.pxPrevious = 20000664 
uNode2.pxNext = 20000680 
uNode2.xItemValue = A 
uNode3.pxPrevious = 20000680 
uNode3.pxNext = 20000664 
uNode3.xItemValue = F 
uNode4.pxPrevious = 200006A0 
uNode4.pxNext = 20000664 
uNode4.xItemValue = 14 
uNode5.pxPrevious = 200006A0 
uNode5.pxNext = 20000680 
uNode5.xItemValue = 19 

uxListRemove(&uNode5);
uList.uxNumberOfItems = 1
uNode1.pxPrevious = 20000680 
uNode1.pxNext = 200006A0 
uNode1.xItemValue = 5 
uNode2.pxPrevious = 20000664 
uNode2.pxNext = 20000680 
uNode2.xItemValue = A 
uNode3.pxPrevious = 20000680 
uNode3.pxNext = 20000680 
uNode3.xItemValue = F 
uNode4.pxPrevious = 200006A0 
uNode4.pxNext = 20000664 
uNode4.xItemValue = 14 
uNode5.pxPrevious = 200006A0 
uNode5.pxNext = 20000680 
uNode5.xItemValue = 19 
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值