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

freertos 源码分析一 list链表数据结构

链表和任务管理是freertos 的核心,先分析链表源码,freertos的链表是双向环形链表,定义与数据结构在list.h中,表项的初始化,插入与删除在list.c中。
数据结构

一、表项数据结构

struct xLIST_ITEM
{listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUEconfigLIST_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;
 listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUElistSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE

这两个是校验数据

    #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 )#define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE#define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE     #else#define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE     TickType_t xListItemIntegrityValue1;#define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE    TickType_t xListItemIntegrityValue2;#endif

不需要的情况下宏展开为空,需下的的情况下是据TickType_t长度变化16-32位的5a5a

 #if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )typedef uint16_t     TickType_t;#define portMAX_DELAY              ( TickType_t ) 0xffff
#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )typedef uint32_t     TickType_t;#define portMAX_DELAY              ( TickType_t ) 0xffffffffUL                                                                                 
#else#error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
#endif

configLIST_VOLATILE TickType_t xItemValue;

#define configLIST_VOLATILE volatile
#ifndef configLIST_VOLATILE#define configLIST_VOLATILE
#endif

在调度任务时,插入表项的依据值,可以为运行时间什么的

   struct xLIST_ITEM * configLIST_VOLATILE pxNext;

指向下一表项

struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;        

指向前一表项

void * pvOwner;

指向该表项的指针

struct xLIST * configLIST_VOLATILE pxContainer;

指向拥有该表项的链表。

二、链表数据结构

typedef struct xLIST
{listFIRST_LIST_INTEGRITY_CHECK_VALUEvolatile UBaseType_t uxNumberOfItems;ListItem_t * configLIST_VOLATILE pxIndex;MiniListItem_t xListEnd;listSECOND_LIST_INTEGRITY_CHECK_VALUE
} List_t;   

分解

volatile UBaseType_t   uxNumberOfItems;
typedef unsigned long    UBaseType_t;

表项数目

ListItem_t * configLIST_VOLATILE pxIndex;

表项索引

MiniListItem_t xListEnd;

表尾,若定义configUSE_MINI_LIST_ITEM ,使用缩减表项数据结构,否则还是表项的数据结构,参考以下

#if ( configUSE_MINI_LIST_ITEM == 1 ) struct xMINI_LIST_ITEM{   listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUEconfigLIST_VOLATILE TickType_t xItemValue;struct xLIST_ITEM * configLIST_VOLATILE pxNext;struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;};  typedef struct xMINI_LIST_ITEM MiniListItem_t;
#elsetypedef struct xLIST_ITEM      MiniListItem_t;
#endif      

相关文章:

freertos 源码分析一 list链表数据结构

链表和任务管理是freertos 的核心,先分析链表源码,freertos的链表是双向环形链表,定义与数据结构在list.h中,表项的初始化,插入与删除在list.c中。 数据结构 一、表项数据结构 struct xLIST_ITEM {listFIRST_LIST_IT…...

小程序uni-swiper-action-item滑动不了

<uni-swipe-action><uni-swipe-action-item :options"options"></uni-swipe-action-item></uni-swipe-action> 要在options前面加上right或left <uni-swipe-action><uni-swipe-action-item :right-options"options">&…...

【新课】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

本课程由云贝教育-刘峰老师出品&#xff0c;感谢关注 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性&#xff0c;同时提高性能。本课程基于当前主流版本Oracle 1…...

【从零开始的rust web开发之路 四】rust语言tokio异步使用redis教程

文章目录 前言一、首先引入依赖二、创建redis客户端三、相关操作设置值mset设置多个key值设置含有过期时间的值如果key不存在才设置获取基本类型值删除一个键删除多个键判断键是否存在 如何使用json序列化导入相关依赖代码相关实例 总结 前言 使用rust写web&#xff0c;自然是…...

uniapp本地存储的几种方式localStorage

在uniapp开发中&#xff0c;本地存储是一个常见的需求。本地存储可以帮助我们在客户端保存和管理数据&#xff0c;以便在应用程序中进行持久化存储。本文将介绍uniapp中本地存储的几种方式&#xff0c;以及相关的代码示例。 介绍 在移动应用开发中&#xff0c;我们经常需要将…...

扩展学习|统计学习理论(SLT)与极限学习机(ELM)应用于大社会数据分析

文献来源&#xff1a;[1] Oneto L , Bisio F , Cambria E ,et al.Statistical Learning Theory and ELM for Big Social Data Analysis[J].IEEE Computational Intelligence Magazine, 2016, 11(3):45-55.DOI:10.1109/MCI.2016.2572540. 提取链接&#xff1a;链接&#xff1a;h…...

配置实例—交换机VLAN聚合配置实例

一、组网需求 某公司拥有多个部门且位于同一网段&#xff0c;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN中。现由于业务需要&#xff0c;不同部门间的用户需要互通。如图1所示&#xff0c;VLAN2和VLAN3为不同部门&#xff0c;现需要实现不同VLAN间的用户可…...

网络开发的隐形壁垒:如何巧妙解决跨域难题?

什么是跨域 跨域是浏览器受同源&#xff08;协议、域名、端口&#xff09;策略的限制&#xff0c;不允许不同源的站点之间进行某些操作&#xff08;如发送ajax请求&#xff0c;操作dom&#xff0c;读取cookie&#xff09;&#xff0c;如果不进行特殊配置是不能操作成功的&…...

【极简】conda同一个服务器上迁移环境 export / create

导出 直接看conda的document&#xff1a;https://docs.conda.io/projects/conda/en/latest/commands/env/export.html conda env export conda env export --file SOME_FILE重建 conda documentation: https://docs.conda.io/projects/conda/en/latest/commands/env/create.…...

HBase 数据导入导出

HBase 数据导入导出 1. 使用 Docker 部署 HBase2. HBase 命令查找3. 命令行操作 HBase3.1 HBase shell 命令3.2 查看命名空间3.3 查看命名空间下的表3.4 新建命名空间3.5 查看具体表结构3.6 创建表 4. HBase 数据导出、导入4.1 导出 HBase 中的某个表数据4.2 导入 HBase 中的某…...

(java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~

目录 冒泡排序(BubbleSort)&#xff1a; 代码详解&#xff1a; 冒泡排序的优化&#xff1a; 选择排序(SelectSort)&#xff1a; 代码详解&#xff1a; 插入排序&#xff08;InsertSort&#xff09;&#xff1a; 代码详解&#xff1a; 希尔排序(ShellSort)&#xff1a; 法一…...

服务器托管的作用是什么?

服务器托管是将企业的服务器和相关设备托管到具有完善机房设施、高品质网络环境与运营经验的网络数据中心内&#xff0c;服务器托管在维护方面一般是由客户负责的&#xff0c;或者是由其他的授权人进行远程维护。 那服务器托管的作用都有哪些呢&#xff1f; 服务器托管不需要企…...

美团启动架构调整:聚力核心本地商业,提升科技与境外业务优先级

2月2日&#xff0c;美团CEO王兴发布内部邮件宣布新的组织架构调整。邮件显示&#xff0c;美团对核心本地商业相关多项业务进行了整合&#xff0c;并进一步提升了科技与国际化相关业务的优先级。 在核心本地商业上&#xff0c;美团对过去相对独立的事业群进行了整合。主要调整包…...

监测Tomcat项目宕机重启脚本(Linux)

1.准备好写好的脚本 #!/bin/sh # 获取tomcat的PID TOMCAT_PID$(ps -ef | grep tomcat | grep -v tomcatMonitor |grep -v grep | awk {print $2}) # tomcat的启动文件位置 START_TOMCAT/mnt/tomcat/bin/startup.sh # 需要监测的一个GET请求地址 MONITOR_URLhttp://localhost:…...

道可云元宇宙每日资讯|北京:推进元宇宙在智慧城市应用

道可云元宇宙每日简报&#xff08;2024年2月2日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 石狮市检察院“元宇宙智慧展馆”正式启用 为深入实施数字检察战略&#xff0c;主动探索元宇宙技术在未成年人检察、公益诉讼检察等方面的应用&#xff0c;打造集案件…...

Logback学习

logback 1、logback介绍 Logback是由log4j创始人设计的另一个开源日志组件&#xff0c;性能比log4j要好。 lockback优点&#xff1a; 内核重写、测试充分、初始化内存加载更小&#xff0c;这一切让logback性能和log4j相比有诸多倍的提升。logback非常自然地直接实现了slf4j…...

【Chrono Engine学习总结】2-可视化

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 0、基本概念 类型说明&#xff1a; Chrono的可视化包括两块&#xff1a;实时可视化&#xff0c;以及离线/后处理可视化。 其中&#xff0c;实时可视化&#xff0c;又…...

pytorch创建tensor

目录 1. 从numpy创建2. 从list创建3. 创建未初始化tensor4. 设置默认tensor创建类型5. rand/rand_like, randint6. randn生成正态分布随机数7. full8. arange/range9. linspace/logspace10. Ones/zeros/eye11. randperm 1. 从numpy创建 2. 从list创建 3. 创建未初始化tensor T…...

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1&#xff09;介绍 命令中多个参数之间使用空格进行分隔&#xff0c;而 cmake 会将双引号引起来的内容作为一个整体&#xff0c;当它当成一个参数&#xff0c;假如你的参数中有空格&#xff08;空格是参数的一部分&#xff09;&#xff0c;那么就可以使…...

JavaScript 基础 - 第1天

介绍 掌握 JavaScript 的引入方式&#xff0c;初步认识 JavaScript 的作用 引入方式 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有两种方式…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…...