I²C简介
前言
I²C(Inter-Integrated Circuit, 内置集成电路)总线是由Philips公司(现属于恩智浦)在上世纪80年代开发的两线式串行通信总线,用于连接微控制器及其外围设备,控制设备之间的通信。
I²C总线的物理拓扑示意图如下:
组成I²C总线的两个信号为时钟SCL(Serial Clock)和数据线SDA(Serial Data)
- SCL: 串行时钟线,用于同步信号
- SDA: 串行数据线,用于数据的双向传输
I²C仅仅使用SCL、SDA这两根信号线,就可实现在连接于总线上的器件之间的数据交互,极大简化了对硬件资源和PCB板布线空间的占用。
I²C通信只有一根SDA数据线用来传输通信数据,在同一时间只能是由一方单向传输给另一方的,而不能双方同时发送,所以I²C通信是半双工通信模式。
并且I²C采用主从模式,其中发起和控制通信的叫做主设备(Master),主导整个通信过程,响应主机指令的设备叫做从设备(slave)。I²C总线上的设备都可以作为主机或从机,举一个例子:
假设有一个名叫环境检测器的传感器和一个微控制器(MCU),两者之间通过I²C总线连接,在不同场景下,它们之间主机和从机的角色可能互换:
- 正常操作模式下,MCU定期去读取传感器数据(温度、湿度),这时候MCU作为主机,主动发起通信请求,向传感器读取数据;传感器作为从机,响应请求并返回数据
- 紧急事件模式下,传感器检测到异常的值(比如温度过高),需要立即通知MCU, 这时候传感器作为主机,主动向MCU发起通信请求;而MCU就扮演从机的角色,接收传感器传来的信号,并触发紧急处理程序
一. I²C总线协议
了解了I²C总线的物理设计,以及主设备和从设备的概念后,接下来就可以看一下I²C的通信过程是怎样的。一个完整的I2C通信过程包括如下几个步骤:
- 主设备发送一个起始信号;
- 主设备接着发送8bit数据,其中7位是从设备的地址,一位表示此次主设备是要读数据还是写数据;
- 和主设备发送的地址匹配的从设备发出一个ack响应信号;
- 主/从设备将数据发送到SDA总线上,每次传输都是8bit数据;
- 主/从设备从SDA线上接收数据,并发送一个ACK响应信号;
- 还可以接着n个发送和接收的过程;
- 主设备发送停止信号,停止本次通信;
接下来看一下上面讲述的通信过程,在时序上时如何体现的
1. 空闲状态
总线空闲时,上拉电阻使SDA和SCL线都保持高电平。
2. 起始\停止
2.1 开始位
I²C协议规定,总线上的数据传输必须以一个起始信号为条件,这个信号由主设备产生,叫做开始位,它是当SCL稳定在高电平时,主机将SDA线由高电平切换到低电平(即生成一个下降沿)产生的。
主设备通过将SDA线从高电平切换到低电平,再将SCL线从高电平切换到低电平,来向每个连接的从机发送启动条件,这样做是为了唤醒总线上的空闲节点器件。起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I²C器件无法访问总线。
2.2 停止位
反过来,I²C协议规定,当需要结束此次通信时,主设备(Master)会产生一个停止位作为传输的停止条件,它是当SCL处于高电平时,主设备将SDA由低电平切换到高电平(即上升沿)产生的。停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态,即SCL和SDA都处于高电平状态。
主设备通过将SDA线从高电平切换到低电平,再将SCL线从高电平切换到低电平,来向每个连接的从设备发送启动条件,这样做是为了唤醒总线上的空闲节点器件
3. 发送从设备地址
主设备发出起始信号后,总线上的所有从设备都在侦听它们的设备地址,以监听主设备这次是否要和自己通信,主设备接着会发送1字节(8bit)的地址信息,这个地址字节跟随在随后的时钟脉冲上,这8位信息中包含了两部分信息:
- 前7位为设备地址。用于指定主设备通信的对象地址,每个连接到总线上的设备都有唯一的地址,以确保不同设备之间访问的准确性,处于监听状态下的从设备会响应并激活内部电路完成初始化操作准备接收或发送数据。
- 最后1位为读\写标志。用于指定SDA上数据的传输方向。此位为0的话,表示主设备写数据,即由主设备向从设备发送数据,从设备接收数据;此位为1的话,表示读数据,即由从设备向主设备发送数据,主设备接收数据。
找到地址匹配的从机继续侦听最后一位(即读\写位),以确认主设备是要从从机读取数据还是向从机写入数据。
随着I²C设备数量越来越多,7bit的地址逐渐不够用了,于是从机地址由7bit扩展到了10bit,并且同一条I²C总线上可以同时兼容7bit和10bit地址的设备。
10-bit 地址的I²C设备需要 2个字节 来传输从机的地址信息,10bit的地址设计如下
其中第一个字节为 1111 0 + 地址高两位(第10、9bit) + 读写控制位,第二个字节为从设备地址低8位,因为 “1111 0xx” 为 I²C中特地保留的16个特殊指令地址中的一个,所以7-bit设备不会响应该首字节的呼叫,只有10-bit设备会响应,从而实现良好兼容。
4. 从设备响应(ACK\NACK)
I²C总线一个重要的特点就是有应答机制,或响应机制,当一方向另一方发送了一帧数据,这无论是当前说的这个地址帧,还是后面要提到的数据帧,另外一方都会给出一个回应,表明自己是否有成功接收到对方传来的这帧数据,根据回应的结果不同,分为ACK和NACK两种。
4.1 ACK
I²C总线上的每个从设备接收到主设备的地址帧后,会将主机发送的地址与自己的地址进行比较,地址匹配的那个从设备会回复一个应答信号来通知主设备表示“我收到了”,这个信号叫做ACK(是Acknowledge的简写)信号,如前面的时序图所示,这个ACK信号出现在地址帧(1个字节)传输完成之后,即第9个SCL时钟周期内产生的。
细节一点描述的话,就是主设备在发送完地址帧后,此时主设备需要释放SDA总线,即把总线控制权交给从设备,由于上拉电阻的作用,把总线拉为高电平,如果从设备正确的收到了主设备发来的地址帧,就会在接下来这个始终周期里把SDA拉低,表示应答响应,即产生ACK应答信号。
4.2 NACK
与ACK相反,NACK(Not Acknowledge)信号用于指示接收方未能成功接收到数据字节。具体来说,在SCL为高电平时,如果SDA被拉高,则表示NACK信号。这意味着当发送方发出的数据字节未得到接收方确认时,接收方会在第9个时钟周期内将SDA线保持为高电平,以此来传达NACK信号,表明接收端不接受当前传输的数据字节。
5. 传输数据
主设备检测到来自从设备的ACK位之后,主\从设备就可以根据前面地址帧的读\写位决定的数据传输方向,准备第一帧数据的传输了。
- 发送方将数据发送到SDA总线上,每次传输都是1字节的数据,从MSB(Most Significant Bit,最高有效位) 开始传输;
- 接收方从SDA线上接收数据,并在SCL的下一个时钟周期,发送一个ACK\NACK响应信号;虽然ACK和NACk是在前面从设备响应那一节提到,但它其实不只限用于从设备响应地址帧,也会用于数据传输过程中接收方响应发送方:发送端将SDA总线拉高,然后释放总线的控制权,如果接收端在第9个周期将SDA拉低,就是发出了ACK信号;如果在第9个周期SDA一直是高电平,则代表没有发出ACK信号,即NACK。
- 还可以接着N个这样的发送和接收的过程;
整个的数据传输时序图如下图所示:
小结
整个I²C总线的通信可以简化成如下这样子
另外还有一点就是,除了起始信号和停止信号外,在SCL为高电平期间,SDA线上的数据必须保持稳定,只有当SCL为低电平期间,SDA线上的数据才可以发生变化。
二. 仲裁机制
前面介绍了 I²C总线上两个设备之间的通信,但 I²C总线上往往挂载有多个设备,如果有两个及以上的设备都同时向总线发送起始信号,并启动传输,这样就形成了冲突,这时就需要一个机制来防止数据损坏和确保只有一个设备能够成功控制主线并传输数据,这个机制就是总线仲裁机制。
总线仲裁机制的基本原理:
- “线与”逻辑。“线与”逻辑是指两个或两个以上的输出直接互连就可以实现“与”的逻辑功能,I²C总线上任意器件输出低电平都会使相应总线上的信号线变低,而此时,发送高电平的设备就会失去仲裁。
- SDA回读机制。总线被启动后,每个参与争用总线的主设备会在发送每一位之后检查SDA线上实际存在的电平状态,检测的电平与自己发出的电平一致,就会继续占用总线,并发送下一位数据;如果不一致,比如某个主设备想要写入高电平(逻辑1),却发现SDA被其它节点拉到了低电平(逻辑0),那么这个主设备就会意识到自己失去了此次争夺,并立即停止继续发送后续的数据。
举一个例子:
假设有两个主机Host1和Host2,它们同时尝试启动总线传输,假设Host1要发送的数据为“101....”, Host2要发送的数据位“100”。
在前两位数据时,两个主机发送的都是“10”,因此总线上呈现的电平与两个主机发送的都一致,仲裁继续进行;但是在第三位数据时,Host1发送的是1,Host2发送的是0,由于总线具有“线与”功能,最后SDA上呈现的电平会是0,此时Host1检测到总线上呈现的电平跟自己发送的数据是不一致的,因此Host1退出竞争,放弃对总线的控制权,而Host2则继续发送数据,因为它发送的数据与总线上呈现的电一致。
所以,Host2赢得了仲裁,成为总线的唯一控制者,并继续发送剩余的数据,Host1则需要等待下一次机会再尝试占用总线。这个过程确保了I²C总线上多个主机之间的有序通信,避免了数据冲突和破坏。同时由于仲裁机制是逐位比较的,因此也不会丢失任何信息。
三. I²C设备的内部结构
I²C设备的内部结构示意图如下
- PCLK是I²C总线SCL的时钟来源。PCLK_PSYS是系统时钟,I²C内部经过分频后得到I²C控制器的时钟,主设备会通过SCL线将时钟信号传给从设备。
- I²C总线的控制单元里面有两个重要的寄存器:I²CCON和I²CSTAT。控制单元会对PCLK_SYS时钟信号进行两级分频,产生通信需要的时序信号:实际编程中要发送起始位、停止位、接收ACK等都是通过这两个寄存器(背后所代表的电路模块)实现的
- Address Register和Comparator是当设备作为从设备时会用到,Address Register保存的是自己作为从设备的地址,Comparator是比较器,比较此次I²C设备收到的地址是否与自己的地址相等,如果相等就表示主设备是要和自己进行通信,如果不等,就不用理会此次通信
- Shift Register和I²CDS: I²CDS是保存接收/发送的数据,Shift Register是移位寄存器,如果当前设备是发送模式,则Shift Register负责将I²CDS寄存器里的数据一位一位地发送到SDA总线上;或者反过来,如果当前设备是接收模式,则Shift Register将SDA上的数据一位一位地存到I²CDS总线上。
四. 总结&补充
简单总结一下I²C总线协议,I²C总线两线式串行通信总线,采用主从模式,通信双方按角色分为主设备和从设备,它们的定义和功能如下:
- 主设备(Master)
定义:发起和控制通信的设备
职责:
- 生成时钟信号(SCL)
- 发起start条件(开始位)
- 发送从机地址(7bit/10bit)
- 控制数据传输方向
- 终止通信的stop条件
- 处理总线仲裁
2. 从设备(slave)
定义:响应主机指令的设备
职责:
- 监听总线上的自身地址
- 通过ACK/NACK响应主机
- 根据主机指令进行数据的发送和接收
I²C总线特点:
- I²C总线简单有效,在电路板上占用的空间很小
- 芯片引脚数量少,设计成本低。
- 串行。I2C属于串行通信,所有的数据以位为单位在SDA线上串行传输。
- I²C总线支持多主控模式。任何能够进行发送和接收的设备都可以成为主设备。
- 冲突和仲裁。多主控模式下,能够处理多个主设备尝试控制总线的情况,通过仲裁机制决定哪个设备获得控制权。在任意时刻只能有一个主控,主控能够控制数据的传输和时钟频率
- 同步通信。就是通信双方工作在同一个时钟下,数据传输由时钟信号控制,确保数据传输的同步性
- 低速率。 I²C一般是用在同一个板子上的2个IC之间的通信,而且用来传输的数据量不大,所以本身通信速率很低。一般有这4种模式:标准模式(100kbit/s)、快速模式(400kbit/s)、高速模式(3.4Mbit/S)和超快速模式(5Mbit/s),当然实际中还是具体要看设备是否有支援到这些规格。
- 半双工通信。因为 I²C通信只有一个SDA数据线用来传输通信数据,所以一个通信周期只能是由一方发送给另一方,而不能双方同时发送,所以是半双工通信模式。
- 数据应答机制。带有应答(ACK)和非应答(NACK)信号,确保数据传输的可靠性。
- 字节格式。每次传输数据都是以1字节(8bit)为单位,加上开始位和停止位以及可选的应答位。
相关文章:
I²C简介
前言 IC(Inter-Integrated Circuit, 内置集成电路)总线是由Philips公司(现属于恩智浦)在上世纪80年代开发的两线式串行通信总线,用于连接微控制器及其外围设备,控制设备之间的通信。 IC总线的物理拓扑示意…...
Linux定时静默执行桌面/前台程序
Linux服务器上的程序大都在后台默默的执行,但有些需要在前台或桌面上运行的程序该怎么办呢?这就要借助虚拟显示技术,也就是在后台运行时提供虚拟的显示,使前台运行的程序也能默默的在后台运行,这就是所谓的以“无头模式…...
Redux中间件redux-thunk和redux-saga的具体区别是什么?
Redux 中间件是增强 Redux 功能的重要工具,redux-thunk 和 redux-saga 是两个常用的中间件,它们在处理异步操作和副作用时提供了不同的方式和理念。以下是两者的具体区别: 1. 概念与设计理念 redux-thunk 简洁:redux-thunk 是一…...
【STM32】DRV8833驱动电机
1.电机如何转动 只需要给电机两个端子加一正一负的极性就会转起来了,但是要注意的是不要将电机两端直接接在5v和gnd之间,这种电机一般要提供几百毫安的电流,而GPIO口只能提供几毫安,所以我们使用一个DRV8833来驱动 DRV8833输入口…...
【go语言规范】 使用函数式选项 Functional Options 模式处理可选配置
如何处理可选配置? Config Struct 方式 (config-struct/main.go) 这是最简单的方式,使用一个配置结构体: 定义了一个简单的 Config 结构体,包含 Port 字段创建服务器时直接传入配置对象优点:简单直接缺点:…...
vue中为组建添加样式的方式
在 Vue 中,可以通过多种方式为 view 添加样式,并且支持动态绑定样式。以下是几种常见的方式: 1. 内联样式 直接在模板中使用 style 属性来添加样式。 <template><div style"color: red; font-size: 14px;">这是一个…...
如何简单的去使用jconsloe 查看线程 (多线程编程篇1)
目录 前言 1.进程和线程 进程 PCB 的作用 并发编程和并行编程 线程 为什么选择多线程编程 2.在IDEA中如何简单创建一个线程 1. 通过继承Thread类 2. 通过实现 Runnable 接口 3. 使用 Lambda 表达式 3.如何简单使用jconsloe去查看创建好的线程 前言 2025来了,这是第…...
机器学习·最近邻方法(k-NN)
前言 上一篇简单介绍了决策树,而本篇讲解与决策树相近的 最近邻方法k-NN。 机器学习决策树-CSDN博客 一、算法原理对比 特性决策树最近邻方法(k-NN)核心思想通过特征分割构建树结构,递归划分数据基于距离度量,用最近…...
网络安全试题
ciw网络安全试题 (1)(单选题)使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这属于什么攻击类型? A、拒绝服务 B、文件共享 C、BIND漏洞 D、远程过程调用 &a…...
沃丰科技大模型标杆案例 | 索尼大模型智能营销机器人建设实践
AI大模型发展日新月异,国内外主流大模型每月必会升级。海外AI大模型市场由美国主导, 各模型已形成“多强竞合”的局面。中国积极响应全球大模型技术的发展趋势,高校、研究院所等科研机构、互联网企业,人工智能企业均不同程度地投入…...
rust学习四、控制语句
rust的控制语句和大部分语言没有什么区别,都是熟悉的for,while,loop,if。 比较不同的是,在绝大部分非常流行的语言中都有的switch,rust是没有的。 诸如c/c,java,javascript,c#。连PL/SQL都有case when语句。 一、基本的for、while、if&…...
会员购交易系统架构演进
本期作者 1.背景 会员购是B站2017年推出的IP消费体验服务平台,在售商品以手办、漫画、JK制服等贴合平台生态的商品为主。随着业务发展,会员购从最开始的预售,现货拓展到全款预售,盲盒,众筹等多种售卖方式,销…...
在Linux系统下修改Docker的默认存储路径
在Linux系统下修改Docker的默认存储路径可以通过多种方法实现,下边是通过修改daemon.json文件方式实现 查看当前Docker存储路径 使用命令 docker info | grep "Docker Root Dir" 查看当前Docker的存储路径,默认为 /var/lib/docker 停止Docker…...
【人工智能】释放数据潜能:使用Featuretools进行自动化特征工程
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 特征工程是机器学习流程中至关重要的一步,它直接影响模型的性能。然而,手动特征工程既耗时又需要领域专业知识。Featuretools是一个强大的…...
shell脚本备份PostgreSQL数据库和库下表
注意: 以下为对PostgreSQL13.16版本数据库备份shell脚本参考请确认备份节点上psql和pgdump的版本不至于太低,建议>13.16该脚本目前是对于整库、(默认针对public这个schema,如果有其他schema,请自行添加一层循环&am…...
java面试笔记(一)
1. 一万个string类型的数据,设计一个算法如何按照String长度来排序 以使用 Arrays.sort() 方法,并结合一个自定义的比较器。以下是实现的示例代码: public class StringLengthSort {public static void main(String[] args) {// 定义一万个字符串的示例…...
网络分析仪E5071C的回波损耗测量
回波损耗(Return Loss)是评估射频/微波元件(如滤波器、天线、电缆等)信号反射特性的关键参数,反映端口阻抗匹配性能。E5071C矢量网络分析仪(VNA)通过以下步骤实现高精度回波损耗测量:…...
sql注入中,如果information_schema被过滤,该怎么绕过
目录 一、sys.schema_auto_increment_columns 1.功能 2.利用思路 二、sys.schema_table_statistics_with_buffer 1.功能 2.利用思路 三、mysql.innodb_table_stats和mysql.innodb_index_stats 1.mysql.innodb_table_stats 1.1功能 2.mysql.innodb_index_stats 2.1功…...
若依Flowable工作流版本监听器使用方法
1.前言 本文详细介绍如何在若依Flowable工作流版本(RuoYi-Vue-Flowable)中配置执行监听器和任务监听器。是以我二次开发的代码为基础,介绍如何配置监听器,已解决源码在新增或删除监听器出现的问题,如果需要二次开发的…...
Linux(Centos 7.6)命令详解:cat
1.命令作用 将文件或标准输入连接到标准输出(Concatenate FILE(s), or standard input, to standard output), 即将文件内容输出到屏幕上,或者将多个文件合并成一个文件。 2.命令语法 Usage: cat [OPTION]... [FILE]... 3.参数详解 OPTION: -A, -…...
使用DeepSeek+本地知识库,尝试从0到1搭建高度定制化工作流(自动化篇)
7.5. 配图生成 目的:由于小红书发布文章要求图文格式,因此在生成文案的基础上,我们还需要生成图文搭配文案进行发布。 原实现思路: 起初我打算使用deepseek的文生图模型Janus进行本地部署生成,参考博客:De…...
罗德与施瓦茨ZNB20,矢量网络分析仪9KHz-20GHz
罗德与施瓦茨ZNB20矢量网络分析仪9KHz-20GHz R&SZNB20矢量网络分析仪 产品型号: ZNB20 产品品牌:罗德与施瓦茨 R&S 产品名称: 矢量网络分析仪 频率范围:9kHz - 20GHz R&S ZNB 矢量网络分析仪 良好的测量速度、动态范围和操作方便性&am…...
Linux 固定 IP 地址和网关
Linux 固定 IP 地址和网关 查看 IP ifconfig ifconfig eth0 ip addr ip addr show eth0 查看网关 ip route show route -n netstat -rn 设置固定 IP // 配置静态IP文件/etc/network/interfaces $ vi /etc/network/interfacesauto eth0 iface eth0 inet static addre…...
C++ ——const关键字
const关键字通常表示只读,不可修改,可以保证数据的安全性 1、修饰局部变量 const修饰的局部变量,叫做常局部变量,表示该局部变量不可被修改,这种用法常用于引用参数 2、修饰成员变量 const修饰的成员变量…...
MySQL:MySQL8.0 JSON类型使用整理,基于用户画像的案例
摘要:MySQL,JSON类型,多值索引, 用户画像 MySQL是结构化数据存储,JSON是非结构化格式,在MySQL中使用JSON类型可以打通关系型和非关系型数据的存储之间的界限,为业务提供更好的架构选择ÿ…...
Python MoviePy 视频处理全攻略:从入门到实战案例
第1章 环境安装与配置 # 案例1:安装MoviePy及FFmpeg !pip install moviepy # Windows安装FFmpeg:https://ffmpeg.org/download.html # Linux: sudo apt-get install ffmpeg# 验证安装 from moviepy.editor import * print("MoviePy版本:", __…...
30道Qt面试题(答案公布)
前五个答案 ✦ 1. Qt中常用的五大模块是哪些? Qt中常用的五大模块包括: • Qt Core:提供核心非GUI功能,如数据结构、文件操作、国际化等。 • Qt GUI:提供与平台无关的图形和基本窗口功能。 • Qt Widgets:提供用于创建传统桌面应用程序的UI组件。 • Qt Netw…...
深入解析 MySQL 数据删除操作:DELETE、TRUNCATE 与 DROP 的原理与选择
引言 在 MySQL 中,删除数据或表结构的操作看似简单,但不同操作(如 DELETE、TRUNCATE、DROP)背后的原理和适用场景差异巨大。错误选择可能导致性能问题或数据丢失!本文通过通俗的比喻、流程图和表格,带你深入理解它们的原理与差异。 DELETE 操作的原理 DELETE … IN 执…...
spring cloud gateway限流常见算法
目录 一、网关限流 1、限流的作用 1. 保护后端服务 2. 保证服务质量 (QoS) 3. 避免滥用和恶意攻击 4. 减少资源浪费 5. 提高系统可扩展性和稳定性 6. 控制不同用户的访问频率 7. 提升用户体验 8. 避免API滥用和负载过高 9. 监控与分析 10. 避免系统崩溃 2、网关限…...
华为FusionCompute虚拟化平台
一、华为FusionCompute虚拟化套件介绍 华为FusionCompute虚拟化套件是业界领先的虚拟化解决方案,能够帮助客户带来如下的价值,从而大幅提升数据中心基础设施的效率。 帮助客户提升数据中心基础设施的资源利用率;帮助客户成倍缩短业务上线周期…...
自然语言处理入门1——单词的表示和距离
随着DeepSeek的火爆,AI大模型越来越被大众所接受,我们在日常生活和工作学习中也开始越来越频繁的使用豆包、通义千问、Kimi、DeepSeek、文心一言等大模型工具了。这些大模型底层技术都是Transformer模型,属于自然语言处理范畴。 今天开始&am…...
UART(一)——UART基础
一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…...
【数据结构初阶第十节】队列(详解+附源码)
好久不见。。。别不开心了,听听喜欢的歌吧 必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 目录 一、概念和结构 二、队列的实现 Queue.h Queue.c test.c Relaxing Time! ————————————《有没…...
确保设备始终处于最佳运行状态,延长设备的使用寿命,保障系统的稳定运行的智慧地产开源了
智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过计算机视觉和…...
SP字体UI放大代码
代码: echo off set QT_SCALE_FACTOR放大倍数 start "" "你的SP.exe启动路径"...
信息安全之网络安全防护
信息安全之网络安全防护 先来看看计算机网络通信面临的威胁: 截获——从网络上窃听他人的通信内容中断——有意中断他人在网络上的通信篡改——故意篡改网络上传送的报文伪造——伪造信息在网络上传送 截获信息的攻击称为被动攻击,而更改信息和拒绝用…...
idea无法联网,离线安装插件
插件地址:https://plugins.jetbrains.com/ JetBrains Marketplace 如果无法进入,可以试试 配置hosts 3.163.125.103 plugins.jetbrains.com ip 变了,可以查询个最新的: https://tool.chinaz.com/speedtest/plugins.jetbrai…...
数据结构——哈希表
一、哈希表 1.1 哈希表的概念 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函…...
学习查看 linux 关于进程的文件信息 cat /proc/968/status
(1) 在 Linux 系统中,/proc 文件系统是一个伪文件系统,提供了一个接口来访问内核数据结构。/proc/[pid]/status 文件包含了关于特定进程的状态信息。当你运行 cat /proc/968/status 时,它会输出与进程 ID 为 968 的进程…...
记一次一波三折的众测SRC经历
视频教程和更多福利在我主页简介或专栏里 (不懂都可以来问我 专栏找我哦) 目录: 前言 波折一:RCE漏洞利用失败 波折二:SQL时间盲注 波折三:寻找管理后台 总结 前言 先谈个人SRC心得体会吧,我虽…...
python绘图之箱型图
箱型图(Boxplot),也称为箱线图或盒须图,是一种用于展示一组数据的分布情况的统计图表。它通过简洁的图形形式,直观地呈现数据的集中趋势、离散程度、偏态以及异常值等信息。本节我们来学习使用python绘制箱型图 # 导入…...
http 响应码影响 video 标签播放视频
背景 使用后端给的文件下载接口地址实现视频播放,但是 video 标签一直无法播放视频如下图,把接口地址放到浏览器请求能直接下载。但就是不能播放 原因 http 响应码不正确,返回201是无法播放视频200可以如下图 状态码的影响: 20…...
【ClickHouse 特性及应用场景】
Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS)。 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足够高的情形下能正常提供服务。但残酷的是,这种…...
【基础架构篇九】《DeepSeek模型版本管理:Git+MLflow集成实践》
各位在模型迭代中反复去世的炼丹师们,扔掉你们那些混乱的v1.2.3_final_fix2模型压缩包!今天我们不聊什么单纯的Git分支管理,也不讲MLflow的入门教程,而是直接掀开算法迭代的黑箱,手把手教你用"外科手术级"的版本控制方案,让模型迭代从玄学变成精准的流水线作业…...
EasyExcel 自定义头信息导出
需求:需要在导出 excel时,合并单元格自定义头信息(动态生成),然后才是字段列表头即导出数据。 EasyExcel - 使用table去写入:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E…...
MySQL 之INDEX 索引(Index Index of MySQL)
MySQL 之INDEX 索引 1.4 INDEX 索引 1.4.1 索引介绍 索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键 key,索引通过存储引擎实现。 优点 大大加快数据的检索速度; 创建唯一性索引,保证数…...
Linux驱动学习(二)--字符设备
设备分类 字符设备块设备网络设备 内核结构图: 字符设备号 字符设备号是32位的无符号整型值 高12位:主设备号低20位:次设备号 查看设备号 cat /proc/devices 设备号构造 直接使用宏MKDEV #define MKDEV(ma,mi) (((ma) << MINORBITS…...
计算机毕业设计--基于深度学习技术(Yolov11、v8、v7、v5)算法的高效人脸检测模型设计与实现(含Github代码+Web端在线体验界面)
基于深度学习技术(Yolov11、v8、v7、v5)算法的高效人脸检测模型 Yolo算法应用之《基于Yolo的花卉识别算法模型设计》,请参考这篇CSDN作品👇 计算机毕业设计–基于深度学习技术(Yolov11、v8、v7、v5)算法的…...
leetcode-414.第三大的数
leetcode-414.第三大的数 code review! 文章目录 leetcode-414.第三大的数一.题目描述二.代码提交 一.题目描述 二.代码提交 class Solution { public:int thirdMax(vector<int>& nums) {set<int> set_v(nums.begin(), nums.end());auto it set_v.rbegin()…...
使用API有效率地管理Dynadot域名,参与过期域名竞价
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...