当前位置: 首页 > 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.dtcms.com/a/291901.html

相关文章:

  • 基于 Spring Batch 和 XXL-Job 的批处理任务实现
  • linux c语言进阶 - 进程,通信方式
  • PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC
  • Unity之C# 脚本与Unity Visual Scripting 交互
  • Java 网络编程详解:从基础到实战,彻底掌握 TCP/UDP、Socket、HTTP 网络通信
  • 【数据可视化-70】奶茶店销量数据可视化:打造炫酷黑金风格的可视化大屏
  • Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计
  • AI创作系列第22篇:前端缓存与更新机制重构 - 表情包系统的全面升级
  • 贪心算法Day4学习心得
  • 当直播间告别“真人时代”:AI数字人重构商业新秩序
  • haproxy七层代理新手入门详解
  • 零事故网站重构:11步标准化流程与风险管理指南
  • 第13天 | openGauss逻辑结构:表管理1
  • zabbix“专家坐诊”第295期问答
  • SPI的收发(W25Q64外部flash 和 内部flsah)
  • 小米视觉算法面试30问全景精解
  • Android常用的adb和logcat命令
  • 【bug】ubuntu20.04 orin nx Temporary failure resolving ‘ports.ubuntu.com‘
  • 【测试开发】---Bug篇
  • kafka主题管理详解 - kafka-topics.sh
  • Claude Code Kimi K2 环境配置指南 (Windows/macOS/Ubuntu)
  • 热点leetCode题
  • AI助力临床医学科研创新与效率双提升丨临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模等
  • Vercel AI SDK 3.0 学习入门指南
  • Java设计模式揭秘:深入理解模板方法模式
  • 一个简单实用的 WinForm 通用开发框架
  • 替代Oracle?金仓数据库用「敢替力」重新定义国产数据库
  • Pygame开源--谷歌小恐龙游戏(附彩蛋)
  • Custom SRP - Draw Calls
  • 从零构建智能对话助手:LangGraph + ReAct 实现具备记忆功能的 AI 智能体