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

CAN总线简介

1. CAN总线概述

在这里插入图片描述

1.1 CAN定义与历史背景

CAN,全称为Controller Area Network,是一种基于消息广播的串行通信协议。它最初由德国Bosch公司在1983年为汽车行业开发,目的是实现汽车内部电子控制单元(ECUs)之间的可靠通信。CAN总线的设计满足了汽车对安全性、舒适性、方便性、低公害和低成本的要求,通过减少线束数量和实现高速数据通信来优化汽车电子系统。

1.2 CAN总线的标准化

CAN总线已经成为国际标准,具体为ISO 11898系列,这一标准涵盖了物理层和数据链路层的定义。ISO 11898-1定义了数据链路层协议,ISO 11898-2规定了高速CAN总线物理层协议,而ISO 11898-3则规定了低速CAN总线物理层协议。此外,还有针对时间触发通信的ISO 11898-4标准,以及定义节能特性的ISO 11898-5和ISO 11898-6标准。

2. CAN总线通信原理

2.1 多主控制机制

CAN总线采用多主控制(Multi-Master)机制,这意味着网络上的任何节点都可以随时开始发送消息。在总线空闲时,最先访问总线的节点获得发送权。如果多个节点同时开始发送消息,则通过基于消息标识符(ID)的优先级来解决冲突,具有更高优先级(即ID数值更小)的消息将获得发送权。

2.2 仲裁机制

CAN总线的仲裁机制是一种非破坏性的过程,它确保了在多个节点同时尝试发送消息时,总线上的数据传输有序进行。当冲突发生时,节点会根据其消息的ID进行比较。如果一个节点的消息ID高于(即优先级较低)正在发送的消息ID,它将停止发送并进入接收模式。这个过程保证了高优先级的消息能够无阻碍地传输。

2.3 同步机制

CAN总线采用基于时间的同步机制,所有节点都以相同的波特率进行通信。位时序包括同步段、位段1和位段2,通过这些段的控制,CAN总线能够进行位同步,吸收节点时钟差异产生的波特率误差,确保数据传输的准确性。

3. CAN总线的优缺点

3.1 优点

  • 可靠性:CAN总线具有错误检测和恢复机制,能够确保数据传输的可靠性。
  • 灵活性:支持多种网络拓扑结构,易于扩展。
  • 实时性:由于多主控制和仲裁机制,CAN总线能够快速响应网络事件。
  • 成本效益:使用双绞线作为传输介质,降低了成本。
  • 抗干扰性:差分信号传输提高了CAN总线在工业环境中的抗干扰能力。

3.2 缺点

  • 速率限制:最高传输速率为1Mbps,可能不满足高带宽需求。
  • 节点限制:理论上节点数量无限制,但实际应用中受限于网络延迟和电气负载。
  • 技术复杂性:相比于简单的通信协议,CAN总线的实现更为复杂。

4. CAN总线的仲裁机制和同步机制

4.1 仲裁机制

  • 节点A 发送消息,ID为A001
  • 节点B 同时发送消息,ID为B010
  • CAN总线 检测到两个信号,开始仲裁过程。
  • 仲裁逻辑 比较两个ID,A001优先级更高。
  • 结果 节点A 继续发送,节点B 暂停发送。

4.2 同步机制

  1. 开始通信:节点选择发送数据。
  2. 位时序设定:所有节点根据设定的波特率调整位时序。
  3. 同步段:节点等待并检测总线上的跳变沿,实现同步。
  4. 位段1和位段2:节点根据采样点采样数据,并根据需要调整位段长度。
  5. 数据传输:数据按照同步的位时序在总线上传输。
  6. 错误检测:如果发现错误,节点发送错误标志并尝试重新同步。
  7. 传输完成:数据成功传输后,总线回到空闲状态。

2. CAN总线工作原理

2.1 CAN总线结构

CAN总线结构由物理层和数据链路层组成,其中物理层负责传输原始的比特流,而数据链路层则负责帧的组织和错误检测。

  • 物理层:由两条导线构成,即CAN_H(高电平)和CAN_L(低电平),它们之间的电压差表示传输的数据。物理层还涉及电气特性的定义,如差分电压、终端电阻等。
  • 数据链路层:定义了数据帧的格式和结构,包括帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束。数据链路层还负责错误检测和处理机制。

2.2 通信方式

CAN总线的通信方式基于以下关键概念:

  • 帧类型:CAN总线支持多种帧类型,包括数据帧、远程帧、错误帧和过载帧。每种帧都有其特定的用途和结构。
  • 位填充:为了保持同步,CAN总线使用位填充技术。当发送器检测到5个连续的相同电平位时,会在第6位插入一个相反电平的位。
  • 错误检测:CAN总线能够检测多种错误类型,包括位错误、帧错误、CRC错误等。错误检测机制确保了数据传输的可靠性。
  • 应答机制:当一个节点成功接收到一个数据帧后,它会发送一个应答(ACK)位,以通知发送节点帧已被成功接收。

2.3 仲裁机制

仲裁机制是CAN总线解决总线访问冲突的关键技术。当两个或多个节点同时开始发送消息时,仲裁机制通过比较消息的标识符(ID)来决定哪个节点可以继续发送。

  • 标识符比较:节点在发送数据时,会将自己的消息ID与总线上其他节点的消息ID进行比较。
  • 优先级确定:具有较小数值ID的消息具有更高的优先级,可以继续在总线上传输。
  • 退避算法:优先级较低的消息将停止发送,等待总线空闲后再重新发送。

2.4 同步机制

同步机制确保所有节点在数据传输过程中保持同步,即使它们的时钟频率存在微小差异。

  • 波特率设置:所有节点必须使用相同的波特率进行通信,以保证位的准确传输。
  • 位时序:位时序包括同步段、传播段和相位缓冲段,这些段的持续时间可以编程,以适应不同节点的时钟差异。
  • 重同步:如果节点检测到总线上的位时序与自己的不同步,它可以调整自己的位时序以重新同步。

4. CAN总线的仲裁机制和同步机制

4.1 仲裁机制

  • 节点A:发送具有ID A001 的消息。
  • 节点B:同时发送具有ID B010 的消息。
  • 总线检测:CAN总线检测到两个信号并开始仲裁过程。
  • 仲裁逻辑:比较两个ID,A001 优先级更高。
  • 结果:节点A继续发送,节点B暂停发送。

4.2 同步机制流

  1. 开始通信:节点选择发送数据。
  2. 位时序设定:所有节点根据设定的波特率调整位时序。
  3. 同步段:节点等待并检测总线上的跳变沿,实现同步。
  4. 位段1和位段2:节点根据采样点采样数据,并根据需要调整位段长度。
  5. 数据传输:数据按照同步的位时序在总线上传输。
  6. 错误检测:如果发现错误,节点发送错误标志并尝试重新同步。
  7. 传输完成:数据成功传输后,总线回到空闲状态。

3. CAN总线仲裁机制

3.1 仲裁机制原理

CAN总线的仲裁机制是基于每个节点发送的消息标识符(ID)的优先级来解决总线访问冲突的。在CAN协议中,消息的ID越小,其优先级越高。当两个或多个节点同时开始发送消息时,它们将通过仲裁机制来决定哪个节点可以继续在总线上传输其消息。

  • 固定优先级:每个节点的消息都有一个固定的优先级,由其消息ID决定。
  • 非破坏性:仲裁过程不会破坏已经在总线上传输的消息,保证了通信的可靠性。
  • 实时性:仲裁机制确保了高优先级的消息可以迅速获得总线访问权,满足了实时性要求。

3.2 仲裁过程详解

当多个节点同时开始发送消息时,仲裁过程如下:

  1. 开始发送:所有发送节点开始发送它们的消息。
  2. 监控总线:节点在发送的同时,持续监控总线上的信号状态。
  3. 比较ID:节点将自己的消息ID与总线上其他节点的消息ID进行比较。
  4. 确定优先级:如果一个节点发现其ID大于总线上的ID(即优先级较低),它将停止发送。
  5. 继续发送:如果节点的ID是所有发送节点中最小的(即优先级最高),它将继续发送消息。
  6. 退避:失去仲裁的节点将进入退避期,等待总线空闲后再尝试发送。
  7. 完成发送:获得总线访问权的节点完成其消息的发送。

仲裁机制的关键在于,它允许网络中的所有节点公平地竞争总线访问权,同时确保了高优先级消息的快速传输。这一机制是CAN总线能够在高实时性要求下稳定运行的重要因素之一。

4. CAN总线同步机制

4.1 同步机制原理

CAN总线的同步机制确保了网络上所有节点能够在相同的时间基准下进行通信,即使它们可能具有不同的时钟频率。同步机制的核心在于位时间的精确控制和调整,使得所有节点都能够在正确的时刻发送和接收数据。

  • 波特率统一:所有节点必须同意一个共同的波特率,这是同步通信的基础。
  • 位时序标准化:位时序被标准化为同步段、传播段和相位缓冲段,以适应不同节点的时钟频率差异。
  • 动态调整:节点可以动态调整自己的位时序,以与网络上的其他节点保持同步。

4.2 同步过程详解

同步过程涉及以下几个关键步骤:

  1. 同步段:在每个位的开始,所有节点在总线上寻找跳变沿(从隐性电平到显性电平或反之)来同步自己的时钟。
  2. 传播段:传播段是为了补偿信号在物理媒介中传播所需的时间。
  3. 相位缓冲段:相位缓冲段允许节点根据需要调整自己的时钟,以适应网络中的时钟差异。
  4. 采样点:节点在位时序的指定点(采样点)上读取总线上的电平状态,以确定传输的是隐性电平还是显性电平。
  5. 位填充:如果连续的相同电平位过多,将通过位填充引入一个相反的电平位,以维持同步。
  6. 重同步:如果节点检测到与总线不同步,它可以调整自己的位时序参数,以实现重同步。
  7. 错误处理:如果检测到错误,节点将发送错误标志,并可能根据错误的性质进行重同步。

通过这些步骤,CAN总线的同步机制确保了数据传输的准确性和网络通信的可靠性。

5. CAN总线的优点与缺点

5.1 优点分析

CAN总线作为一种广泛应用的通信协议,具有以下显著优点:

  • 高可靠性:CAN总线具有强大的错误检测能力,包括位错误、帧错误和CRC错误等,确保数据传输的准确性。
  • 实时性:由于多主控制机制和仲裁机制,CAN总线能够快速响应网络事件,满足实时性要求。
  • 网络灵活性:CAN总线支持多种网络拓扑结构,包括线型、星型和环形等,便于根据实际需求进行网络布局。
  • 成本效益:使用双绞线作为传输介质,相对于其他通信协议,CAN总线在成本上更具优势。
  • 抗干扰性:CAN总线采用差分信号传输,有效提高了抗电磁干扰的能力,适合工业环境使用。
  • 节点扩展性:理论上节点数量无限制,便于系统的扩展和升级。
  • 低延迟:由于CAN总线的仲裁机制,高优先级的消息可以快速获得总线访问权,从而降低通信延迟。
  • 标准化:作为国际标准化的通信协议,CAN总线具有良好的兼容性和互操作性。

5.2 缺点分析

尽管CAN总线具有许多优点,但在某些应用场景下也存在一些局限性:

  • 速率限制:CAN总线的最高传输速率为1Mbps,这在一些需要更高数据传输速率的应用中可能成为瓶颈。
  • 节点性能依赖:实际可连接的节点数量受限于网络延迟和电气负载,大量节点的加入可能会影响网络性能。
  • 技术复杂性:相比于一些简单的通信协议,CAN总线的实现更为复杂,需要专业的知识和技术支持。
  • 故障诊断困难:当网络出现故障时,故障诊断和定位可能较为困难,需要专业的工具和方法。
  • 对网络管理要求高:为了保持网络的稳定性和可靠性,需要对网络进行有效的管理和维护。
  • 兼容性问题:在与其他类型的通信协议集成时,可能会遇到兼容性问题,需要额外的接口和转换技术。
  • 单一总线故障影响大:CAN总线通常采用双绞线,一旦总线出现故障,可能会影响整个网络的通信。
  • 数据传输效率:在某些情况下,由于仲裁和错误处理机制的介入,可能会降低数据传输的效率。

6. CAN总线应用场景

6.1 汽车电子

CAN总线在汽车电子领域的应用非常广泛,它是现代汽车内部通信的关键技术之一。

  • 系统集成:汽车中的各种电子控制单元(ECUs),如发动机管理系统、制动系统、娱乐系统等,都通过CAN总线相互连接,实现了高度集成。
  • 实时控制:CAN总线的实时性保证了汽车关键系统的快速响应,如防抱死制动系统(ABS)和牵引力控制系统。
  • 诊断与维护:CAN总线使得对汽车的远程诊断和维护成为可能,提高了维修效率和降低了成本。
  • 数据共享:不同ECUs之间可以共享数据,如速度信息、发动机状态等,提高了系统的整体性能和可靠性。

6.2 工业自动化

CAN总线同样在工业自动化领域扮演着重要角色,特别是在工业4.0的背景下。

  • 设备互联:工业机器人、传感器、控制器等设备通过CAN总线互联,实现信息的实时交换和协同工作。
  • 分布式控制:CAN总线支持分布式控制系统的构建,各个控制节点可以独立工作,同时保持数据同步。
  • 灵活布局:工业现场的设备布局经常变动,CAN总线易于布线和扩展,适应了这种变化需求。
  • 高可靠性:工业环境复杂多变,CAN总线的高可靠性和错误检测机制确保了控制系统的稳定运行。
  • 远程监控:通过CAN总线,可以实现对工业设备的远程监控和控制,提高了生产效率和管理水平。

7. CAN总线与其他总线比较

7.1 CAN总线与SPI总线

7.1.1 通信方式

  • CAN总线:采用多主控制机制,支持多个节点同时竞争总线使用权,通过仲裁机制确保高优先级数据的传输。
  • SPI总线:基于主从架构,有一个主设备和多个从设备,主设备控制数据传输的时钟信号和传输过程。

7.1.2 数据传输速率

  • CAN总线:最高传输速率可达1Mbps,适用于需要较高实时性的应用场景。
  • SPI总线:速率可达10Mbps或更高,取决于主设备和从设备的能力,以及通信距离。

7.1.3 网络拓扑

  • CAN总线:支持线性或总线型拓扑,易于扩展,适用于复杂的网络结构。
  • SPI总线:通常采用星型拓扑,从设备较少,适合简单的点对点通信。

7.1.4 错误处理

  • CAN总线:具有强大的错误检测和恢复机制,如CRC校验、ACK机制等。
  • SPI总线:错误检测能力较弱,通常依赖于主设备对从设备的管理。

7.1.5 应用场景

  • CAN总线:广泛应用于汽车电子、工业自动化等需要高可靠性和实时性的领域。
  • SPI总线:常用于微控制器与外设之间的通信,如传感器、存储器等。

7.2 CAN总线与I2C总线

7.2.1 通信方式

  • CAN总线:基于广播机制,所有节点共享同一通信介质,通过仲裁机制解决冲突。
  • I2C总线:同样采用主从架构,但允许多个主设备和多个从设备,通过地址来区分不同的从设备。

7.2.2 数据传输速率

  • CAN总线:最高传输速率为1Mbps,适合中高速数据传输。
  • I2C总线:速率较低,通常在100kHz至400kHz之间,适用于低速数据传输。

7.2.3 网络拓扑

  • CAN总线:支持复杂的网络拓扑,易于实现网络扩展。
  • I2C总线:采用总线型拓扑,布线相对简单,但节点数量受限于总线容量。

7.2.4 错误处理

  • CAN总线:具备多种错误检测手段,能够确保数据传输的可靠性。
  • I2C总线:错误检测主要依赖于ACK机制,对错误的处理能力有限。

7.2.5 应用场景

  • CAN总线:适用于汽车电子、工业控制等对实时性和可靠性要求较高的场合。
  • I2C总线:常用于消费电子产品中微控制器与低速外设的通信,如传感器、EEPROM等。

8. 结论与未来展望

8.1 结论

CAN总线作为一种成熟且广泛使用的通信协议,在汽车电子和工业自动化等领域发挥着重要作用。其独特的多主控制机制、非破坏性仲裁机制和同步机制,为网络通信提供了高可靠性、实时性和灵活性。同时,CAN总线的标准化和错误检测机制进一步增强了其在复杂工业环境中的稳定性和抗干扰能力。然而,随着技术的发展和应用需求的提高,CAN总线也面临着速率限制、技术复杂性等挑战。

8.2 未来展望

面向未来,CAN总线技术有望在以下几个方面得到进一步的发展和完善:

  • 速率提升:随着通信技术的进步,提高CAN总线的传输速率,以满足更高带宽需求的场景,是一个重要的研究方向。
  • 智能化:集成更先进的智能化算法,如机器学习,以提高CAN总线网络的自适应性和自我管理能力。
  • 集成新技术:结合5G、物联网(IoT)等新兴技术,使CAN总线能够更好地融入未来智能系统和网络。
  • 简化设计:研究和开发更简化的CAN总线实现方案,降低技术门槛,使其更易于部署和维护。
  • 增强安全性:随着网络攻击手段的不断演进,加强CAN总线网络的安全性,保护数据不被未授权访问或篡改,变得尤为重要。
  • 标准化扩展:继续推动CAN总线的国际标准化进程,确保不同设备和系统之间的互操作性。
  • 跨领域应用:探索CAN总线在新兴领域的应用,如航空航天、医疗设备等,以满足不同行业的特殊需求。

总体而言,CAN总线作为一种可靠且高效的通信协议,在未来仍将继续发展,并在更多领域发挥其重要作用。随着技术的不断创新和优化,CAN总线将更好地适应未来智能系统的需求,为用户提供更加安全、高效和灵活的通信解决方案。

相关文章:

CAN总线简介

1. CAN总线概述 1.1 CAN定义与历史背景 CAN,全称为Controller Area Network,是一种基于消息广播的串行通信协议。它最初由德国Bosch公司在1983年为汽车行业开发,目的是实现汽车内部电子控制单元(ECUs)之间的可靠通信。…...

【HSQL001】HiveSQL内置函数手册总结(更新中)

1.熟悉、梳理、总结下Hive SQL相关知识体系。 2.日常研发过程中使用较少,随着时间的推移,很快就忘得一干二净,所以梳理总结下,以备日常使用参考 3.欢迎批评指正,跪谢一键三连! 文章目录 1.函数清单 1.函数清…...

Rust面试宝典第14题:旋转数组

题目 给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。要求如下: (1)尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 (2)使用时间复杂度为O(n)和空间…...

解决SpringBoot中插入汉字变成?(一秒解决)

在这里url后面加一行配置即可&useUnicodetrue&characterEncodingUTF-8即可 解释 spring.datasource.url: 这里包含了数据库的URL,以及额外的参数如useUnicodetrue用于启用Unicode字符集支持,characterEncodingUTF-8用于指定字符编码为UTF-8&…...

5.26牛客循环结构

1002. 难点: 两层循环条件设置 思路 可以设置三个变量 代码 1003 思路: 与星号双塔差不多,在此基础上加大一点难度 每日练题5.23 (EOF用法)-CSDN博客 代码 1004 代码...

AIGC 004-T2I-adapter另外一种支持多条件组合控制的文生图方案!

AIGC 004-T2I-adapter另外一种支持多条件组合控制的文生图方案! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 T2I-Adapter 论文提出了一种名为 T2I-Adapter 的轻量级适配器模块,旨在增强文本到图像 (T2I) 扩散模型的语义理解和生成能力。 论文指出…...

详解 Cookies 和 WebStorage

Cookies 和 WebStorage Cookies 和 WebStorageCookies简要介绍操作 Cookies(document.cookie)不足之处 WebStorage简要介绍LocalStorage Vs. SessionStorage操作 WebStorage 三种数据存储方式的对比分析共性差异 REFERENCES Cookies 和 WebStorage Cook…...

BeanFactory、FactroyBean、ApplicationContext

BeanFactory Ioc容器、定义接口规范来管理spring bean的生命周期、依赖、注入,spring中有各种Ioc容器 FactroyBean 定制的工厂Bean,可以通过抽象工厂方式创建的bean,不纳入spring的生命周期、依赖、注入特性,相当于spring给第三…...

【计算机网络】HTTPS 协议原理

加密 1. 加密概念 加密就是把明文 (要传输的信息)进行一系列变换,生成密文。 解密就是把密文再进行一系列变换,还原成明文。 在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进行这个过程,这样的数…...

springboot + Vue前后端项目(第十二记)

项目实战第十二记 1.写在前面2. 整合Echarts2.1 vue安装Echarts2.2 使用Echarts2.3 EchartsController编写2.4 Home.vue编写 总结写在最后 1.写在前面 本篇主要讲解系统整合Echarts 2. 整合Echarts 2.1 vue安装Echarts npm i echarts -S2.2 使用Echarts vue中使用echarts的…...

linux 常用命令:find grep ps netstat sudo df du rm

rm 命令 删除 -r 是递归参数(recursive),用于删除目录及其内容。如果不加这个参数,rm 命令无法删除非空目录。-f 是强制参数(force),用于强制删除文件或目录,不会进行任何确认提示…...

SQLiteOpenHelper数据库帮助器

SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。 1、继承SQLiteOpenHelper类,需要重写onCreate和onUpgrade两个方法 案例:实现增删改查 package com.example.databases_text;import android.app.PictureInPictureParams; import androi…...

2024年5月26日 (周日) 叶子游戏新闻

资深开发者:3A游戏当前处于一种尴尬的中间地带游戏行业整体,尤其是3A游戏正处于艰难时期。尽管2023年3A游戏佳作频出,广受好评,但居高不下的游戏开发成本(传闻《漫威蜘蛛侠2》的制作成本高达3亿美元)正严重…...

STM32-10-定时器

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG 文章目录 一、STM32 基础定时器1. 基本定时器简介2. 基本定时器框图3. 基本定时器相关寄存器4. 定时器溢出…...

今天说的什么好呢

先这样吧...

计算机网络-Traffic-Filter流量过滤策略

一、概述 为提高网络安全性,管理人员需要控制进入网络的流量,将不信任的报文丢弃在网络边界。所谓的不信任报文是指对用户来说存在安全隐患或者不愿意接收的报文。同时保证数据访问安全性,企业网络中经常会要求一些部门之间不能相互访问。 背…...

小白入职 必要熟悉 Git / tortoiseGit 工具

1.安装Git 1.1 了解Git Git是分布式版本控制系统,没有中央服务器的每个人的电脑就是一个完整的版本库,工作时无需联网可多人协作,只需把各自的修改推送给对方,就可以互相看到对方的修改了 分布式版本控制工具管理方式&#xff…...

春秋CVE-2022-23906

简介 CMS Made Simple v2.2.15 被发现包含通过上传图片功能的远程命令执行 (RCE) 漏洞。此漏洞通过精心制作的图像文件被利用。 正文 1.进入靶场2.进入登录界面,弱口令admin/123456 3.进入后台,文件上传点 4.上传一句话木马图片 5.复制图片&#xf…...

JavaFX安装与使用

前言 最近学习了javafx,开始时在配置环境和导包时遇到了一些麻烦,关于网上很多方法都尝试过了,现在问题都解决了,和大家分享一下我是怎么实现javafx的配置,希望大家可以通过这个方法实现自己的环境配置! 🙈个人主页: 心.c 🔥文章专题:javafx &#x1f49…...

漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)

漫画网站 目录 基于SprinBootvue的漫画网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...