FreeRTOS学习(四) 列表的插入和删除

2023-05-16

声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结
环境 keil , stm32f103

首先定义列表,以及列表项;
List_t TestList; // 列表
ListItem_t ListItem1; // 列表项1
ListItem_t ListItem2; // 列表项2
ListItem_t ListItem3; // 列表项3

第一步: 初始化列表和列表项

	// 初始化列表和列表项
	vListInitialise(&TestList);
	vListInitialiseItem(&ListItem1);
	vListInitialiseItem(&ListItem2);
	vListInitialiseItem(&ListItem3);

第二步:给列表项值赋值

	ListItem1.xItemValue=40;			
	ListItem2.xItemValue=60;			
	ListItem3.xItemValue=50;			

第三步: 插入列表项
插入的第一种方法

vListInsert(&TestList,&ListItem1);		
vListInsert(&TestList,&ListItem2);
vListInsert(&TestList,&ListItem3);

到此,TestList列表会有三个列表项
其中使用vListInsert插入列表项的顺序和插入的先后无关,而与列表项的值有关,
因为 ListItem2.xItemValue 的值大于 ListItem3.xItemValue 的值,所以就算代码中ListItem2先插入,但是ListItem3在ListItem2的前面

插入的第二种方法

vListInsertEnd(&TestList,&ListItem2);

vListInsertEnd 此函数为尾插入方式,但是和字面上的尾插入还有很大的不同vListInsertEnd 插入列表项的位置
和列表中的pxIndex成员变量有关,
一开始pxIndex 指向的时列表的列表头,也就是说指向的是TestList本身,所以在默认情况下vListInsertEnd插入会插入到
TestList的前面,有因为这个是环形链表,就相当于插入到末尾位置。
但是如果改变的pxIndex指向的位置,就会插入新的pxIndex指向位置的前面。
类似。

vListInsert(&TestList,&ListItem1);	 
// 在此后面改变了pxIndex指向位置
TestList.pxIndex=TestList.pxIndex->pxNext; // 相当于pxIndex 指向了ListItem1 
// 此时进行尾插入,
vListInsertEnd(&TestList,&ListItem2); 

那么就相当于在TestList 和 ListItem1 中间插入
那么整个链表就是TestList 先指向 ListItem2 , 然后ListItem2 指向 ListItem1

链表的删除
uxListRemove(&ListItem2);

直接调用uxListRemove 的API函数即可

为什么删除不需要传入,是哪个列表的参数呢?
因为
列表项中的有一个参数成员pvContainer 记录了当前列表项时属于哪个列表的,所以不需要传入哪个列表参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS学习(四) 列表的插入和删除 的相关文章

  • CC1310 基于CCS工程建立+Sensor Controller ADC

    基于TIRTOS xff0c PacketTx 43 Sensor Controller ADC 43 CCS工程建立 需要的工具 xff1a 1 simplelink cc13x0 sdk 3 20 00 23 CC1310的SDK xf
  • linux w5500 驱动及使用

    1 驱动 驱动来源 a 内核驱动 xff1b b xff1a 官方驱动 a 内核 xff1a linux内核w5500驱动 xff0c 包含两个源文件w5100 c和w5100 spi c kernel drivers net ethern
  • 扩展 IO pca95555 linux驱动 及使用

    驱动 xff1a 内核驱动 xff1a kernel drivers gpio gpio pca953x c make menuconfig配置编译 或拷贝出来手动编译成模块加载 设备树 xff1a 使用2个芯片 xff0c 在同一i2c总
  • Linux内核崩溃 dump调试

    内核 crash 崩溃 xff0c oops消息 xff0c dump oops xff08 也称 panic xff09 xff0c 称程序运行崩溃 xff0c 程序崩溃后会产生oops消息 应用程序或内核线程的崩溃都会产生oops消息
  • 【路径规划】VFH

    简介 在没有全局地图或者是应对动态障碍物的情况下 xff0c 往往是运用局部规划来进行绕障 xff0c 在局部规划的经典算法中 xff0c 比较常用的是 DWA 与 VFH xff0c VFH 全名向量场直方图算法 xff0c 不同于 DW
  • keil5 编译程序出现错误Error: L6411E: No compatible library exists with a definition of startup symbol __main

    Error L6411E No compatible library exists with a definition of startup symbol main 之前装过ADS xff0c ADS与MDK冲突 xff0c 依据网友提供的
  • LORA 射频自组网 两级中继

    基于sx1276lora模块 xff0c 进行多个模块之间自组网 xff0c 组网形式为1个集中器加多个终端 模块之间距离较远时 xff0c 集中器无法直接与某个终端进行通信 xff0c 其他终端本身可作为中继给该终端作为中继与集中器通信
  • STM32上进行Delay延时的方法

    1 使用SYStick专门的延时 void delay us uint32 t us static uint32 t delay flag 61 0 delay flag 61 1 set reload register HCLK 61 4
  • 内核模块已打开,但开机未加载

    环境 xff1a 系 统 Centos 6 6 内核版本 xff1a linux 2 6 32 1 vmware转qcow2格式 xff0c 内核崩溃 最近做一个kvm的镜像 xff0c 尽力裁小内核大小 xff0c 从VMware格式转q
  • px4飞控校准中常遇到的一些坑

    1 校准中最后给飞控独立供电 xff0c 这样可以避免一些不必要的错误 比如要给飞控解锁 xff0c 就必须是给飞控独立供电 xff0c 不能通过USB线给飞控供电 2 校准时至少给飞控接上数传和GPS xff0c 注意GPS的方向和机头方
  • ros+mavros+gazebo仿真实践要点总结

    1 安装ros时要看好对应的版本 xff0c ubuntu16 4对应的kenitic版本 xff0c Ubuntu18 04对应的melodic版本 2 通过ssh方式clone px4 firmware比http方式快的多 3 参考教程
  • offboard

    GAAS
  • 无人机飞控系统的简单分析

    这里写自定义目录标题 刚上大一的时候的学业报告 xff0c 将就这看吧 无人机控制系统原理的简单分析 摘要 xff1a 无人机 xff08 UAV xff09 是无人驾驶飞机的简称 xff0c 是指利用无线电遥控设备和自备的程序控制装置操纵
  • [网络编程]运用socket实现本地通信

    功能实现 基于socket文件 xff0c 进行数据传递 xff0c 实现服务器与客户端之间进行本地通信 设计思路 服务器 创建socket套接字将socket套接字关联到socket文件 xff0c 实现绑定并创建套接字文件此时 xff0
  • 学东西要先看这个东西能给你提供什么功能,作东西要明白自己要实现什么功能!一定要耐下性子!

    学东西不要急匆匆去学 xff0c 首先要明白你要学的这个东西它能给你提供什么功能 xff0c 然后再去学这些功能怎么应用 xff0c 怎么实现的 xff0c 甚至 xff0c 只去学习自己需要使用的功能 作东西也不要匆匆就去作 xff0c
  • Linux系统 搭建gitlab仓库服务器

    安装依赖工具 安装技术依赖 yum span class token function install span y span class token function curl span policycoreutils python op
  • chmod +x 与chmod +777的区别

    对于chmod 43 x 脚本 来说就是将脚本改为可执行状态 xff0c 在linux因高亮语法 xff0c 会让file文件显示加黑 对于灰色的文件来说 xff0c 没有可执行的权限 xff0c 这是若我们给它chmod 43 x后它将会
  • 多线程编程实例(使用CompletableFuture)

    关键配置 xff1a 代理类对象 YrSyncWrService yrSyncWrServiceProxy 获取代理类的对象 xff0c 调用本类方法时 xff0c 注解才会生效 比如 64 Async多线程 xff0c 64 Transa
  • redis实现布隆过滤器

    Redis是一种基于内存的数据存储系统 xff0c 具有高性能 高可用性 高扩展性等特点 xff0c 因此被广泛用于实现布隆过滤器 以下是一种基于Redis实现布隆过滤器的方案 xff1a 创建一个长度为m的位数组 xff08 bit ar
  • jansson+freertos遇到的问题

    最近需要在stm32 43 freertos环境中 xff0c 使用json格式组包通信 xff0c 于是按照https blog csdn net yannanxiu article details 52712723 帖子中说的 xff0

随机推荐