当前位置: 首页 > news >正文

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;
}

http://www.lryc.cn/news/596756.html

相关文章:

  • JavaScript 01 JavaScript 是什么
  • 在 Linux 上安装 `pgvector`(这是一个 PostgreSQL 的向量类型扩展,常用于处理嵌入向量,便于进行向量相似度搜索)
  • JavaScript 03 严格检查模式Strict字符串类型详解
  • 从零开始学习大模型之文本数据处理
  • Kotlin伴生对象
  • Python的界面美化库 QDarkStyleSheet
  • 循环神经网络--NLP基础
  • 2025年6月GESP(C++五级):最大公因数
  • 【第三节】Class与Style绑定
  • p5.js 圆弧的用法
  • Git GitHub精通:前端协作开发的“瑞士军刀“!
  • ubuntu22.04 录视屏软件推荐
  • Vercel AI SDK 3.0 学习入门指南
  • Android-API调用学习总结
  • javaSE(从0开始)day14
  • 数据交换---JSON格式
  • C语言:第11天笔记
  • JavaScript 02 数据类型和运算符数组对象
  • numpy库 降维,矩阵创建与元素的选取,修改
  • 生成式人工智能展望报告-欧盟-01-引言
  • Vue开发常用
  • 2025 年最新 AI 技术:全景洞察与深度解析​
  • 操作系统:系统调用(System Calls)
  • 深入理解程序链接机制:静态链接、ELF加载与动态库实现原理
  • 计算机底层入门 05 汇编学习环境通用寄存器内存
  • [LLM]Synthetic Visual Genome
  • gflags使用
  • 【锁】MySQL中有哪几种锁?
  • 【C语言进阶】动态内存管理(1)
  • Claude Code Kimi K2 环境配置指南 (Windows/macOS/Ubuntu)