FreeRtos进阶——通用链表的实现方式

在这里插入图片描述

通用链表实现方式(一)

struct node_t {struct node_t *next;
};struct person {struct node_t node;char *name;int age;
};struct dog {struct node_t node;char *name;int age;char *class;
};

在此链表中,node结构体被放在了最前面,因此当我们用node结构体存储不同类型(dog或者person)结构体信息时,node 结构体位置就是dog或者person结构体的位置。在想要使用dog或者person时,只需要使用强制类型转换的方法即可。

通用链表实现方式(二)

使用操作系统:Linux,RT-Thread

struct person {char *name;int age;struct node_t node;char *address;
};struct dog {char *name;int age;char *class;struct node_t node;    
};

在此链表中,node结构体的位置在最后面,因此我们需要根据person或者dog结构体的大小反推出他们的指针起始位置。
具体代码如下:

p = (struct person *)((char *)pre - (unsigned int)&((struct person *)0)->node);
n = (struct person *)((char *)next - (unsigned int)&((struct person *)0)->node);

pre指针转换为char*后加减操作是以字节为单位了,否则是以sizeof(struct node_t)为单位来进行加减计算。
unsigned int类型的强制转换是因为要减去对应的字节数。

通用链表实现方式(三)

使用操作系统:FreeRtos

struct node_t {void *container;struct node_t *next;
};

与前面俩种方法类似,如果直接在contianer存储person或者dog的结构体地址,那么就不需要再去计算或者反推对应结构体的地址了。

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

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

相关文章

【一百零一】【算法分析与设计】差分,1109. 航班预订统计,P4231 三步必杀,P5026 Lycanthropy

1109. 航班预订统计 这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] [first(i), last(i), seats(i)] 意味着在从 first(i) 到 last(i) (包含 first(i) 和 last(i) )…

瑞吉外卖项目学习笔记(一)

项目展示: 一、软件开发整体介绍 1.1 软件开发流程 作为软件开发人员,我们的主要工作是在 编码阶段 1.2 角色分工 1.3 软件环境 二、瑞吉外面项目介绍 2.1 项目介绍 系统管理后台页面: 移动端页面: 2.2 产品原型展示 产品原型是…

android 在onCreate方法中获得view的宽高

view在绘制完成后才会有自己的宽高,所以在onCreate中要获得view的宽高可以通过以下4中方法: 1、ViewTreeObserver:监听界面绘制事件,在layout时调用,使用完毕后记得removeListener 2、view.post,因为runn…

STM32学习问题总结(1)—CubeMX生成后下载无反应

在CubeMX生成项目后,写好代码,测试LED时发现怎么都不行,然后发现时Keil工程配置的问题 第一步: 打开Keil魔术棒的Debug下的Settings 第二步: 勾选Flash Download下的Reset and Run即可 被卡了两个小时,…

洗地机什么牌子好?洗地机前十名排行榜

现代吸拖扫一体洗地机不仅高效,还具有智能化设计,使清洁变得轻松。它强大的吸尘功能能够轻松应对灰尘和碎屑,不论是硬质地面还是地毯,都能提供理想的清洁效果。配合拖地功能,通过内置水箱和智能拖布,能彻底…

Kong网关安全设置-隐藏头部版本信息

方法很简单,找到kong的配置文件(/etc/kong/kong.conf),修改headers参数,改为headersoff。 不过,大家更多的是使用Docker部署的Kong网关。而容器内一般没有vi或vim命令,或者无权写入文件。可以通过容器和宿…

机器学习 - 常见问题与解决方案

1. 加载数据 问题:数据源不可用或连接失败 解决方案:检查数据源的连接设置,如数据库的URL、端口、用户名和密码,确保数据源服务是启动的。如果是网络原因,检查网络连接是否正常,是否存在防火墙阻止访问。…

国产飞腾/龙芯/瑞芯微芯片在信创行业应用:金融行业、教育行业、党政机关

党政机构 方案背景: 在国家提出信息技术应用创新发展战略的大环境下,政务大厅需要基于国家科技自主技术深入推进“互联网政务服务”。加快建设全国一体化在线政务服务平台,进一步落实创新驱动发展战略,提升政务网络安全保障能力…

NATS-研究学习

NATS-研究学习 文章目录 NATS-研究学习[toc]介绍说明提供的服务内容各模式介绍测试使用发布订阅(Publish Subscribe)请求响应(Request Reply)队列订阅&分享工作(Queue Subscribers & Sharing Work)…

运放的自激振荡问题

运放的自激振荡指的是当运算放大器加电后,在没有外部信号输入的情况下,输出端会出现高频类似于正弦波的波形。 运算放大器产生自激的原因以及解决办法-CSDN博客 a)当振荡由分布电容、电感等引起时,可通过反馈端并联电容,抵消影响…

在服务器上部署测试 Ubuntu iptables防火墙的设置与优化

今天我在三丰云的这台免费服务器上进行部署测试。说实话,这个免费云服务器真的不错,配置也蛮强悍的,1核CPU、1G内存、10G硬盘、5M带宽,性能完全足够日常使用了。三丰云的这个免费云服务器真心不错,值得推荐给大家,简直是对IT爱好者的一个超级大礼物! 废话不多说,让我们开始今天…

【开源】课程管理平台 JAVA+Vue.js+SpringBoot+MySQL

目录 一、项目介绍 课程管理模块 作业题目模块 考试阅卷模块 教师评价模块 部门角色菜单模块 二、项目截图 三、核心代码 一、项目介绍 Vue.jsSpringBoot前后端分离新手入门项目《课程管理平台》,包括课程管理模块、作业题目模块、考试阅卷模块、教师评价模…

spoon工具的安装与配置

spoon对应的jdk包下载资源地址 spoon软件下载资源地址 首先需要安装jdk,配置java环境,安装好后,cmd一下,查看java -version,看看是否成功安装,如果失败,查看系统环境变量,去配置jdk…

Java | Leetcode Java题解之第122题买卖股票的最佳时机II

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProfit(int[] prices) {int ans 0;int n prices.length;for (int i 1; i < n; i) {ans Math.max(0, prices[i] - prices[i - 1]);}return ans;} }

大模型日报2024-06-01

大模型日报 2024-06-01 大模型资讯 AutoCoder超越GPT-4 Turbo和GPT-4o&#xff0c;成为首个在人类评估基准测试中取得最高分的大型语言模型 摘要: AutoCoder在2024年4月的评估中&#xff0c;以90.9%的pass1成绩超越了GPT-4 Turbo和GPT-4o&#xff0c;成为首个在人类评估基准测试…

Python保存为json中文Unicode乱码解决json.dump()

保存为json中文Unicode乱码&#xff1a; 可以看到&#xff0c;中文字符没有乱码&#xff0c;只是出现了反斜杠&#xff0c;此时解决方法应考虑是否进行了二次序列化。 一、原因1 在dump时加入ensure_asciiFalse 即可解决&#xff0c;即json.dump(json_data, f, indent4, en…

PHP语言与Python:两种编程语言的深度比较与探讨

PHP语言与Python&#xff1a;两种编程语言的深度比较与探讨 在编程领域&#xff0c;PHP和Python作为两种具有广泛应用和深厚背景的语言&#xff0c;各自拥有独特的优势和特点。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;对这两种语言进行深入的比较和探讨&a…

阿里云布置net core 项目

一、 创建镜像 给镜像添加触发器&#xff0c;编译的时候会触发k8s集群里的taget链接&#xff0c;从而更新项目 二&#xff0c;创建k8s集群 使用镜像创建 添加基本信息 镜像名称&#xff1a;镜像仓库》基本信息公网地址镜像Tag:创建镜像时的镜像版本镜像配置为&#xff1a;总…

1.2 嵌入式八股文(二)

一、关键字 C语言宏中"#“和”##"的用法 1. &#xff08;#&#xff09;字符串化操作符 作用&#xff1a;将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏 定义中&#xff0c;且必须置于宏定义体中的参数名前。 如&#…

opencv笔记(13)—— 停车场车位识别

一、所需数据介绍 car1.h5 是训练后保存的模型 class_directionary 是0&#xff0c;1的分类 二、图像数据预处理 对输入图片进行过滤&#xff1a; def select_rgb_white_yellow(self,image): #过滤掉背景lower np.uint8([120, 120, 120])upper np.uint8([255, 255, 255])#…