container_of分析

1G/2.5G Ethernet PCS/PMA or SGMII SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,所以总的数据速率为1.25Gbps=625Mbps*2。参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。在TXD发送的串行数据中,每8比特数据会插入TX_EN/TX_ER 两比特控制信息,同样,在RXD接收数据中,每8比特数据会插入RX_DV/RX_ER 两比特控制信息。 阅读详情

container_of是一个伟大的宏,其实现非常巧妙,值得学习。功能:根据对象的一个成员指针获取该对象的指针

#define container_of(ptr, type, member)({ /
const typeof(((type*)0)->member)*__mptr=(ptr); /
(type *)((char*)__mptr-offsetof(type,member));})

#define offsetof(TYPE, MEMBER)((size_t)&((TYPE*)0)->MEMBER)

1.ptr为物理地址,其类型和member类型一致,最终使用typeof(((type*)0)->member)由编译器自动返回member的类型
2.type为包含member成员的结构体
3.offsetof(type,member)为member成员在type结构体中的偏移值,大小范围0~sizeof(type)字节
(因为以0地址为type类型数据结构的起始地址)
4.ptr- offsetof()就等于包含该ptr的type结构体父变量的物理起始地址,强制转换为(type*).

值得一提的是,offsetof宏的实现非常巧妙,它把0地址转化为TYPE结构的指针,然后获取该结构中MEMBER成员的指针,并将其强制类型 转换为size_t类型。于是,由于结构从0地址开始定义,因此,cast后的MEMBER成员地址,实际上就是它在结构中的偏移量。这也显示出了C语言中指针的强大。因为,在某个体系结构下实现的libc,结构中各个成员的偏移总是可以预见的。offsetof的定义在stddef.h中。

利用PaddleOCR识别增值税发票平台验证码(开箱即用) 下面直接讲解利用paddleocr识别的思路,为什么使用paddleocr,因为paddle中集成了较好的ocr文字识别模型,开箱即用即可,废话不多说,剑指主题,识别思路步骤如下。 阅读详情

相关推荐

Python爬虫实战(基础篇)—23—爬取微信小程序<随机目的地旅行>生成随机地址(附GUI版)

爬取微信小程序<随机目的地旅行>生成随机地址

weixin_42636075的博客 1228

contain_of()函数的用法

container_of()函数 1.该宏定义在include/linux/kernel.h中 439/** 440 * container_of - cast a member of a structure out to the containing structure 441 * @ptr: the pointer to the member. 442 * @type: t...

baiseda 584

STM32 SPI驱动TFT LCD实战:时序配置与硬件协同

SPI(串行外设接口)是一种高速、全双工、同步串行通信协议,广泛应用于微控制器与显示模组等外设的数据交互。其核心依赖时钟极性(CPOL)与时钟相位(CPHA)组合定义的四种工作模式,直接影响数据采样可靠性;而片选(NSS)与MOSI/SCLK等信号的硬件映射,则决定了多设备共总线下的通信稳定性。在TFT LCD驱动场景中,SPI凭借低开销、高吞吐优势成为主流选择,尤其适配ST7789、ILI9341等集成显示控制器的模块。本文聚焦STM32L系列MCU通过SPI2驱动1.3寸LCD的完整链路,涵盖Mode

php55的博客 1208

c++11下 container_of编译不通过

gcc main.cpp -o main -std=c++11 报错如下:   原因:需要支持gnu++11扩展 gcc main.cpp -o main -std=gnu++11   编译通过

linuxsmallping的专栏 1514

运行stable-diffusion出现的问题

解决:即用 https://github.com/CompVis/taming-transformers/blob/master/taming/modules/vqvae/quantize.py 新文件,替换错误提示文件中的全部内容即可。5.新建文件夹 CompVis/stable-diffusion-safety-checker/将下载的四个文件放入 解决!后面还会遇到'openai/clip-vit-large-patch14离线下载的问题,同样步骤解决。解决:下载后离线,步骤如下。

weixin_52121118的博客 2347

QT编程系列1--QT学习前需知

本周学习了一些QT编程方面的知识,学写了几个程序,这里把记录下来。一方面对前面学习的知识做一个总结,便于以后复习、再学习和应用;另一方面也和大家做个交流,有不足的地方请各位看官多指点。   首先是做一些学习之前的交代:一,学习QT需要哪些基础;二,学习QT有哪些用途,QT较其他的开发工具有哪些特点;三,学习QT的思路。

霜月孤鸟&RTEMS&TinyOS 1115

C语言基础--container_of

一个朋友说在keil里想使用container_of函数,然后我百度了一下,发现了这篇帖子,点击打开链接,将其复制放在keil5中编译不通过,在了解了container_of的作用之后,自己写了一个,并且已经测试通过。 首先,container_of的作用是从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 containe...

aMaCoder 2040

YOLOv11数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强

本文介绍了YOLOv11目标检测中的数据集增强技术,重点解决图像与标注标签同步扩充的关键问题。文章系统分析了三类增强方法:几何变换(翻转、旋转、缩放)、颜色变换(亮度、对比度调整)和高级增强(Mosaic、MixUp),并探讨了其在小样本检测、复杂场景泛化和多方向目标识别等场景的应用价值。针对核心的标签同步问题,提供了基于Python和OpenCV的详细代码实现示例,展示如何对图像进行水平翻转和缩放操作时精确调整YOLO格式边界框坐标。该技术能有效解决训练数据不足和多样性匮乏问题,显著提升模型的泛化性能。

走向CTO的路上... 1512

C/C++ 11 offsetof、container_of 宏函数的实现(无限制编译器)

sample: struct abc { int a; short b; int c; }; int main() { abc* a = new abc(); abc* b = container_of(&a->c, abc, c); return 0; } impl: #ifndef offseto...

liulilittle的博客 1376

【传感器模块项目实战】机器人/无人驾驶常用传感器模型、选型与安装

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!无人车&无人机导航合集本文先对机器人/无人驾驶常用传感器模型、选型与安装做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容分为位置式绝对型编码器增量式编码器打比赛的时候用过欧姆龙的增量式编码器,也用过待编码器的步进电机。【防盗标记–盒子君hzj】增量式编码器正交编码输出信号,用于识别正转和反转,通过微控制器(单片机)的片内外设硬件/软件解码(1)惯性器件-机械陀螺。

qq_35635374的博客 446

RK3568 Android14 移远GNSS卫星导航模组LC760Z GPS北斗定位模块调试

Rockchip RK3568 作为一款高性能、低功耗的国产SoC,被广泛应用于工业网关、车载中控和智能手持终端等领域。在这些应用场景中,位置服务(Location Service) 往往是不可或缺的功能。本文将详细记录如何集成GPS模组到 RK3568 开发板上,通过 UART(串口)接口集成通用的 GPS 模块(如 移远LC760Z 或 EC20 4G 模块自带的 GPS 功能也差不多),并实现数据的解析与上层应用对接。

qq_33427070的博客 1412

C语言高级用法---container_of()

在Linux内核源码中,实现和链表相关的接口list_entry()时,会调用container_of()宏定义,它的作用是:给定结构体中某个成员的地址、该结构体类型和该成员的名字获取这个成员所在的结构体变量的首地址。 container_of()宏定义实现如下所示 /** * container_of - cast a member of a structure out to the cont...

终身学习的程序猿 2万+

【100%通过率】华为od统一考试B卷【需要打开多少监视器】JAVA&Go 实现

某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开:给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器

MISAYAONE的博客 1万+

Linux container_of 分析

container_of 简述 container_of  是 Linux 中最常用的宏之一,不仅仅在上一章的链表数据结构中,在很多的地方都有使用到,他的作用是: 根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针,以便对结构体的其他成员进行操作 是不是超有用?来,先贴代码为敬: /** * container_of - cast a member of a st...

StephenZhou 542

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

container_of源码分析

container_of源码分析container_of宏定义分析BUILD_BUG_ON_MSG分析offsetof 在linux/android代码中经常能看到container_of这个函数,这次抽时间去学了下它具体的实现机制。本文代码基于android10,rk3399平台代码。 container_of宏定义 定义位于:rk3399-android-10/kernel/include/linux/kernel.h /** * container_of - cast a member of a s

krokodil98的博客 492

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux内核 container_of 命令宏图解分析

一、背景 二、宏 1、 2、语法分析 3、逻辑处理分析

STCNXPARM的博客 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

openharmony中hdf框架框架中CONTAINER_OF函数分析及应用示例

宏是一种在C语言中常用的技巧,用于通过结构体中的某个成员指针反向推导出该结构体本身的指针。这个宏非常有用,尤其是在处理链表、树等数据结构时,当我们只有某个节点的某个成员变量的指针时,可以通过这个宏获取到该节点的完整结构体指针。宏通过计算结构体成员相对于结构体起始地址的偏移量,然后从成员指针中减去这个偏移量,从而得到结构体的起始地址。这是一种非常巧妙的技术,可以在不直接持有结构体指针的情况下,通过结构体中的某个成员指针来获取整个结构体的指针。结构体的指针,并允许我们通过这个指针访问结构体的其他成员。

gkxg001的博客 615

container_of的实现分析

container_of的实现分析 分类: linux驱动 在linux内核中经常可以看到container_of的身影,也是linux引以为豪的地方之一了。《linux设备驱动开发详解》132页对container_of的作用作了说明——通过结构体成员的指针找到这个成员所在结构体的指针。但没有具体分析它是怎么实现的。 下面我们先看看这个宏的定义: /**  * containe

fyyy4030的专栏 676

linux内核的container_of()宏定义分析

一、#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER ) 1. ( (TYPE *)0 ) 将零转型为TYPE类型指针; 2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址; 4.(size_t)(&(((TYPE*)0

buaa_shang的专栏 1190

linux内核container_of宏定义分析

http://www.cnitblog.com/puppypyb/archive/2008/08/20/48172.aspx linux内核container_of宏定义分析 一、#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER ) 1. ( (TYPE *)0 ) 将零转

643

container_of宏分析

1. 背景概要 最近这几天在忙于研究spi驱动,在看spi核心代码(spi.c)时,发现一个container_of宏,不甚了解,于是深入研究之。这不看不知道,一看吓一跳啊,一跟进去又给你整个更复杂的宏。好的,废话不多说,直接上代码: /* kernel3.0.15/drivers/spi/spi.c */ /* kernel3.0.15/include/linux/spi/spi.h

后知后觉的专栏 798

分析 container_of 宏

分析 container_of 宏 功能和使用 这个宏的作用是通过得知结构体中的某个成员变量的地址,然后找到结构体的首地址。 举例说明: 有个结构体: struct person { int age; int salary; char *name; }; struct person leo; int *salary_ptr = &(leon.salary); 得...

RedMorning的专栏 843

关于container_of函数分析

#include <stdio.h> #define offset_of(type,member) ((int)&(((type *)0)->member)) #define container_of(ptr,type,member) ({\ const typeof(((type*)0)->member) *__mptr = ...

weixin_30539625的博客 93

container_of宏定义分析

container_of(ptr, type, member) 位于Linux内核源码Kernel.h中: #define offset_of(type, memb) \ ((unsigned long)(&((type *)0)->memb)) #define container_of(ptr, type, member) ({ \ con...

分享嵌入式Linux技术知识 778

container_of图文分析

container of()函数分析 简介 Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 Container_of的定义如下: #define container_of(ptr, type, member) ({ \ const typeo...

as3522的博客 184
上一篇: 海量数据处理常用数据结构及方法
下一篇: likely && unlikely
IT_Linux
博客等级 码龄14年 31粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值