九、FreeRTOS之FreeRTOS列表和列表项

news2025/3/6 2:19:02

本节需要掌握以下内容:

1,列表和列表项的简介(熟悉)

2,列表相关API函数介绍(掌握)

3,列表项的插入和删除实验(掌握)

4,课堂总结(掌握)

,列表和列表项的简介(熟悉)

1.1 列表

列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务列表项就是存放在列表中的项目

 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表

列表的特点:列表项间的地址非连续的,是人为的连接到一起的。列表项的数目是由后期添加的个数决定的,随时可以改变

数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后期无法改变

OS中任务的数量是不确定的,并且任务状态是会发生改变的,所以非常适用列表(链表)这种数据结构

举个例子:

 有关于列表的东西均在文件 list.c list.h 中,首先我们先看下在list.h中的,列表相关结构体:

 1、在该结构体中, 包含了两个宏,这两个宏是确定的已知常量, FreeRTOS通过检查这两个常量的值,来判断列表的数据在程序运行过程中,是否遭到破坏 ,该功能一般用于调试, 默认是不开启的

2、成员uxNumberOfItems,用于记录列表中列表项的个数(不包含 xListEnd

3、成员 pxIndex 用于指向列表中的某个列表项,一般用于遍历列表中的所有列表项

4、成员变量 xListEnd 是一个迷你列表项,排在最末尾

列表结构示意图

1.2 列表项 

列表项是列表中用于存放数据的地方,在 list.h 文件中,有列表项的相关结构体定义:

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

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

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

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

列表项结构示意图

 1.3 迷你列表项

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

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

3、迷你列表项只用于标记列表的末尾和挂载其他插入列表中的列表项,因此不需要成员变量 pxOwner pxContainer,以节省内存开销

迷你列表项结构示意图

1.4 列表和列表项的关系

二,列表相关API函数介绍(掌握)

函数

描述

vListInitialise()

初始化列表

vListInitialiseItem()

初始化列表项

vListInsertEnd()

列表末尾插入列表项

vListInsert()

列表插入列表项

uxListRemove()

列表移除列表项

参考文档:FreeRTOS开发指南第七章 ——FreeRTOS列表和列表项”

2.1 初始化列表vListInitialise()

形参

描述

pxList

待初始化列表

初始化后列表结构

2.2 函数 vListInitialiseItem()

形参

描述

pxItem

待初始化列表项

 

 初始化后的列表项结构

2.3 函数vListInsert()

 void vListInsert  List_t * const pxList ,   ListItem_t * const pxNewListItem  )

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

形参

描述

pxList

列表

pxNewListItem

待插入列表项

代码详解查看手册FreeRTOS开发指南第七章 ——FreeRTOS列表和列表项”

 插入值为40的列表项

将列表项xList_Item1,插入列表List

插入值为60的列表项

在前面的基础上,在插入值为60的列表项,结果如下:

插入值为50的列表项

在前面的基础上,在插入值为50的列表项,结果如下:

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

2.4 函数 vListInsertEnd()

       形参

描述

       pxList

列表

pxNewListItem

待插入列表项

 

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

列表项末尾插入图示

假设默认列表如下:  

 此时插入值为30的列表项2,结果如何?

 明天再更!困了,想睡觉!

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

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

相关文章

Windows启动nacos操作文档

Windows启动nacos操作文档 1、新建数据库nacos_config 2、导入nacos\conf\nacos-mysql.sql文件 /******************************************/ /* 数据库全名 nacos_config */ /* 表名称 config_info */ /******************************************/ CREATE T…

JOSEF约瑟时间继电器ARTD-DC110V-2H2D 0.25-2.5s导轨安装

ARTD系列断电延时继电器: ARTD-220VDC-1H1D断电延时继电器;ARTD-220VDC-2H断电延时继电器; ARTD-220VDC-2H2D断电延时继电器;ARTD-220VDC-4H断电延时继电器; ARTD-110VDC-1H1D断电延时继电器;ARTD-110VD…

ssm的“魅力”西安宣传网站(有报告)。Javaee项目。

演示视频: ssm的“魅力”西安宣传网站(有报告)。Javaee项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvc MybatisVueLayuiElemen…

使用调研工具做好问卷调查的方法与策略

提起问卷调查大家应该都不陌生,学校会使用问卷调查收集学生信息或意见、企业使用问卷调查了解市场、深入用户。和其他的调查方式相比,问卷调查更能贴近被调查者真实想法,反馈真实数据。而互联网的崛起也使得大家纷纷从线下问卷转战到线上问卷…

AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃

AD7124-4 实测热电偶数据读取,电压精度到稳定到1uV, 电压波动260nV, 温度精度到0.01℃ AD7124_STM32_ADI官网例程使用stm32 和ad7124做温控调试,发现效果还是不错的,至少比ads1256的效果好多啦!Chapter1 AD7124-4 实测热电偶数据读…

电路装修干货下篇|100平米房子需要多少平方电线呢?福州中宅装饰,福州装修

你是否曾经遇到过这样的情况:在装修房子时,对于电线的使用量感到困惑,不知道需要多少平方的电线才能满足100平方的房子需求。别担心,这篇文章将为你解答这个问题。 首先,我们需要了解电线规格。通常,电线规…

DOM 事件的传播机制

前端面试大全DOM 事件的传播机制 🌟经典真题 🌟事件与事件流 事件流 事件冒泡流 事件捕获流 标准 DOM 事件流 🌟事件委托 🌟真题解答 🌟总结 🌟经典真题 谈一谈事件委托以及冒泡原理 &#x1f3…

Android12蓝牙框架

参考: https://evilpan.com/2021/07/11/android-bt/ https://source.android.com/docs/core/connect/bluetooth?hlzh-cn https://developer.android.com/guide/topics/connectivity/bluetooth?hlzh-cn https://developer.android.com/guide/components/intents-fi…

22、DS1302实时时钟

DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能 RTC:实时时钟,是一种集成电路,通常称为时钟芯片 引脚定义和应用…

深入计算机系统看性能优化

一.引言 “性能优化”,从计算机诞生之初就一直伴随着计算机技术的发展,直到现在。将来也必定不会消失。这是因为每个人都会追求性价比,花最少的钱,办最多的事。生活中也一样,就比如说泡茶,但凡…

弱网模拟工具

一、背景 一个人晚上在家通过 Wi-Fi 上网,在线电影播放基本流畅,可一旦在晚间用网高峰期打视频电话就画面糊,这时不仅可能带宽受限了,还可能有较高的丢包率。与有线网络通信相比,无线网络通信受环境影响会更大&#x…

国产Type-C接口逻辑协议芯片:Type-C显示器芯片方案

产品介绍 双Type-C盲插选型: LDR6282 PD3.0认证协议芯片,USB-IF TID号:212 支持iic,USB转UART,CC升级方式,多年市场验证,显示器市场出货量,显示器大厂采用兼容性NO.1。采用QFN32 5…

python ping3库检测主机是否能ping通(ping命令)代码示例

文章目录 代码示例 代码示例 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import ping3 import timeencoding utf-8def ping(host, time_out1):"""检查ip是否能被ping通,time_out为超时时间,单位为秒,默认为1秒"&q…

apk和小程序渗透测试

apk和小程序渗透测试 文章目录 apk和小程序渗透测试小程序渗透测试apk和小程序的抓包安装证书apk渗透 小程序渗透测试 小程序的默认路径在 C:\Program Files (x86)\Tencent\WeChat\WeChatApp 使用UnpackMiniApp、wxappUnpacker工具完成逆向 先打开UnpackMiniApp.exe工具 选…

llama2.c推理

模型图 代码及分析 不需要考虑任何mask问题,直接通过矩阵计算求出下三角矩阵每个元素的值即可,不需要额外添加mask之类的。 temperature0(确定性)的时候,模型推理每次都取概率最大的(从而导致同样的输入…

【海思SS528 | VO】MPP媒体处理软件V5.0 | 视频输出模块——学习笔记

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

ArkUI组件--image组件

Image:图片显示组件 1.声明Image组件并设置图片的源: Image(src:string|PixelMap|Resource) #src表示源,支持三种格式①string格式,常用来加载网络图片,填写网址。(手机端需要申请网络访问权限&#xff1…

背包9讲系列2-完全背包问题

一、前言 又到周末了,这几天可以腾出时间来把背包系列的其他内容好好肝一肝,本次介绍的是完全背包问题,之前的系列内容请查看: 背包9讲系列1-01背包问题 二、完全背包 2.1 问题描述 有n个物品和一个容量为capacity的背包&…

22款奔驰S400L升级香氛负离子 车载香薰

香氛负离子系统是由香氛系统和负离子发生器组成的一套配置,也可以单独加装香氛系统或者是负离子发生器,香氛的主要作用就是通过香氛外壳吸收原厂的香水再通过空调管输送到内饰中,而负离子的作用就是安装在空气管中通过释放电离子来打击空气中…