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      

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

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

相关文章

SQL题解之使用union和sum解决同时在线人数问题

现有各直播间的用户访问记录表(live_events)如下,表中每行数据表达的信息为,一个用户何时进入了一个直播间,又在何时离开了该直播间。 user_id (用户id)live_id (直播间id)in_datetime (进入直播间的时间)out_datetim…

MySql调优(一)综述

mysql的优化,除了硬件配置上的升级,还有以下一些方法 一、读写分离 二、表分区 三、拆表分为水平拆表和垂直拆表 见mybatis shardingjdbc篇。 四、SQL优化 1、新增 大数据批量新增 2、删除 delete from 删除语句加where条件,如果是删…

深度解读NVMe计算存储协议-3

在NVMe计算存储架构中,Copy命令用于在不同类型的命名空间之间进行数据复制: Memory Copy命令:定义于SLM(Subsystem Local Memory)命令集,主要用于从非易失性存储命名空间(NVM namespaces&#x…

Jenkins插件安装推荐

Jenkins插件安装推荐 注: 本教程由羞涩梦整理同步发布,本人技术分享站点:blog.hukanfa.com 转发本文请备注原文链接,本文内容整理日期:2024-01-31 csdn 博客名称:五维空间-影子,欢迎关注 说…

ERP系统助力车间生产:班组、设备、工序一网打尽!实现生产全流程可视化!

​随着企业生产规模的扩大和业务复杂性的增加,车间管理在企业运营中的地位日益突出。ERP系统作为企业资源管理的核心平台,为车间管理提供了全面的解决方案。通过合理配置和使用ERP系统的功能模块,企业可以优化生产流程、提高生产效率、确保产…

SOME/IP SD 协议介绍(二) SOME/IP-SD消息格式

SOME/IP-SD消息格式 通用要求 服务发现消息应通过UDP进行支持。准备将服务发现消息传输到TCP中以供将来使用情况。服务发现消息应以SOME/IP头开始,如图1所示: • 服务发现消息应使用0xFFFF的Service-ID(16位)。 • 服务发现消息…

榜单!高阶智驾冲刺10%搭载率,哪些玩家占据自研感知「高地」

得「感知」者,是智能化尤其是智能驾驶技术变革快速演进期的受益者。尤其是对于车企来说,规控自研易,感知自研难。 尤其是过去几年时间,基于机器学习和深度学习,TransformerBEV技术进一步提高对异常行为的预测准确性&am…

CHS_06.2.3.4_2+用信号量实现进程互斥、同步、前驱关系

CHS_06.2.3.4_2用信号量实现进程互斥、同步、前驱关系 知识总览信号量机制实现进程互斥信号量机制实现进程同步信号量机制实现前驱关系 知识回顾 各位同学 大家好 在这个小节中 我们要学习怎么用信号量机制来实现进程的同步互制关系 知识总览 那么 我们之前学习了互斥的几种软…

每日OJ题_算法_前缀和⑦_力扣525. 连续数组

目录 力扣525. 连续数组 解析代码 力扣525. 连续数组 525. 连续数组 难度 中等 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最…

只有一台显示器,如何实现同时显示4台主机的HDMI信号?

HDMI画面分割器概述 HDMI画面分割器属于画面分割器中的一种,因为其信号接口是HDMI接口而得其名,多用于监控、多媒体、视频会议等常见的场景 HDMI画面分割器-图 HDMI画面分割器工作原理 使用硬件方式将多路HDMI信号以多种不同的模式分割显示在同一个显示…

Delphi常用的4种过程函数传递参数的方式

在Delphi中,有多种方式可以传递参数给过程或函数。以下是其中几种常用的方式: 1. 值传递(By Value):将参数的值复制给过程或函数的形参。在过程或函数中对形参的修改不会影响实参的值。 procedure MyProc(a: Integer…

java集合面试题:说说 List,Set,Map 三者的区别?三者底层的数据结构?

List、Set和Map是Java集合框架中的三个常用接口,它们有以下区别: List: List是有序的集合,允许重复元素。可以通过索引访问元素,支持按照元素的插入顺序进行遍历。常见的实现类有ArrayList和LinkedList。底层数据结构…

香蕉派BPI-M7 瑞芯微RK3588 人工智能开源硬件开发板公开发售

香蕉派(Banana Pi) BPI-M7瑞芯微K3588开源硬件单板计算机公开销售,支持WiFi 6和BT5.2,硬件有3个版本:8G Ram64G eMMC, 16G Ram128 eMMC和32G Ram128 eMMC 香蕉派BPI-M7采用睿芯最新旗舰RK3588八核64位处理器,最高频率为2.4GHz, 6 TOPS NPU&…

谷歌把GenAI装进Chrome

谷歌不甘示弱,在其Chrome浏览器中引入了新的实验性生成式AI功能,以简化并为用户提供更高效的浏览体验。 值得注意的是,微软去年推出了Edge浏览器和人工智能驱动的必应搜索引擎的集成。随着Chrome M121版本的发布,谷歌打算利用最新…

unaipp微信小程序-跳转switchTab bug

bug wx.switchTab: url 不支持 queryString 解决 uni.setStorageSync("selectedLabel", selectedLabel) uni.getStorageSync("selectedLabel") 跳转到tabar导航栏,switchTab不能携带参数,我使用的是setStorageSync 储存&#x…

2024年美赛赛前复习大纲

CC数模-优质解答 引言 数学建模是一个将数学理论和方法应用于解决现实世界问题的过程。在数学建模比赛中,学生需要运用自己的数学知识和技能,解决给定的复杂问题。这不仅是一次展示自己能力的机会,也是一次学习和成长的过程。随着比赛的临近…

linux临时用户

linux临时用户 在 Linux 系统中,你可以创建一个临时用户,这个用户在一段时间后会自动删除。然而,这通常需要一些额外的配置,并且不是所有的 Linux 发行版都直接支持这个功能。 如果你只是想要一个只在当前会话中存在的用户&…

Wheeltec小车的开发实录(2)

小车初步启动控制 小车终端运行l: roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch 控制终端运行(多机通讯设置后,可以不必执行这一步) export ROS_HOSTNAME192.168.224.122(控制终端ip)export R…

【Tomcat与网络8】从源码看Tomcat的层次结构

在前面我们介绍了如何通过源码来启动Tomcat,本文我们就来看一下Tomcat是如何一步步启动的,以及在启动过程中,不同的组件是如何加载的。 一般,我们可以通过 Tomcat 的 /bin 目录下的脚本 startup.sh 来启动 Tomcat,如果…

【HarmonyOS应用开发】UIAbility实践第二部分(六)

内容接上篇 【HarmonyOS应用开发】UIAbility实践第一部分(五) 末尾含示例源码 三、UIAbility的生命周期 当用户浏览、切换和返回到对应应用的时候,应用中的UIAbility实例会在其生命周期的不同状态之间转换。 UIAbility类提供了很多回调&a…