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

Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值

I²C-Tools 工具集介绍

i2c-toolsLinux 下用于 I²C 设备调试 的用户空间工具集(你也可以把它看成是一个库,类似于之前自己用过的触摸屏库tslib库、FreeType矢量字符库),它提供了一系列命令行工具,可以扫描、读取、写入 I²C 设备,非常适合嵌入式开发和调试 I²C 设备,如 传感器、EEPROM、GPIO 扩展器 等。


1. i2c-tools 的主要工具

i2c-tools 工具集主要包含以下几个命令:

命令作用
i2cdetect扫描 I²C 总线,查找可用的设备地址
i2cdump读取 I²C 设备的全部寄存器数据
i2cget读取 I²C 设备某个寄存器的数据
i2cset向 I²C 设备某个寄存器写入数据
i2ctransfer发送更复杂的 I²C 读/写命令

2. i2c-tools 详细命令解析

(1)i2cdetect — 扫描 I²C 设备

功能
扫描 I²C 总线上的设备,显示哪些地址上有响应的 I²C 设备。

使用示例

i2cdetect -y 1
  • 扫描 I²C 总线 1,并显示已连接设备的地址。

输出示例

     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77                         
  • 4877 代表有设备响应。
  • -- 代表该地址无设备响应。

(2)i2cdump — 读取 I²C 设备所有寄存器

功能
读取 I²C 设备的全部寄存器内容,适用于调试寄存器数据。

使用示例

i2cdump -y 1 0x50
  • 读取 I²C 总线 10x50 地址 设备的寄存器数据。

输出示例

     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
00: 12 34 56 78 90 AB CD EF 12 34 56 78 90 AB CD EF 
10: 12 34 56 78 90 AB CD EF 12 34 56 78 90 AB CD EF 
...
  • 以 16 进制格式显示 I²C 设备的寄存器内容。

(3)i2cget — 读取单个寄存器

功能
读取 I²C 设备某个寄存器 的值。

使用示例

i2cget -y 1 0x50 0x10
  • 读取 I²C 总线 10x50 设备 0x10 寄存器 的值。

输出示例

0xAB
  • 说明 0x10 地址 处的值是 0xAB

(4)i2cset — 写入 I²C 设备寄存器

功能
I²C 设备某个寄存器 写入数据。

使用示例

i2cset -y 1 0x50 0x10 0xAB
  • I²C 总线 10x50 设备 0x10 寄存器 写入 0xAB

写入多字节

i2cset -y 1 0x50 0x10 0x12 0x34 i
  • I²C block 模式 写入 0x12 0x34

(5)i2ctransfer — 复杂 I²C 读/写

功能
因为i2ctransfer是比较底层的命令,所以它灵活,所以它允许更复杂的 I²C 数据传输,例如:

  • 一次性读/写多个字节
  • 自定义 I²C 消息格式
  • 精确控制 I²C 事务

写入 2 字节

i2ctransfer -y 1 w2@0x50 0x10 0xAB
  • 0x50 设备 0x10 寄存器 写入 2 字节数据 0xAB

读取 2 字节

i2ctransfer -y 1 r2@0x50
  • 0x50 设备 读取 2 字节 数据。

3. i2c-tools 安装到Linux系统

在大多数 Linux 发行版中可以直接安装:

  • Debian/Ubuntu
    sudo apt install i2c-tools
    
  • CentOS/RHEL
    sudo yum install i2c-tools
    
  • Yocto
    local.conf 添加:
    IMAGE_INSTALL_append = " i2c-tools "
    
  • IMX6ULL_PRO等嵌入式开发板
    和tslib库的安装类似,先在Ubuntu中编译出库文件,然后把相关文件复制到IMX6ULL_PRO嵌入式开发板上,同时还要把相关的头文件复制到交叉编译器的头文件搜索目录中,这些这程可参考tslib库的安装,相关博文 https://blog.csdn.net/wenhao_ir/article/details/144621008 【搜索“tslib的交叉编译”,然后开始看】
    由于很多芯片的官方BSP都集成了i2c-tools 库,所以需要自己去编译安装i2c-tools 的时间不多,所以这里我就不去尝试自己编译安装了。

4. 查看自己的两个开发板的Linux系统中是否有i2c-tools

先说明一下,直接运行命令i2cdetect,如果有提示这个命令怎么用,那么就证明当前Linux系统中已经集成了i2c-tools

i2cdetect

在这里插入图片描述
上面的运行结果表明当前Linux系统中已经集成了i2c-tools

IMX6ULL_PRO开发板出厂提供的Linux系统中包含有i2c-tools

1号开发板是开发板商出厂时提供的Linux内核和设备树文件。

在1号开发板上运行命令i2cdetect的结果如下:
在这里插入图片描述
这证明IMX6ULL_PRO开发板出厂提供的Linux系统中包含有i2c-tools

NXP官方提供的BSP中包含有i2c-tools

2号开发板是我自己用NXP官方提供的BSP移植的Linux内核和设备树文件。

在2号开发板上运行命令i2cdetect的结果如下:
在这里插入图片描述
这证明NXP官方提供的BSP中包含有i2c-tools

5. 小结

i2c-toolsLinux 下的 I²C 调试工具集,适用于嵌入式设备调试。
✔ 提供 设备扫描、数据读取、数据写入 等命令:

  • i2cdetect:扫描 I²C 设备。
  • i2cdump:读取设备所有寄存器。
  • i2cget:读取单个寄存器。
  • i2cset:写入单个寄存器。
  • i2ctransfer:高级 I²C 操作。
    ✔ 在 IMX6ULL 开发板、树莓派等嵌入式 Linux 设备上广泛使用。

i2c-tools 工具集使用的前提:存在相关的I2C控制器的设备文件

首先需要Linux的I2C子系统提供了相关的I2C控制器的设备文件。我猜 i2c-tools 也会像tslib那样去扫描获取相关的设备文件。我们可以用下面的命令查看系统的I2C子系统提供的I2C控制器的设备文件。

ls /dev/i2c-*

运行结果如下:
在这里插入图片描述
i2c-tools 在工作运行时,就会扫描获取到这两个I2C控制器的设备文件,然后用这两个设备文件进行相关操作。设备文件的名字末尾的数字就是i2c-tools 各命令中需要的I2C控制器的编号。

i2c-tools 工具集所使用的协议:SMBus协议和I2C协议

i2c-tools 工具集有部分命令是基于SMBus协议,有部分命令是基于SMBus协议。不过由于SMBus协议是I2C协议的子集,所以只要设备是I2C设备,就可以运行SMBus协议。

SMBus协议的详细介绍见博文 https://blog.csdn.net/wenhao_ir/article/details/146336623

检测扫描命令i2cdetect的实操记录

查看当前Linux系统中有多少个I2C控制器

1号开发板的运行结果

可以用下面的命令来查看当前Linux系统中有多少个I2C控制器及各自的基本信息:

i2cdetect -l

在这里插入图片描述

[root@imx6ull:~]# i2cdetect -l
i2c-1   i2c             21a4000.i2c                             I2C adapter
i2c-0   i2c             21a0000.i2c                             I2C adapter

可见,有两个,其实IMX6ULL芯片上一共也只有两个I2C控制器,它们的设备文件名分别为i2c-1、i2c-0,它们被命令名I2C adapter,它们各自的内存地址为21a4000、21a0000。

2号开发板的运行结果

i2cdetect -l

在这里插入图片描述

检测某个I2C控制器上有哪些设备

编号为0的I2C控制器上的设备

1号开发板的运行结果

假设现在我要检测编号为0的I2C控制器上是否有设备,那么运行下面这条命令即可:

i2cdetect 0

运行之后会提示你这个操作可能会干扰该条I2C总线上目前正在工作的I2C设备,因为它要发送各设备的地址,然后让设备得到回应嘛。我们回答y就是了。

在这里插入图片描述
当然你也可像下面这样写:

i2cdetect -y 0

这样就可以屏蔽命令运行过程中的交互,也就不用需要回答y了。

在这里插入图片描述
这个结果说明,在0x1e的地址上,有一个I2C设备,但是在内核中还不存在这个设备的驱动程序,所以显示为其地址值,如果在内核中存在这个设备的驱动程序,那么应该显示为UU,如下图所示:
在这里插入图片描述
这里顺便说一下,地址为0x1e的I2C设备其实是芯片AP3216C,它能进行光照强度测量和距离检测、并且通信接口为I2C,它的详细介绍见博客 https://blog.csdn.net/wenhao_ir/article/details/146326884

2号开发板的运行结果
i2cdetect 0

在这里插入图片描述

编号为1的I2C控制器上的设备

1号开发板的运行结果

按照上面的方法,我们再顺便检测下编号为1的I2C控制器上的设备:

i2cdetect 1

在这里插入图片描述
可见,编号为1的I2C控制器上有四个设备,地址分别为0x1a、0x39、0x5d、0x60,前三个设备在内核中是有驱动程序的,最后一个地址为0x60的设备是在内核中没有驱动程序的。

2号开发板的运行结果
i2cdetect 1

在这里插入图片描述

1号开发板和2号开发板运行结果的分析

1号开发板是开发板商出厂时提供的Linux内核和设备树文件。
2号开发板是我自己用NXP官方提供的BSP移植的Linux内核和设备树文件。

这说明NXP官方提供的BSP里已经包含了IMX6ULL的I2C控制器的底层驱动,并且接入了Linux的I2C子系统。一旦一个I2C控制器被正确启用并被接入Linux的I2C子系统,那么就能使用i2c-tools 工具集检测并操作相关I2C总线上的I2C设备了。

写入数据命令i2cset的格式的详解

可以直接在命令行中输入命令i2cset来查看其格式:

i2cset

运行结果如下:
在这里插入图片描述
详细介绍如下:
i2cset 是 Linux 命令行工具,用于向 I²C 设备的寄存器写入数据。它属于 i2c-tools 工具集,常用于调试 I²C 设备。


1. 基本语法

i2cset [-fy] [-m MASK] BUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]

其中:

  • BUS:I²C 总线号,通常对应 /dev/i2c-X 设备中的 X
  • CHIP-ADDRESS:I²C 设备地址(7 位地址,范围 0x030x77)。
  • DATA-ADDRESS:要写入数据的寄存器地址(从设备内部的寄存器)。
  • VALUE(可选):要写入的数值。如果 MODE 允许多个值,则可以写入多个数据。
  • MODE(可选):数据的传输模式(见下文)。
  • 额外的 选项(如 -f-y)可用于控制操作方式。

2. 选项说明

  • -f :强制访问设备,即使它可能正在使用(风险较高,谨慎使用)。
  • -y :禁用交互模式,不再要求用户确认写入(默认情况下会有提示以防误操作)。
  • -r :在写入后读取并比较结果(用于确认写入是否成功)。
  • -m MASK :使用掩码选择要写入的特定位。例如 -m 0xF0 仅修改高 4 位,低 4 位保持不变。

3. MODE 参数
MODE 指定数据写入的方式,支持以下几种:

MODE说明
c只写数据地址,不写入任何数据(通常用于触发某些设备的操作)。
b写入 1 字节(默认模式)。
w写入 2 字节(word)。
iI²C 块数据 方式写入多个字节(I²C block write)。
sSMBus 块数据 方式写入多个字节(SMBus block write)。
p追加 p 启用 SMBus 的 PEC(Packet Error Checking)校验。

4. 示例
#(1)写入一个字节

i2cset -y 1 0x50 0x10 0xAB
  • 在 I²C 总线 1 上,向地址 0x50 的设备写入数据:
    • 0x10 作为寄存器地址。
    • 0xAB 作为要写入的数据(默认 b 模式,即 1 字节)。

#(2)写入 2 字节(word)

i2cset -y 1 0x50 0x10 0x1234 w
  • 0x50 设备的 0x10 寄存器写入 0x1234(2 字节)。

#(3)写入 SMBus 块数据

i2cset -y 1 0x50 0x10 0x01 0x02 0x03 s
  • 0x50 设备 0x10 寄存器写入 0x01 0x02 0x03(SMBus block write)。

#(4)使用掩码修改部分位

i2cset -y -m 0xF0 1 0x50 0x10 0xAB
  • 仅修改 0x10 寄存器的高 4 位(0xF0 掩码)。

5. 注意事项

  • 确保设备地址正确,误操作可能会影响 I²C 总线上的其他设备。
  • 使用 -y 选项时要谨慎,否则 i2cset 可能直接写入数据而不提示确认。
  • 强制写入 -f 有风险,可能导致总线冲突或设备异常。

读数据命令i2cget的格式的详解

可以直接在命令行中输入命令i2cset来查看其格式:

i2cget

运行结果如下:
在这里插入图片描述
详细介绍如下:

i2cgeti2c-tools 工具集中的一个命令,用于读取 I²C 设备的寄存器数据


🔹 语法解析

i2cget [-fy] BUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]
参数含义
BUSI²C 控制器编号(总线编号),比如 01,可以通过 i2cdetect -l 查看
CHIP-ADDRESSI²C 设备地址(7 位地址),通常在 0x03 ~ 0x77 之间
DATA-ADDRESS要读取的寄存器地址(可选),如果省略,则直接读取设备数据
MODE读取模式(可选),默认为 b(字节读取)

🔹 选项说明

选项作用
-f强制访问 I²C 设备(忽略内核的安全检查)
-y关闭交互模式,直接执行操作而不要求用户确认

🔹 读取模式

模式含义
b读取 1 字节数据(默认)
w读取 2 字节(16-bit word)数据
c先写 1 字节数据,再读取 1 字节数据(适用于某些设备)
p附加 SMBus PEC(Packet Error Checking)错误检测

🔹 示例
#✅ 1. 读取设备的整个数据(无指定寄存器)

i2cget -y 1 0x1E
  • 读取 I²C 设备地址 0x1E 的数据(不指定寄存器)。
  • -y 选项表示不提示用户确认。

#✅ 2. 读取 AP3216C 传感器 0x00 寄存器的值

i2cget -y 1 0x1E 0x00
  • 读取 设备 0x1E0x00 号寄存器(系统配置寄存器)。

#✅ 3. 读取 16-bit(word)数据

i2cget -y 1 0x1E 0x0C w
  • 读取 设备 0x1E0x0C 号寄存器16-bit 数据
  • 适用于返回 2 字节(word)的设备,如某些传感器。

#✅ 4. 先写 1 字节数据,再读取 1 字节数据

i2cget -y 1 0x1E 0x00 c
  • 先写 0x00 到设备 0x1E,然后读取 1 字节数据。
  • 适用于某些 需要寄存器索引 的设备。

🔹 小结

  • i2cget 用于从 I²C 设备的寄存器读取数据
  • 默认读取 1 字节(可选 w 读取 2 字节)。
  • -f 强制访问,-y 关闭交互模式
  • 可以配合 i2cset 进行写入操作

使用读写命令行对I2C设备AP3216C进行读写操作

AP3216C是能进行光照强度测量和距离检测、并且通信接口为I2C的芯片,它的详细介绍见博客 https://blog.csdn.net/wenhao_ir/article/details/146326884
当它通过I2C挂接到我们的Linux系统的I2C总线上后,我们例可以用I2C总线对它进行读写操作了。在这里,我们用i2c-tools工具集的命令对它进行读写操作,从而利用AP3216C读出光照强度和距离值。

第01条命令-写数据:软复位AP3216C

i2cset -f -y 0 0x1e 0 0x4

在这里插入图片描述
前面已经详细介绍了命令i2cset,这里就不再详细赘述。
-f :表示强制访问设备,即使它可能正在使用。
-y :禁用交互模式,不再要求用户确认写入(默认情况下会有提示以防误操作)。
第1个0:表示使用第0个I2C控制器,也可以看成是I2C总线的编号嘛。
0x1e:表示AP3216C这个I2C设备的地址。
第2个0:表示AP3216C中要写入数据的寄存器地址。
0x4:表示写入的值为0x4,表示软复位AP3216C。
关于AP3216C的0号寄存器的详细介绍见博文 https://blog.csdn.net/wenhao_ir/article/details/146326884

第02条命令-写数据:启用AP3216C的光感和距离检测功能

i2cset -f -y 0 0x1e 0 0x3

在这里插入图片描述
前面已经详细介绍了命令i2cset,这里就不再详细赘述。
-f :表示强制访问设备,即使它可能正在使用。
-y :禁用交互模式,不再要求用户确认写入(默认情况下会有提示以防误操作)。
第1个0:表示使用第0个I2C控制器,也可以看成是I2C总线的编号嘛。
0x1e:表示AP3216C这个I2C设备的地址。
第2个0:表示AP3216C中要写入数据的寄存器地址。
0x3:表示写入的值为0x3,表示“ALS and PS+IR functions active”,即把AP3216C的ALS (Ambient Light Sensor)光感和Proximity (接近传感器) 都激活。
关于AP3216C的0号寄存器的详细介绍见博文 https://blog.csdn.net/wenhao_ir/article/details/146326884

第03条命令-读取光照强度数据

i2cget -f -y 0 0x1e 0x0c w

前面已经详细介绍了命令i2cget,这里就不再详细赘述。
-f :表示强制访问设备,即使它可能正在使用。
-y :禁用交互模式,不再要求用户确认写入(默认情况下会有提示以防误操作)。
第1个0:表示使用第0个I2C控制器,也可以看成是I2C总线的编号嘛。
0x1e:表示AP3216C这个I2C设备的地址。
0x0c:表示要读取AP3216C中的目标寄存器的地址。
w:表示读取一个字,即两个字节的值。
关于AP3216C的0x0c号寄存器的详细介绍见下面这张截图:
在这里插入图片描述
由于我们附加了参数w,所以这里其实我们这里读取的是0x0c和0x0d寄存器的值。
读取的结果如下:
在这里插入图片描述
我们再用手电筒照向这个芯片,然后再读这个值,看有没有变化:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可见,值从0x0000变成了0x24e2。

第04条命令-读取距离值

i2cget -f -y 0 0x1e 0x0e w

前面已经详细介绍了命令i2cget,这里就不再详细赘述。
-f :表示强制访问设备,即使它可能正在使用。
-y :禁用交互模式,不再要求用户确认写入(默认情况下会有提示以防误操作)。
第1个0:表示使用第0个I2C控制器,也可以看成是I2C总线的编号嘛。
0x1e:表示AP3216C这个I2C设备的地址。
0x0e:表示要读取AP3216C中的目标寄存器的地址。
w:表示读取一个字,即两个字节的值。
关于AP3216C的0x0e号寄存器的详细介绍见下面这张截图:
在这里插入图片描述
其中第7位和第6位的详细说明见博文 https://blog.csdn.net/wenhao_ir/article/details/146326884 【搜索“其中第7位(Object detect)”】

由于我们附加了参数w,所以这里其实我们这里读取的是0x0e和0x0f寄存器的值。
读取的结果如下:
在这里插入图片描述
这个值我们得转换成二进制然后翻译一下:

0xb18d = 0b 10110001 10001101

所以PS_Data_Low的值为 1000 1101,分析如下:
PS_Data_Low[7]的值为1,代表“The object closed”,意思是物体在检测范围内,PS_Data_Low[6]的值为0,代表数据有效。PS_Data_Low[3:0]代表测量出的距离值的低4位,具体的值为0b1101

所以PS_Data_High的值为 1011 0001,分析如下:
PS_Data_High[7]的值为1,代表“The object closed”,意思是物体在检测范围内,PS_Data_High[6]的值为0,代表数据有效。PS_Data_High[5:0]代表测量出的距离值的高6位,具体的值为0b11 0001

把PS_Data_Low[3:0]和PS_Data_High[7]的值组合起来为:
0b11 0001 1101 = 0d797

现在我用我的手指靠近AP3216C,再去读PS_Data寄存器的值,结果如下:
在这里插入图片描述
可见值变成了0xbf8f = 0b10111111 10001111
此时把PS_Data_Low[3:0]和PS_Data_High[7]的值组合起来为:
0b1111111111 = 1023 ,因为我的指头几乎快挨着AP3216C了,所以距离值变了最大值1023,可见,对于AP3216C,距离越近,传感得到的距离值越大。

相关文章:

Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值

IC-Tools 工具集介绍 i2c-tools 是 Linux 下用于 IC 设备调试 的用户空间工具集(你也可以把它看成是一个库,类似于之前自己用过的触摸屏库tslib库、FreeType矢量字符库),它提供了一系列命令行工具,可以扫描、读取、写入 IC 设备,…...

## DeepSeek写射击手机小游戏

DeepSeek写射击手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端射击小游戏H5文件: 要求 可以重新开始游戏 可以暂停游戏 射击位置在底部中间&#xff…...

奇安信全流量(天眼)面试题

一、全流量设备(天眼)的部署架构 天眼系统采用旁路部署模式,通过流量镜像实现非侵入式监测,核心组件包括流量传感器、分析平台和文件威胁鉴定器,具体部署架构如下: 传感器部署 关键节点覆盖:在…...

计算机四级 - 数据库原理(操作系统部分)- 第2章「操作系统运行机制」

系统调用是应用程序请求操作系统核心完成某一特定功能的一种过程调用,与一般调用的最大区别就是调用程序运行在用户态,而被调用程序则运行在系统态寄存器类型: 用户不可见寄存器:程序计数器、指令寄存器、程序状态字(P…...

【css酷炫效果】纯CSS实现虫洞穿越效果

【css酷炫效果】纯CSS实现穿越效果 缘创作背景html结构css样式完整代码基础版进阶版(虫洞穿越) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90491973 缘 创作随缘,不定时…...

火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试

前言 在大模型的使用过程当中,Prompt的使用非常的关键。原来,我对Prompt的理解不深,觉得Prompt的产生并不是很有必要。但是,自从使用了火山方舟中的“Prompt优解”之后,感受加深了,觉得Prompt是我们和大模型…...

多线程(四)----线程安全

线程安全问题的万恶之源就是多线程的抢占式执行所带来的随机性. 有了多线程, 此时抢占式执行下, 代码执行的顺序, 会出现更多的变数, 代码执行顺序的可能性就从一种情况变成了无数种情况. 只要有一种情况使得代码结果不正确, 都是视为bug, 线程不安全. 有线程安全的代码 以下…...

跨系统投屏:Realme手机(远程)投屏到Linux系统的简单方法

家里长辈年纪上来了,有点老花眼,平常看手机总是觉得字体不够大,还一个劲儿地将手机拿很远。其实那台手机的字体已经调到最大了。 为了让长辈刷手机的时候可以轻松快乐一点,我们帮他将手机投屏到电脑上。毕竟电脑屏幕比手机大多了&…...

【eNSP基础使用教程-1】

座右铭: 纵有疾风起,人生不言弃。 文章目录 前言一、更改设备名称指令1、双击路由器进入2、 进入系统视图3、更改设备名称为R14、使用同样的办法修改路由器R2、R3 二、配置路由物理接口的IP 地址1、查看R1路由器当前接口IP 地址配置与路由表2、查看路由器上的路由表…...

android开发:组件事件汇总

在 Android 开发中,Java 文件中有许多组件事件可以处理用户交互。以下是一些常见的组件事件及其用途和示例: 1. 点击事件 (Click) 用于处理用户点击控件的操作。 示例代码: Button button findViewById(R.id.button); button.setOnClickL…...

C++|向函数传递对象

在 C 里,对象作为函数的参数和返回值,有值传递、指针传递和引用传递这三种传递方式,下面为你详细介绍。 1.值传递 在值传递时,把实参对象的值复制给形参对象,函数会接收实参的一个副本,而非实参本身。函数…...

网络爬虫【爬虫库urllib】

我叫不三不四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库,无须安装,直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包,大致具备以下功能。 ● urlli…...

【一起来学kubernetes】17、Configmap使用详解

前言概述核心特性创建 ConfigMap使用 ConfigMap1. **环境变量**2. **Volume 挂载**3. **命令行参数** 更新与热重载Docker容器中Java服务使用Configmap**一、通过环境变量注入****步骤说明****示例配置** **二、通过 Volume 挂载配置文件****步骤说明****示例配置** **三、动态…...

QT程序双击可执行文件运行方法

1、qt编译选择release模式 在pro文件添加:QMAKE_LFLAGS -no-pie 2、cmake编译qt界面程序 在CMakeLists.txt文件中添加: set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")注意 …...

【css酷炫效果】实现鱼群游动动态效果

【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...

【GNN】GAT

消息传递 层数越多,聚合更多的消息...

Prims region.Views 为null

原因: 导航未完成或异步问题 解决方式:使用回调确认导航完成后再操作视图 _regionManager.RequestNavigate("MonitorRegion", "MonitorView", nps, navigationResult > {if (navigationResult.Result true){var region _regio…...

在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器

一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后,双击下面的exe文件进行安装,默认情况下,Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时,请确保…...

WPS 搭配 Zotero 插件使用

安装Zotero后,Word自动引入了插件,但WPS却没有,做为WPS的重度用户,这是不行的。 解决方案: 1.找到 Zotero.dotm 一般在安装目录下, 2.然后复制到WPS的startup下 我的目录是:C:\Users\lianq…...

卷积神经网络 - 卷积层(具体例子)

为了更一步学习卷积神经网络之卷积层,本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念,一个针对灰度图像,一个针对彩色图像。 例子 1&#x…...

新造车不再比拼排名,恰是曲终人散时,剩者为王

据称新能源汽车周销量不再发布,这可能也预示着新造车终于到了给出答案的时候了,新造车企业前三强已基本确立,其余那些落后的车企已很难有突围的机会,而特斯拉无疑是其中的最大赢家。 3月份第一周的数据显示,销量最高的…...

学有所得-Deepin linux操作系统在安装nvidia显卡驱动后的问题修复

目标: 装有deepin V20.9的移动硬盘在系统启动后无法进入图形化界面,修复系统。 背景: 为了方便随时随地开发研究,又不破坏笔记本电脑原装的正版操作系统,在一个朗科(容量50&…...

【QT:网络编程】

网络编程的本质就是在编写应用层代码。需要传输层支持。而传输层的协议有UDP、TCP等 使用QT网络编程的API,需要在.pro文件中添加network模块,而QT中的控件和其他内容都是包含在QtCore模块中的(默认添加) QT为什么要划分模块&…...

基于srpingboot高校智慧校园教学管理服务平台的设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

分布式事务3PC解决了2PC哪些问题?

三阶段提交(3PC,Three-Phase Commit) 是对 二阶段提交(2PC,Two-Phase Commit) 的改进,旨在解决 2PC 的一些固有缺陷,特别是在分布式系统中的容错性和性能问题。以下是 3PC 比 2PC 更好的原因及其优势的详细分析: 1. 二阶段提交(2PC)的问题 2PC 是一种经典的分布式事…...

Dify 使用 - 创建 翻译 工作流

文章目录 1、选择 模板2、设置 和 基本使用3、运行应用 1、选择 模板 2、设置 和 基本使用 翻译模板 自带了系统提示词,你也可以修改 3、运行应用 右上角 点击 发布 – 更新,运行应用,就可以在新的对话界面中使用此功能 2025-03-18&#x…...

集成学习(上):Bagging集成方法

一、什么是集成学习? 在机器学习的世界里,没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象",单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来,就能像拼图一样还原出完整的真相&a…...

c盘清理宝藏小工具

引言 在数字化时代,电脑的存储空间和系统性能直接影响着我们的工作效率和用户体验。C盘作为系统盘,常常因为文件堆积、缓存冗余等问题变得臃肿不堪,导致电脑运行缓慢。为了解决这一问题,我最近试用了一款名为“小番茄C盘清理”的…...

QT多媒体播放器类:QMediaPlayer

QMediaPlayer 是 Qt Multimedia 模块中的核心类,用于播放音频和视频媒体文件。它支持本地文件、网络流媒体以及实时数据源,具备播放控制、状态管理、元数据访问等功能。QMediaPlayer的基本用法可能包括设置媒体源、控制播放(播放、暂停、停止…...

Java动态代理模式深度解析

1. 动态代理基础 1.1 核心组件 Proxy 类:动态生成代理对象的工厂类,核心方法为 newProxyInstance()。 InvocationHandler 接口:代理逻辑的处理器,所有方法调用会转发到其 invoke() 方法。 1.2 实现步骤 定义接口:代…...

【WRF模拟】垂直层设置/与观测数据对比

【WRF模拟】垂直层设置/与观测数据对比 WRF 中 有关垂直层的namelist变量1. 主要垂直层设置参数2. 详细解释3. 典型设置示例WRF 输出的垂直剖面数据与观测数据进行比较WRF 采用 地形跟随坐标(terrain-following coordinate)WRF 输出的垂直剖面数据与观测数据进行比较参考WRF …...

植物知识分享论坛毕设

1.这四个文件直接是什么关系?各自都是什么作用?他们之间是如何联系的? 关系与联系 UserController.java 负责接收外部请求,调用 UserService.java 里的方法来处理业务, 而 UserService.java 又会调用 UserMapper.jav…...

可视化图解算法:链表中倒数(最后)k个结点

1. 题目 描述 输入一个长度为 n 的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤105,0 ≤ai≤109,0 ≤k≤109 要求&am…...

qt下载和安装教程国内源下载地址

qt不断在更新中,目前qt6日渐成熟,先前我们到官方下载或者国内镜像直接可以下载到exe文件安装,但是最近几年qt官方似乎在逐渐关闭旧版本下载通道,列为不推荐下载。但是qt5以其广泛使用和稳定性,以及积累大量代码使得qt5…...

html5表格实战-跨行跨列

效果如图 代码如图...

使用OBS进行webRTC推流参考

参考腾讯云官方文档: 云直播 OBS WebRTC 推流_腾讯云 说明非常详细,分为通过WHIP和OBS插件的形式进行推流。 注意:通过OBS插件的形式进行推流需要使用较低的版本,文档里有说明,需要仔细阅读。...

Rockchip --- 图像时延优化

通过配置wait-line,即图像采集多少行后提前输出buffer给ISP,而无需等待图像全部采集完毕。一般设置为图像采集一半后提前输出buffer给ISP (一)VICAP提前输出 Video Input CAPture是用于图像采集和处理的子系统 1. 通过dts配置 …...

微软 LIDA 库:基于大模型的自动化数据分析与可视化

微软 LIDA 库:基于大模型的自动化数据分析与可视化 一、核心架构与 LLM 交互流程 #mermaid-svg-UzSwZNKPlgrJUpej {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UzSwZNKPlgrJUpej .error-icon{fill:#5…...

java-正则表达式-集合-泛型

正则表达式 正则表达式到底是什么东西? 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 http://tool.oschina.net/r…...

力扣刷题994. 腐烂的橘子

994. 腐烂的橘子 - 力扣(LeetCode) 使用bfs,先遍历所有的橘子,统计所有的橘子数量,然后把腐烂的橘子放入队列当中,然后进行bfs遍历,套用bfs的模版,但是每一次出队的橘子&#xff08…...

Kubernetes的Service详解

一、Service介绍 在 kubernetes 中, pod 是应用程序的载体,我们可以通过 pod 的 ip 来访问应用程序,但是 pod 的 ip 地址不是固定的,这也就意味着不方便直接采用pod 的 ip 对服务进行访问。 为了解决这个问题,kuberne…...

Linux目录理解

前言 最近在复习linux,发现有些目录总是忘记内容,发现有些还是得从原义和实际例子去理解会记忆深刻些。以下是个人的一些理解 Linux目录 常见的Linux下的目录如下: 1. 根目录 / (Root Directory) 英文含义:/ 是文件系统的根…...

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下: eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…...

1~2 课程简介+ESP32-IDF环境搭建(虚拟机Linux环境下)

哔站“宸芯IOT”视频链接 一、课程内容介绍 1.什么是ESP32 ESP32是集成2.4GHz Wi-Fi和蓝牙双模的单芯片方案,具有超高的射频性能、稳定性、通用性和可靠性,以及超低的功耗,满足不同的功耗需求,适用于各种应用场景。ESP32是ESP8…...

Linux系统移植篇(十一)Linux 内核启动流程

要分析 Linux 启动流程,同样需要先编译一下 Linux 源码,因为有很多文件是需要编译才 会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以 找到 Linux 内核的第一行程序是从哪里执行的。vmlinux.lds …...

React19源码系列之Hooks(useId)

useId的介绍 https://zh-hans.react.dev/reference/react/useId useId 是 React 18 引入的一个新 Hook,主要用于生成全局唯一的 ID。在开发中,我们经常需要为元素(如表单元素、模态框等)生成唯一 ID,以便在 JavaScri…...

深度学习-149-langchain之如何不使用with_structured_output()从模型中返回结构化数据

文章目录 1 不使用with_structured_output()方法1.1 问题背景1.2 输出解析器1.3 远程deepseek大模型API2 基于提示词2.1 直接使用提示词2.2 少样本提示词3 直接提示和解析模型输出3.1 使用PydanticOutputParser3.1.1 构建解析器3.1.2 构建提示模板3.1.3 调用大模型3.1.4 调用链…...

SAP DOI EXCEL应用

【应用场景】采用DOI方式打开填充EXCEL数据 *&---------------------------------------------------------------------* *& 包含 ZFI1009R_TOP *&---------------------------------------------------------------------* TABLES:bkpf,bseg. D…...

RS485电路设计注意事项

(一)RS485的电平标准: RS485用缆线两端的电压差值来表示传递信号,逻辑“1”以两线间的电压差为2V~6V标识,逻辑“0”以两线间的电压差为-2V~-6V标识。由此可见,接口信号电平较低,不易损坏接口电路…...

Git 回退操作详解:带示例的“小白”指南

前言 在日常开发中,我们难免会遇到: 改错代码:推送之前才发现某些行根本就不该动提交错误:commit 信息打错、提交到错误分支想回到之前版本:测试时发现之前版本是好的,需要回去查看 这就需要用到 Git 的…...