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

【项目实战】【已开源】USB2.0 HUB 集线器的制作教程(详细步骤以及电路图解释)

写在前面

本文是一篇关于 USB2.0 HUB 集线器的制作教程,包括详细的步骤以及电路图解释。
本文记录了笔者制作 USB2.0 HUB 集线器的心路历程,希望对你有帮助。
本文以笔记形式呈现,通过搜集互联网多方资料写成,非盈利性质,万分感谢资料的提供者,如有侵权,请联系我删除,再次感谢!

文章目录

  • 写在前面
  • 一、电容滤波
    • 1. 原理
      • ① 阻抗概念
      • ② 电容的阻抗
      • ③ 什么是电容滤波
      • ④ 使用不同电容滤不同频率信号的原理
      • ⑤ 不同类型电容的选频特性
    • 2. 不同频率下对电容的要求
    • 3. 使用大电容滤除高频信号的情况
    • 4. 常见的应用范围
  • 二、TVS、ESD、齐纳二极管、压敏电阻的区别
    • 1. 总结
    • 2. 浪涌和静电
      • ① 不同点
      • ② 相同点
    • 3. TVS
      • ① 作用
      • ② 常用接线
      • ③ 参数说明
      • ④ TVS 的使用要求
    • 4. TVS 和 ESD二极管 的区别
      • ① 区别:
      • ② 补充知识:结电容与信号完整性
    • 5. TVS 与 齐纳二极管的区别
    • 6. TVS 与 压敏电阻的区别
  • 三、USB2.0
    • 1. 引脚定义
    • 2. 传输速率
    • 3. VBUS
    • 4. 限流保护
    • 5. ESD 防护
      • ① 什么是 ESD
      • ② USB2.0 的 ESD 防护设计
    • 6. 接地
    • 7. 上下拉电阻与速率
      • ① 协议对电阻的要求
      • ② 低速设备和全速设备的识别
      • ③ 低速设备和全速设备的断开
      • ④ 高速设备的识别
      • ⑤ 高速设备的断开
  • 四、差分线的绘制
    • 1. 差分概述
    • 2. 差分线绘制要求技巧
    • 3. PCB差分阻抗
      • ① 什么是 PCB 阻抗匹配
      • ② 差分阻抗匹配我们可以做什么
  • 五、项目实战 —— USB2.0 HUB 的制作
  • 六、什么是 TT
  • 后记

一、电容滤波

一般用小电容滤高频,大电容滤低频。

1. 原理

① 阻抗概念

阻抗(Impedance)是电路中对交流电的阻碍程度。
在电路中,阻抗可以使用以下公式来计算:

Z = R + jX

其中:
Z 是阻抗,
R 是电阻的值(以欧姆为单位),
X 是电抗的值(以欧姆为单位),
j 是虚数单位。

  • Z(电阻) = R + j0 = R
  • Z(电感) = jωL
  • Z(电容) = 1 / (jωC)

可以看到,对于电容和电感来说,其阻抗和频率有关。

② 电容的阻抗

从上面的公式可以看出,电容阻抗大小与频率和电容容值成反比。

也就是说,频率越高,电容呈现出来的阻抗越小,这也就是我们常说的电容 “隔直通交”。

③ 什么是电容滤波

利用电容 “隔直通交” 的特点,将电路中一定频率的信号导入地去除。一般将电容并联在要滤波的回落两端。

④ 使用不同电容滤不同频率信号的原理

一般用小电容滤高频,大电容滤低频

这是因为上面说到:电容阻抗大小不仅和频率成反比,也和电容容值成反比。这里其实是一个 “相对” 的概念:
- 当电容较小时:
- 如果频率也较低,那么 ω 与 C 的乘积也较小,所以呈现的阻抗大,几乎等于断路
- 如果频率比较高,那么 ω 与 C 的乘积比较大,呈现的阻抗比较小,高频信号可以通过

所以小电容只能滤除高频信号,对于低频信号无能为力

有人看到这里可能会想,为什么不只使用大电容滤波呢?根据理论,如果 C 大,不管对于高频还是低频, ω 与 C 的乘积都不会太小,呈现的阻抗也比较小,按理说应该可以起到滤波效果。
实际上是因为:

  • ESL 的影响:
    在这里插入图片描述
    现实生活中的电容器都不是理想电容器,除了电容本身还有 ESL(等效串联电感)ESR(等效串联电阻)
    大电容一般是电解电容,其 ESL 较大,由上文的阻抗公式可知,其表现出来的阻抗会由于 ESL 的影响而升高,所以对于高频信号来说,大电容的滤波效果较差。

可以这么理解,日常电容器上所标称的电容值都是在低频信号下测得的。而对于大电容来说,由于其较高的 ESL,在高频时其电容值可能衰减到比小电容还小,甚至开始呈现感性,对高频信号滤波效果差,所以此时需要加 ESL 较小的小电容来滤除高频信号

⑤ 不同类型电容的选频特性

电容的品质因素:Q=1/ωCESR
ESR越大,Q就越小,频响特性曲线就比较平坦。

  • ESR 较大,Q较小,频率响应范围较宽,前级板级滤波:钽电容、铝电解电容
  • ESR 较小,Q较大,有一定选频能力:陶瓷电容

2. 不同频率下对电容的要求

频率(Hz)容值电容类型
0 - 100K> 10uF钽电容、铝电解电容
100K - 10M0.1uF陶瓷电容
10M - 100M0.01uF陶瓷电容
> 100M0.001uF陶瓷电容、地平面和电源平面电容

3. 使用大电容滤除高频信号的情况

有些情况下,比如功率要求高时不得不用大电容滤除高频信号时,可以使用多个大电容并联,在补偿高频时容值损失的同时也把 ESR 进行并联减小了。

4. 常见的应用范围

  • DC - DC 电源的输入级:大容量钽电容
  • LDO 稳压器的输入级:大容量钽电容
  • 芯片引脚附近:0.1uF、10uF

二、TVS、ESD、齐纳二极管、压敏电阻的区别

1. 总结

这些器件的共性就是:当电压较小时,其电阻较大而且稳定,对于电路相当于开路;随着电压升高,电阻迅速下降,相当于短路,并联在电路两端时,可以将过电压导入地而不是传递给后级元件。

  • TVS:用于浪涌保护、静电防护
  • ESD:用于静电防护
  • 齐纳二极管:用于稳压电路
  • 压敏电阻:静电容量大,可承受更大的浪涌

2. 浪涌和静电

① 不同点

  • 产生原因不同:
    • 静电是指由电荷堆积所产生的电场,静电电荷可能在材料表面积累,例如在人体或工作环境中产生的静电。这些电荷可以通过触摸或接触导电元件来放电,引起故障或损坏。
    • 浪涌是指突然而短暂的电压和电流上升现象,通常由电力系统的瞬态事件引起,如电源开关、雷击等。这些过电压脉冲会通过电源线、通信线路或其它连接到电子设备的线路传播,可能引起电子设备的损坏。
  • 能量不同:
    • 静电能量较低,而浪涌电压较高

② 相同点

  • 电压高:
    • 静电和浪涌电压都很高
  • 接地:
    • 要防护浪涌或者静电,良好的接地都很重要

3. TVS

TVS(Transient Voltage Suppressor)瞬态电压抑制二极管。
在这里插入图片描述

① 作用

TVS 是工作在反向区的二极管,有钳位电压的作用,一般用于浪涌保护和静电防护。

② 常用接线

当出现过电压时,TVS 被击穿,将电压钳位在钳位电压:
在这里插入图片描述

③ 参数说明

  1. 最大反向工作电压:由于 TVS 反接入电路,故电路的正常工作电压不得超过最大反向工作电压
  2. 反向击穿电压:超过这个电压的时 TVS 的电流迅速增大
  3. 钳位电压:反向击穿后 TVS 迅速达到钳位电压,能把电压钳位在钳位电压处

在这里插入图片描述

④ TVS 的使用要求

  1. 电路的正常工作电压不得超过最大反向工作电压,这是因为超过最大反向工作电压后,反向电流加大得快,漏电功率高;
  2. 电路的最大工作电压不得小于钳位电压,这是因为当 TVS 触发钳位功能时,电压被钳位在钳位电压处,所以电路的最大工作电压不得小于钳位电压,否则即使过电压被钳位了,高于电路的最大工作电压的钳位电压也可能损害内部电路
  • TVS 用于保护电路 齐纳二极管多用于稳压电路
  • TVS 击穿电流较低(较低的电流就可以击穿) 齐纳二极管工作电流较大 (相对较大的电流才能起到稳压作用)
  • TVS 响应速度快
  • TVS 最大可承受功率较高 齐纳二极管最大可承受功率较低

4. TVS 和 ESD二极管 的区别

ESD(Electrostatic Discharge)是指由静电放电所引起的瞬间放电现象。从这个名字可以知道,ESD二极管 专门用于相比于浪涌能量较低的静电防护

但是原理和连接方式上,ESD防护二极管和 TVS 是差不多的。

① 区别:

  • 应用上
    • ESD 多用于板级的静电防护(在一些关键的引脚上)
    • TVS 多用于电源电路初 / 次级的保护
    • ESD 的结电容更低,用于类似 USB 传输信号线上可以保证信号完整性
  • 参数上
    • ESD 看的抗静电等级 LEVEL,而TVS 看的是功率
  • 封装上
    • ESD 体积小封装多样化,ESD防护集成芯片可同时接多路电路进行静电防护
    • TVS 体积较大、封装种类少、只能对单一路进行防护
  • 功率上
    • TVS 最大可承受功率较高,用于浪涌比较好
    • ESD 一般用于小功率的静电防护
      在这里插入图片描述

② 补充知识:结电容与信号完整性

  • 信号传输延迟:较小的结电容可以降低信号传输延迟。结电容与传输线电阻一起决定了传输线的时钟速率和传输速度。当结电容较小时,电流能够更快地充电或放电,减小了信号的传输延迟。这对于高速数据传输和时序要求严格的应用非常重要。

  • 信号的上升/下降时间:较小的结电容可以加快信号的上升/下降时间。结电容会影响信号从低电平到高电平或从高电平到低电平的过渡时间。通过减小结电容的大小,信号的切换速度可以更快,减少了信号的失真和形状变化,提高了信号完整性。

  • 电源噪声减少:较小的结电容可以减少电源线上的噪声传播。结电容在电源线路上起到滤波作用,可以降低高频电源噪声的传播和干扰。通过减小结电容的大小,可以提高电源噪声的抑制效果,保持信号的纯净性。

5. TVS 与 齐纳二极管的区别

TVS齐纳二极管
用于保护电路多用于稳压电路
击穿电流较低工作电流较大 ( 相对 )
响应速度快响应速度较慢
功率高功率较低

6. TVS 与 压敏电阻的区别

区别TVS压敏电阻
保护方向单向和双向两种双向保护
响应速度较慢
最大钳位电压和击穿电压最大钳位电压偏离击穿电压较小最大钳位电压偏离击穿电压较大
静电容量较低较高(承受更高的浪涌)
漏电流较小较大
结电容较小较大
线性特性较线性线性特性较差
可靠性较高较低
使用寿命较长较低
  • 线性特性对比(绿线为 TVS,蓝线为 压敏电阻)
    在这里插入图片描述

  • 静电容量对比
    在这里插入图片描述

三、USB2.0

官方网站:
usb.org

USB2.0 资料下载:
https://usb.org/document-library/usb-20-specification

1. 引脚定义

  1. VBUS:电源供电
  2. D-D+:一对差分信号线(差分阻抗:90Ω差分阻抗)
  3. GND:地线

2. 传输速率

  1. Low-Speed USB(低速USB): 低速USB的最大传输速度为 1.5 Mbps(兆位每秒),也被称为"USB 1.1低速模式"。它适用于一些低速率和低带宽需求的设备,例如鼠标、键盘和游戏手柄等。
  2. Full-Speed USB(全速USB): 全速USB的最大传输速度为 12 Mbps(兆位每秒),也被称为"USB 1.1全速模式"。它适用于较多的外围设备,例如打印机、扫描仪和某些音频设备等。
  3. High-Speed USB(高速USB): 高速 USB 是 USB 2.0 的核心特性,最大传输速度为 480 Mbps(兆位每秒)。它比低速和全速USB提供了更快的数据传输速度,适用于大多数常见的外围设备,包括存储设备、摄像头、移动硬盘和高速数据传输要求的设备。

3. VBUS

  • 高电源口电压: 4.75 - 5.25v , 供流能力大于 500mA
  • 低电源口电压: 4.4V - 5.25v , 供流能力大于 100mA
    在这里插入图片描述

4. 限流保护

  • 添加 限流IC 可以限制电流大小,防止短路等
    在这里插入图片描述
  • VBUS口可接入可恢复保险丝进行限流保护,主要是防止过流、短路
    • 最大电压:6V左右
    • 最大电流:根据 USB 口使用的电流进行一定冗余设计
      pptc

5. ESD 防护

① 什么是 ESD

ESD(Electrostatic Discharge):静电放电。它是指由于电荷积累在物体上引起的突然放电现象。当两个物体处于不同的电荷状态或者一个物体带有过多的电荷时,静电放电可能会发生。这种放电可以产生极高的电压和瞬间的电流,足以损坏敏感的电子元件或器件。

② USB2.0 的 ESD 防护设计

方案一:

  • VBUS 位置加 ESD 防护器件(一般为单向)
    • 结电容大小不用过多考虑
    • 最大反向工作电压:5V
    • 击穿电压:6V左右
    • 钳位电压:十几伏左右
  • 差分信号线位置加 ESD 防护器件(一般为双向),防止静电从信号线损坏芯片
    • 结电容:尽可能小,防止影响传输速率,最好在 1pF 以下
    • 最大反向工作电压:5V
    • 击穿电压:6V左右
    • 钳位电压:十几伏左右

在这里插入图片描述
方案二:(成本低廉)
直接在差分信号线上串联一对二十多Ω的电阻:
在这里插入图片描述

6. 接地

在这里插入图片描述

  • USB 母座外壳接地:通过 1MΩ 电阻和 10nF 电容接到系统地

7. 上下拉电阻与速率

USB接口的电气连接:
在这里插入图片描述

① 协议对电阻的要求

根据协议文档第 7 节,USB2.0 需要对上下拉电阻进行控制来区分不同速率的设备。

  1. USB主机端上的下拉终端电阻是15 kΩ ± 5%的电阻,与地相连
  2. 设备端在USB数据线(D+或D-)上接一个上拉电阻(Rpu),用来区分不同速度的设备。该电阻阻值要求为1.5k欧姆±5%。

② 低速设备和全速设备的识别

在这里插入图片描述

  1. 由于下拉电阻的存在,当没有 USB 设备接入时,主机 D+D- 数据线电平为低
  2. 当有设备插入时,由于上拉电阻的存在,D+D- 数据线的其中一根会拉高
    • D+拉高:识别为全速设备
    • D- 拉高:识别为低速设备
  3. 检测到设备连接后,集线器向主机报告,主机向集线器发送 Get_Port_Status 请求
  4. 集线器接到 Get_Port_Status 请求后对设备进行复位,复位成功后,主机对设备进行枚举

③ 低速设备和全速设备的断开

  1. 当总线空闲时,hub 检测设备断开连接信号,这个信号为 D+D-均为低电平的时间超过2.5us
  2. 当 hub 检测到该信号时,向主机报告设备已断开
  3. 设备端也可以通过断开上拉电阻实现设备断开(此时设备仍可插在USB口上)

④ 高速设备的识别

在这里插入图片描述

  1. 高速设备和全速设备一样,也是 D+ 上有一个1.5k的上拉电阻,所以,当高速设备接入后,前面的识别过程与全速设备的识别过程一致
  2. 在 hub 对设备进行复位的过程中(这个过程表现为 hub 通过驱动数据线到复位状态SE0,即D+和D-全为低电平,并持续至少10ms),高速设备通过内部的电流源向 D- 线持续灌大小为17.78mA电流(此时高速设备的1.5k上拉电阻还未撤销)。在hub端,全速/低速驱动器形成一个阻抗为 45Ω 的终端电阻,所以在 hub 端看到一个约 800mV 的电压(45欧姆*17.78mA),这就是Chirp K信号。Chirp K信号的持续时间是1ms~7ms
  3. 在 hub 端,虽然下达了复位信号,但USB2.0的高速接收器一直在检测 Chirp K 信号
    • 如果检测不到 Chirp K 信号,就继续复位操作直到复位结束,之后就在全速模式下操作
    • 如果检测到 Chirp K 信号,Chirp K 信号结束后 100us 内,hub必须开始回复一连串的 KJKJKJ… 序列,向设备表明这是一个 USB2.0 的 hub。这里的 KJ 序列是连续的,中间不能间断,而且每个 K 或 J 的持续时间在 40 - 60us 之间。KJ 序列停止后的 100 - 500us 内结束复位操作。hub 发送 Chirp KJ 序列的方式和设备一样,通过电流源向差分数据线交替灌 17.78mA 的电流实现。
  4. 设备检测到 6 个 hub 发出的 Chirp 信号后(3 对 KJ 序列),它必须在 500us 内切换到高速模式。切换动作有:
    • 断开 1.5k 的上拉电阻
    • 连接 D+/D- 上的高速终端电阻(45欧姆),实际上就是全速/低速差分驱动器
    • 进入默认的高速状态
  5. 设备端挂载新的终端电阻后,配上原先 hub 端的终端电阻,并联后的阻抗是 22.5Ω。hub 发送出来的 Chirp KJ 序列幅值降到了原先的一半,400mV 就是由 17.78*22.5 得来。以后高速操作的信号幅值就是 400mV 而不像全速/低速那样的 3V。
  6. 至此,高速设备与 USB2.0 hub握手完毕,进行后续的 480Mbps 高速信号通信

⑤ 高速设备的断开

  • 由于高速设备运行是断开1.5K上拉电阻的,故不能通过检测SE0信号判断设备的断开
  • 当高速设备断开时,D+和 D-线上的差分信号幅度将会变成两倍大小, 主机端下行收发器中的断开包络检波器感应到这个两倍大小的电压后输出为高,表示设备已断开

四、差分线的绘制

1. 差分概述

USB 使用差分信号传输数据,对于每一对信号,其中一个是正极(DP,Data Plus),另一个是负极(DM,Data Minus)。

差分信号传输是一种通过两个相等但相反的信号来传递信息的通信方式。在USB中,DP信号和DM信号之间的电压差异表示数字数据的模式,例如逻辑0和逻辑1。通过使用差分信号传输,USB能够提供更好的抗干扰能力和信号完整性,从而提供可靠的数据传输。

为了区分差分信号中的正极和负极,USB协议规定了 DP 和 DM 表示正负信号极性的命名约定。实际上,这种命名方式在不同类型的差分信号传输中很常见,不仅仅适用于 USB。因此,DM信号表示Data Minus(数据负线),而DP信号表示Data Plus(数据正线)。

2. 差分线绘制要求技巧

  1. 差分线尽量短
  2. 优先绘制差分线
  3. 差分线上尽量不超过两对过孔(过孔会增加线路的寄生电感,影响信号完整性)
  4. 平行紧密走线
  5. 长度差尽量小(控制在 5mil以内)
  6. 与其它信号网络以及地的距离尽量在 20mil 以上
  7. 两侧的测试点、串联的电阻电容、上下拉电阻的摆放尽量避免直角
    在这里插入图片描述

3. PCB差分阻抗

  • 在高速信号传输中,差分阻抗的匹配可以提供信号完整性,减少信号的反射和干扰
  • USB2.0 要求的差分阻抗是 90Ω±10%

① 什么是 PCB 阻抗匹配

  1. 差分线是由两根平行绘制在PCB板表层的微带线组成的,在边缘耦合效应下工作
  2. 差分线的阻抗由两根微带线的阻抗和线间距共同决定
  3. 微带线的阻抗由微带线的线宽、走线的铜皮厚度、到最近参考平面的距离以及PCB板材料的介电常数决定
  4. 差分线的耦合效应与两根微带线的线间距相关,线间距增加时,耦合效应减弱,差分阻抗增大;线间距减小时,耦合效应增强,差分阻抗减小

② 差分阻抗匹配我们可以做什么

作为工程师,我们能控制的就是线宽和线距,其他的由 PCB生产商决定。

  • 嘉立创针对自己的板子做了一个阻抗计算器
    嘉立创阻抗计算器
    嘉立创阻抗设计说明
    嘉立创阻抗计算器使用说明
    通过这个计算器,我们可以得出得到阻抗要求需使用的线宽

  • 在下单打板的时候,可以将阻抗管控要求提供给 PCB 生产厂商,让他们帮你做阻抗匹配

五、项目实战 —— USB2.0 HUB 的制作

板子已经画出来了,待验证…(挖坑)
原理图:
请添加图片描述
PCB:
请添加图片描述

六、什么是 TT

待补充…(挖坑)

后记

如果您觉得本文写得不错,可以点个赞激励一下作者!
如果您发现本文的问题,欢迎在评论区或者私信共同探讨!
共勉!

相关文章:

【项目实战】【已开源】USB2.0 HUB 集线器的制作教程(详细步骤以及电路图解释)

写在前面 本文是一篇关于 USB2.0 HUB 集线器的制作教程,包括详细的步骤以及电路图解释。 本文记录了笔者制作 USB2.0 HUB 集线器的心路历程,希望对你有帮助。 本文以笔记形式呈现,通过搜集互联网多方资料写成,非盈利性质&#xf…...

分布式运用之rsync远程同步

一、rsync的相关知识 1.1 rsync简介 rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法&am…...

誉天在线项目~ElementPlus实现浏览页面注意点

浏览按钮 点击浏览按钮&#xff0c;传递列表数据索引值。 根据索引值从列表数据数组中获取当前行数据。 <el-button click"toView(scope.$index)" type"success" size"small"><el-icon><EditPen /></el-icon> 浏览<…...

神经网络-pytorch版本

pytorch神经网络基础 torch简介 torch和numpy import torch import numpy as np np_datanp.arange(6).reshape((2,3)) torch_datatorch.from_numpy(np_data) tensor2arraytorch_data.numpy() print(np_data,"\n",torch_data,"\n",tensor2array)torch的数…...

uniapp vue 页面传参问题encodeURIComponent

页面传参objet json序列化后可能会报错 Uncaught SyntaxError: missing ) after argument list 但不一定是数据有问题&#xff0c;而是json成字符串后&#xff0c;字符串中有特殊字符&#xff0c;所以导致parse的时候格式不对。所以解决方案如下 如果传递参数为对象的时候&…...

【GDAL】tif影像拼接和目标截取

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、gdal.Warp拼接tif二、截取1.通过经纬范围截取拼接的影像2.通过shp范围截取凭借后影像 三、WarpOptions其他参数四、其他方式裁剪1.通过sh…...

ARM核心时间线

指令集架构处理器家族(ARM RISC)ARMv1ARM1ARMv2ARM2、ARM3ARMv3ARM6、ARM7ARMv4StrongARM、ARM7TDMI、ARM9TDMIARMv5ARM7EJ、ARM9E、ARM10E、XScaleARMv6ARM11、ARM Cortex-MARMv7ARM Cortex-A、ARM Cortex-M、ARM Cortex-RARMv8-A armv8.2Cortex-A35、Cortex-A50系列[18]、Cor…...

【Redis】深入探索 Redis 的数据类型 —— 列表 List

文章目录 一、List 类型介绍二、List 类型相关命令2.1 LPUSH 和 RPUSH、LPUSHX 和 RPUSHX2.2 LPOP 和 RPOP、BLPOP 和 BRPOP2.3 LRANGE、LINDEX、LINSERT、LLEN2.4 列表相关命令总结 三、List 类型内部编码3.1 压缩列表&#xff08;ziplist&#xff09;3.2 链表&#xff08;lin…...

高精度乘除法(超详细)

高精度乘除法&#xff08;超详细&#xff09; 题目1-高精度乘法 给定两个非负整数&#xff08;不含前导 0&#xff09; A 和 B&#xff0c;请你计算 AB 的值。 输入格式 共两行&#xff0c;第一行包含整数 A&#xff0c;第二行包含整数 B。 输出格式 共一行&#xff0c;包含…...

List 获取前N条数据

1.使用for循环遍历 public static void main(String[] args) {int limit 5;List<Integer> oldList Lists.newArrayList(1, 2, 3, 4, 5, 6, 7);List<Integer> newList Lists.newArrayList();if (oldList.size() < limit) {newList.addAll(oldList);return;}fo…...

Spring入门控制反转(或依赖注入)AOP的关键概念 多配置文件与web集成

目录 1. 什么是spring&#xff0c;它能够做什么? 2. 什么是控制反转(或依赖注入) 3. AOP的关键概念 4. 示例 4.1 创建工程 4.2 pom文件 4.3 spring配置文件 4.4 示例代码 4.4.1 示例1 4.4.2 示例2 &#xff08;abstract&#xff0c;parent示例&#xff09; 4.4.3 使…...

排序算法-希尔排序

属性 1. 希尔排序是对直接插入排序的优化。 2. 当gap > 1时都是预排序&#xff0c;目的是让数组更接近于有序。当gap 1时&#xff0c;数组已经接近有序的了&#xff0c;这样就会很 快。这样整体而言&#xff0c;可以达到优化的效果。我们实现后可以进行性能测试的对比。 3.…...

ClientDataSet运行中出现“ClientDataSet:dataset not in edit or insert mode”(一)

在打开数据表文件&#xff0c;对ClientDataSet执行Append或Insert时&#xff0c;“ClientDataSet&#xff1a;dataset not in edit or insert mode”&#xff1a; 一、搜索问题 1、执行“显示数据后”&#xff0c;再执行Append&#xff0c;出错&#xff0c;说明ClientDataSet处…...

华为GaussDB数据库

Gauss数据库初识_高斯数据库_ygpGoogle的博客-CSDN博客 Redhat 7.6安装GaussDB_100_1.0.1详细攻略_gaussdb_100_1.0.1-database-redhat-64bit.tar.gz dow_博德1999的博客-CSDN博客 https://www.ngui.cc/el/3381579.html?actiononClick 初识GaussDB——GaussDB的发展历程、部…...

Flink、Spark、Hive集成Hudi

环境描述: hudi版本:0.13.1 flink版本:flink-1.15.2 spark版本:3.3.2 Hive版本:3.1.3 Hadoop版本:3.3.4 一.Flink集成Hive 1.拷贝hadoop包到Flink lib目录 hadoop-client-api-3.3.4.jar hadoop-client-runtime-3.3.4.jar 2.下载上传flink-hive的jar包 flink-co…...

百度编辑器 Ueditor 视频上传时 目录创建失败 解决办法

找到百度编辑器的上传类 Uploader.class.php文件.大约111左右 //$this->stateInfo $this->getStateInfo("ERROR_CREATE_DIR");//这句注释掉 $this->stateInfo $dirname;//换成这一句然后,进编辑器上传.会提示出一个错误的文件保存路径 双击复制下来这个路…...

Go 字符串处理

一、 字符串处理函数 我们从文件中将数据读取出来以后&#xff0c;很多情况下并不是直接将数据打印出来&#xff0c;而是要做相应的处理。例如&#xff1a;去掉空格等一些特殊的符号&#xff0c;对一些内容进行替换等。 这里就涉及到对一些字符串的处理。在对字符串进行处理时…...

家政服务接单小程序开发源码 家政保洁上门服务小程序源码 开源完整版

分享一个家政服务接单小程序开发源码&#xff0c;家政保洁上门服务小程序源码&#xff0c;一整套完整源码开源&#xff0c;可二开&#xff0c;含完整的前端后端和详细的安装部署教程&#xff0c;让你轻松搭建家政类的小程序。家政服务接单小程序开发源码为家政服务行业带来了诸…...

SuperMap iClient3D 11i (2023) SP1 for Cesium之移动实体对象

作者&#xff1a;nannan 目录 前言 一、代码思路 1.1 绘制面实体对象 1.2 鼠标左键按下事件 1.3 鼠标移动事件 1.4 鼠标左键抬起事件 二、运行效果 三、注意事项 前言 SuperMap 官网三维前端范例 编辑线面&#xff0c;可以对面实体对象的节点进行增加、删除以及修改位置…...

【深度学习 AIGC】stablediffusion-infinity 在无界限画布中输出绘画 Outpainting

代码&#xff1a;https://github.com/lkwq007/stablediffusion-infinity/tree/master 启动环境&#xff1a; git clone --recurse-submodules https://github.com/lkwq007/stablediffusion-infinity cd stablediffusion-infinity conda env create -f environment.yml conda …...

Flutter插件之阿里百川

上一篇&#xff1a;Flutter插件的制作和发布&#xff0c;我们已经了解了如何制作一个通用的双端插件&#xff0c;本篇就带领大家将阿里百川双端sdk制作成一个flutter插件供项目调用&#xff01; 目录 登录并打开控制台&#xff0c;创建应用&#xff1a;填写应用相关信息开通百川…...

✔ ★ 算法基础笔记(Acwing)(三)—— 搜索与图论(17道题)【java版本】

搜索与图论 1. DFS1. 排列数字(3分钟)2. n-皇后问题 2. BFS&#xff08;队列&#xff09;1. 走迷宫二刷总结&#xff08;队列存储一个节点pair<int,int>&#xff09;三刷总结 走过的点标记上距离(既可以记录距离&#xff0c;也可以判断是否走过) ★ ★ 例题2. 八数码二刷…...

初试占比70%,计算机招生近200人,安徽理工大学考情分析

安徽理工大学 考研难度&#xff08;☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文980字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 安徽理工大…...

LeetCode题解:1720. 解码异或后的数组,异或,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/decode-xored-array/ 解题思路&#xff1a; 异或有如下性质&#xff1a; a ^ a 0a ^ 0 aa ^ b b ^ a 根据题意&#xff0c;已知encoded[i - 1] arr[i - 1] ^ arr[i]&#xff0c;可以做如下转换&#xff1a; encoded[i…...

【C刷题】day2

一、选择题 1、以下程序段的输出结果是&#xff08; &#xff09; #include<stdio.h> int main() { char s[] "\\123456\123456\t"; printf("%d\n", strlen(s)); return 0; } A: 12 B: 13 C: 16 D: 以上都不对【答案】&#xff1a; A 【解析】…...

Apollo源码安装的问题及解决方法

问题一 在进行git clone时&#xff0c;会报错Failed to connect to github.com port 443: Timed out&#xff0c;经过实践后推荐以下两种方法。 方法一&#xff1a;在原地址前加https://ghproxy.com 原地址&#xff1a;git clone https://github.com/ApolloAuto/apollo.git …...

Flutter 挖孔屏的状态栏占用问题怎么解决,横屏后去掉了状态栏,还是会有一块黑色的竖条

使用下方代码后依旧有一条黑色的区域 overridevoid initState() {// TODO: implement initStatesuper.initState();///关闭状态栏&#xff0c;与底部虚拟操作按钮SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);//隐藏状态栏&#xff0c;底部按钮栏S…...

Layui快速入门之第九节 表格事件的使用

目录 一&#xff1a;事件 二&#xff1a;头部工具栏事件 三&#xff1a;排序切换事件 四&#xff1a;列拖拽宽度后的事件 五&#xff1a;列筛选&#xff08;显示或隐藏&#xff09;后的事件 六&#xff1a;行单击和双击事件 七&#xff1a;行右键菜单事件 八&#xff1a;…...

[2023.09.14]: Rust的条件编译

关于条件编译&#xff0c;我的记忆是10多年前&#xff0c;写C#的时代了&#xff0c;最近10年写Python和Javascript代码&#xff0c;虽然Javascript中也可以通过插件实现条件编译的效果&#xff0c;但是用起来太憋足了。当我在Yew的SSR开发模式中看到条件编译的配置时&#xff0…...

数据清洗:数据挖掘的前期准备工作

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…...

宝鸡网站建设天伟网络/百度推广登录入口下载

Rsync文件同步的核心算法 文章出处:http://coolshell.cn/articles/7425.html#more-7425 rsync是unix/linux下同步文件的一个高效算法&#xff0c;它能同步更新两处计算机的文件与目录&#xff0c;并适当利用查找文件中的不同块以减少数据传输。rsync中一项与其他大部分类似程序…...

论文引用网站数据 如何做注释/seo视频教程汇总

EOF是一个计算机术语&#xff0c;为End Of File的缩写&#xff0c;在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。是int类型的宏定义&#xff0c;它扩展为负整数常量表达式&#xff08;通常为-1&#xff09;。…...

北京网站建设的价格天/天津seo排名扣费

使用 vite 搭建一个 vue3 的一个typescript的项目。 配置路由的添加路由界面的时候&#xff0c;报错&#xff1a;找不到指定的文件&#xff0c;提示错误如下图&#xff1a; 但是&#xff0c;如果将换成 ../就正常了&#xff0c;如下: 解决方法&#xff1a; 安装一个path的…...

微信商家小程序收费吗/seo的主要内容

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;高压电工考试资料考前必练&#xff01;安全生产模拟考试一点通每个月更新高压电工复审考试题目及答案&#xff01;多做几遍&#xff0c;其实通过高压电工模拟考试题库很简单。 1、…...

js网站源码已到期/无屏蔽搜索引擎

Time limit1000 ms Memory limit32768 kB OS/Windows 三个循环结&#xff0c;矩阵快速幂&#xff0c;注意时间要求&#xff0c;此方法比较省时间 #include<bits/stdc.h> using namespace std; typedef long long ll; typedef double s64; ll n; int m2; const int N3; …...

香港公司网站可以备案吗/武汉做seo

emqttd集群设置管理 一、先来看EMQ的文档定义&#xff1a;http://emqtt.com/docs/v1/cluster.html emqttd集群设置管理 假设部署两台服务器s1.emqtt.io, s2.emqtt.io上部署集群: 节点名 主机名(FQDN) IP地址 emqttds1.emqtt.io 或emqttd192.168.0.10 s1.emqtt.io 192.168.0.10 …...