STM32H750之FreeRTOS学习--------(六)FreeRTOS的列表和列表项

news2024/11/27 9:52:03

六、FreeRTOS的列表和列表项

文章目录

      • 六、FreeRTOS的列表和列表项
          • 列表相关结构体
          • 列表项相关结构体
          • 迷你列表项
          • 列表相关API函数介绍
            • 初始化列表vListInitialise()
            • 函数vListInitialiseItem()
            • 函数vListInsert()
            • 函数 vListInsertEnd()
            • 函数 uxListRemove()

  • 列表就是一个双向链表,用来存放FreeRTOS中的任务列表项

image-20231114162723449

  • 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表
  • 列表的特点:列表项间的地址非连续的,列表项的数目是由后期添加的个数决定的
  • 数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后期无法改变
  • 在OS中任务的数量是不确定的,并且任务状态是会发生改变的,所以非常适用列表(链表)这种数据结构
列表相关结构体
typedef struct xLIST
{
    	listFIRST_LIST_INTEGRITY_CHECK_VALUE			/* 校验值 */
    	volatile UBaseType_t uxNumberOfItems;			/* 列表中的列表项数量 */
   		ListItem_t * configLIST_VOLATILE pxIndex		/* 用于遍历列表项的指针 */
    	MiniListItem_t xListEnd							/* 末尾列表项 */
    	listSECOND_LIST_INTEGRITY_CHECK_VALUE			/* 校验值 */
} List_t;

image-20231114163444578

  1. 在该结构体中, 包含了两个宏,这两个宏是确定的已知常量, FreeRTOS通过检查这两个常量的值,来判断列表的数据在程序运行过程中,是否遭到破坏 ,该功能一般用于调试, 默认是不开启的
  2. 成员uxNumberOfItems,用于记录列表中列表项的个数(不包含 xListEnd)
  3. 成员 pxIndex 用于指向列表中的某个列表项,一般用于遍历列表中的所有列表项
  4. 成员变量 xListEnd 是一个迷你列表项,排在最末尾
列表项相关结构体
struct xLIST_ITEM
{
    	listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE			/* 用于检测列表项的数据完整性 */
    	configLIST_VOLATILE TickType_t xItemValue			/* 列表项的值 */
     	struct xLIST_ITEM * configLIST_VOLATILE pxNext		/* 下一个列表项 */
  		struct xLIST_ITEM * configLIST_VOLATILE pxPrevious	/* 上一个列表项 */
    	void * pvOwner										/* 列表项的拥有者 */
    	struct xLIST * configLIST_VOLATILE pxContainer; 	/* 列表项所在列表 */
   		listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE			/* 用于检测列表项的数据完整性 */
};
typedef struct xLIST_ITEM ListItem_t; 	

image-20231114164241958

  1. 成员变量 xItemValue 为列表项的值,这个值多用于按升序对列表中的列表项进行排序

  2. 成员变量 pxNext 和 pxPrevious 分别用于指向列表中列表项的下一个列表项和上一个列表项

  3. 成员变量 pxOwner 用于指向包含列表项的对象(通常是任务控制块)

  4. 成员变量 pxContainer 用于指向列表项所在列表。

迷你列表项
struct xMINI_LIST_ITEM
{
    	listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE 			/* 用于检测数据完整性 */
		configLIST_VOLATILE TickType_t xItemValue;			/* 列表项的值 */
    	struct xLIST_ITEM * configLIST_VOLATILE pxNext;		/* 上一个列表项 */
   		struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /* 下一个列表项 */
};
typedef struct xMINI_LIST_ITEM MiniListItem_t;

image-20231114164128553

  1. 成员变量 xItemValue 为列表项的值,这个值多用于按升序对列表中的列表项进行排序
  2. 成员变量 pxNext 和 pxPrevious 分别用于指向列表中列表项的下一个列表项和上一个列表项
  3. 迷你列表项只用于标记列表的末尾和挂载其他插入列表中的列表项,因此不需要成员变量 pxOwner 和 pxContainer,以节省内存开销
列表相关API函数介绍
函数描述
vListInitialise()初始化列表
vListInitialiseItem()初始化列表项
vListInsertEnd()列表末尾插入列表项
vListInsert()列表插入列表项
uxListRemove()列表移除列表项
初始化列表vListInitialise()

image-20231114164901659

image-20231114164746730

image-20231114164850447

函数vListInitialiseItem()

image-20231114164924056

image-20231114164935137

image-20231114164944229

函数vListInsert()

此函数用于将待插入列表的列表项按照列表项值升序进行排序,有序地插入到列表中

image-20231114165047846

image-20231114165104681

image-20231114165411119

image-20231114165426735

函数vListInsert(),是将待插入列表的列表项按照列表项值升序进行排序,有序地插入到列表中

函数 vListInsertEnd()

image-20231114165504754

image-20231114165515159

此函数用于将待插入列表的列表项插入到列表 pxIndex 指针指向的列表项前面,是一种无序的插入方法

image-20231114165952815

image-20231114170000741

image-20231114170011380

image-20231114170026807

函数vListInsertEnd(),是将待插入的列表项插入到列表 pxIndex 指针指向的列表项前面;它是一种无序的插入方法!!

函数 uxListRemove()

image-20231114170148130

image-20231114170201873

image-20231114170331728

image-20231114170344204

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1207757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RT-DETR算法优化改进:Backbone改进 | LSKNet:遥感旋转目标检测新SOTA | ICCV 2023

💡💡💡本文独家改进:LSKNet 助力RT-DETR ,替换backbone,Large Selective Kernel Network (LSKNet),可以动态地调整其大空间感受野,以更好地建模遥感场景中各种物体的测距的场景。 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/cat…

Windows装机必装软件|每款都好用到起飞!

1.GeekUninstaller:这款软件是一款功能强大的卸载工具,可以完全删除无用的程序和插件,并清理与之相关的文件夹。它没有广告或捆绑软件,非常干净。 2.PotPlayer:作为一款纯粹的播放器,PotPlayer可以流畅播放…

【数据结构】面试OJ题——带环链表(数学推论)

目录 1.环形链表Ⅰ ​编辑 思路 : 思路拓展 问题一: 问题二: 总结: 问题三: 证明总结第三点 总结: 2. 环形链表Ⅱ 思路一 思路二 3.相交链表 思路: 1.环形链表Ⅰ 141. 环形链…

ebSocket connection to ‘wss://xxx.xxxxxxx.xxx/‘ failed:

目录 1:网络连接问题:检查您是否已连接到互联网,您的网络是否稳定。您还可以尝试重置您的Internet连接或切换到另一个网络。 排除方法:直接打开个网址就知道了,这应该不用教了吧 2:防火墙或代理设置&…

桌面便签软件用哪个?10款全球好用的便签软件推荐,告别杂论无章!

在如今的快节奏社会中,我们的生活和工作节奏越来越快,每天面对的信息成倍地增长。有时候,我们需要随手记下一些重要的事情,或者是一些突然的灵感,这时候就需要一款好用的桌面便签软件。 桌面便签软件可以帮助我们更好…

【机器学习5】无监督学习聚类

相比于监督学习, 非监督学习的输入数据没有标签信息, 需要通过算法模型来挖掘数据内在的结构和模式。 非监督学习主要包含两大类学习方法: 数据聚类和特征变量关联。 1 K均值聚类及优化及改进模型 1.1 K-means 聚类是在事先并不知道任何样…

为什么说美味、珍贵的高贵甜酒是“来自大自然的礼物”?

当德国葡萄酒产区的主要葡萄收获季节成功结束时,人们可以观察到在某些地区个别葡萄园还没有收获。它们没有被酿酒师遗忘,而是在等待成为高贵甜美的佳肴。在秋天的好天气里,葡萄继续生长,每天自然都会增加它们的甜度。来自云仓酒庄…

负公差轧钢测径仪 多规格可定制 普通智能随意选择

负公差轧制的意义: 轧钢厂生产的螺纹钢是按理论重量销,因此稳定的高负差产品极具市场竞争力。负差率即实际重量与理论重量的差值,除以理论重量,乘100%。以螺纹12为例,不按负差生产,在坯重2450kg的情况下&am…

React Hooks实战:Web开发与设计

目录 前言 一、React Hooks 简介 二、React Hooks 的基本用法 1. 使用 useState 创建状态 2. 使用 useEffect 添加副作用 3. 使用 useContext 获取上下文 三、React Hooks 的常见问题 1. 循环引用问题 2. 副作用问题 四、React Hooks 实战案例 1. 使用 useState钩子…

竞赛选题 深度学习的智能中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…

thinkphp 自定义错误页面

在访问无效的UI 这个效果不好&#xff0c;要改成自定义的 <?php namespace app\controller;class ErrorController {public function __call($method,$args){return error request!;} }之后就是提示

【第2章 Docker容器基础入门】 课程介绍 + docker容器介绍

一、课程介绍 1.1、容器运行时 1.2、官网 1.3、私有镜像 二、什么是 Docker &#xff1f; 2.1 Docker 的思想来自于集装箱&#xff0c;集装箱解决了什么问题&#xff1f; 2.2 、K8S 1.25版本之后可能废弃docker&#xff0c;为什么还需要学习docker&#xff1f; 一、课程介…

Docker学习——⑧

文章目录 1、什么是 Docker Compose(容器编排)2、为什么要 Docker Compose&#xff1f;3、Docker Compose 的安装4、Docker Compose 的功能和使用场景5、Docker Compose 文件&#xff08;docker-compose.yml&#xff09;5.1 文件语法版本5.2 文件基本结构及常见指令 6、Docker …

Postgresql数据类型-数据类型转换

PostgreSQL数据类型转换主要有三种方式&#xff1a;通过格式化函数、CAST函数、::操作符&#xff0c;下面分别介绍。 通过格式化函数进行转换 PostgreSQL提供一系列函数用于数据类型转换&#xff0c;如表所示。 通过CAST函数进行转换将varchar字符类型转换成text类型&#xf…

【excel技巧】如何取消excel隐藏?

Excel工作表中的行列隐藏了数据&#xff0c;如何取消隐藏行列呢&#xff1f;今天分享几个方法给大家 方法一&#xff1a; 选中隐藏的区域&#xff0c;点击右键&#xff0c;选择【取消隐藏】就可以了 方法二&#xff1a; 如果工作表中有多个地方有隐藏的话&#xff0c;还是建…

使用select实现定时任务

selectOutOfTime.c里边的代码如下&#xff1a; #include<stdio.h> #include<sys/time.h> #include<sys/types.h> #include<unistd.h> #include <string.h>#define BUF_SIZE 100int main(void){fd_set reads;struct timeval tv;int errorNum;cha…

Elasticsearch7 入门 进阶

1、全文检索 1.1、数据分类 按数据分类的话&#xff0c;主要可以分为以下三类&#xff1a; 结构化数据&#xff1a;固定格式、有限长度&#xff0c;比如mysql存的数据非结构化数据&#xff1a;不定长、无固定格式&#xff0c;比如邮件、Word文档、日志等半结构化数据&#xf…

超详细!必看!!STM32--系统滴答SysTick

一、SysTick是什么&#xff1f; Systick定时器是一个24bit的倒计时&#xff08;向下计数&#xff09;定时器&#xff0c;功能就是实现简单的延时。 SysTick 是一种系统定时器&#xff0c;通常在嵌入式系统中使用。它是 ARM Cortex-M 处理器的一个特殊定时器&#xff0c;用于提…

Kvaser CAN硬件在Top Dutch Solar的遥测系统中发挥重要作用

Top Dutch Solar Racing&#xff08;荷兰顶级太阳能赛车队&#xff09;是2023年Bridgestone World Solar Challenge&#xff08;普利司通世界太阳能挑战赛&#xff09;的参赛车队之一&#xff0c;其赛车上搭载的Kvaser Ethercan HS是为基于Wifi的实时遥测系统捐赠的。Kvaser Me…

读写分离(基于mycat)和全同步复制

一、mycat实现读写分离&#xff08;VIP机制&#xff09; &#xff08;一&#xff09;配置主从复制 &#xff08;二&#xff09;部署mycat 1、安装Java 2、下载mycat安装包 3、解压mycat包 4、设置变量环境 5、启动mycat &#xff08;三&#xff09;客户端连接数据库 1、安装…