五种嵌入式经典通信总线协议

news2024/11/19 4:43:14

一.先前知识

1.并行与串行

并行通信和串行通信是两种不同的数据传输方式:

  1. 并行通信:并行通信是指在同一时间使用多条并行传输的线路传输多个比特的数据。每个比特使用独立的线路进行传输,同时进行。这样可以在一个时钟周期内传输多个比特,提高传输速率。并行通信常用于短距离高速数据传输,如内部计算机总线、内存之间的数据传输等。

![2023-11-14T17:10:23.png][2]

  1. 串行通信:串行通信是指使用单条线路逐个比特顺序传输数据。每个比特按照顺序依次传输,通过时钟信号进行同步。串行通信通常使用的线路较少,便于布线和实现,适用于长距离通信和低速传输。串行通信常见的标准包括UART、SPI、I2C等。

![2023-11-14T17:11:11.png][3]

并行通信的优势是在同一时间内可以传输多个比特,传输速率较高。然而,由于需要使用更多的线路,对电路和布线的要求较高,限制了通信距离和复杂性。相比之下,串行通信只使用一条线路,更容易实现和布线,适合长距离传输和复杂环境。但是,传输速率相对较低。

选择并行通信还是串行通信通常取决于具体的通信需求、距离、传输速率、成本和可靠性要求等因素。许多应用中,串行通信已成为主流选择,但在某些特殊领域仍然需要并行通信来满足高速数据传输需求。

2.单工和双工

在这里插入图片描述

  1. 单工通信(Simplex):在单工通信中,数据只能在一个方向上进行传输。一个设备只能发送数据,而另一个设备只能接收数据。这种通信模式类似于单向街道,只能在一个方向上进行通行。典型的示例是广播电台向听众广播信号,而听众无法向广播电台发送信号。

  2. 半双工通信(Half Duplex):在半双工通信中,数据可以在两个方向上进行传输,但不能同时进行。设备可以在某个时间段内发送数据,然后切换为接收模式以接收数据。这就像是一个双向的单车道,交通只能在一个方向上进行,而不能同时在两个方向上进行。对讲机是一个常见的半双工通信示例,其中一方说话时,另一方必须等待。

  3. 全双工通信(Full Duplex):在全双工通信中,数据可以在两个方向上同时进行传输,实现双向通信。设备可以同时发送和接收数据,没有时间限制。这就像是双向的双车道,车辆可以同时在两个方向上行驶。典型的全双工通信示例是电话通话。通话双方可以同时说话和听对方说话。

选择单工、半双工或全双工通信取决于具体的应用需求。如果只需要单向传输数据,单工通信可能是合适的选择。如果需要在两个方向上交替传输数据,但不需要同时进行,半双工通信会更合适。而如果需要在两个方向上同时进行双向通信,全双工通信是最合适的选择。

一.UART

1.概述

UART(通用**异步收发传输器)是一种用于串行通信的标准接口协议。它是一种简单但功能强大的通信协议(全双工**),先传低位,后传高位。广泛应用于电子设备之间的数据传输,在嵌入式系统中常用于主机和辅助设备之间的通信。

UART使用两根线(数据线和时钟线)来进行数据传输,UART协议定义了数据的传输格式,包括数据位数、奇偶校验位、停止位等。它通常使用ASCII码来表示字符数据,但也可以传输二进制数据。通常情况下,UART的数据传输速率(波特率)可以根据具体应用需求进行配置,典型的波特率有9600、19200、115200等。

UART接口在各种设备和应用中广泛使用,例如计算机、微控制器、传感器、调制解调器、GPS接收器等。它的简单性和可靠性使得UART成为许多串行通信需求的首选协议。

2.波特率

波特率(Baud Rate)是指单位时间内传送的码元(数字)数,通常用每秒钟传输的比特数(bit/s)来表示。在串行通信中,波特率通常用于表示数据传输的速率,即每秒钟可以发送多少比特的信息。具体来说,波特率指的是发送方发送一个码元所用的时间,和这个码元所代表的比特数之间的关系。

例如,假设串口的波特率设置为9600 bps,则在每秒钟内可以传输9600个比特的数据。这意味着,每秒钟可以传输9600/8=1200个字节的数据(注意,这里的基本传输单元是字节,而不是比特,因为在通信中,比特通常是由一些组合成的字节来表示的)。

3.UART帧格式

![2023-11-14T17:24:13.png][5]

UART是一种常见的串行通信接口协议,用于将数据在计算机和外部设备之间进行传输。UART通常用于串口通信,通常数据以字节的形式通过串行线路发送和接收,空闲时为高电平

UART帧格式通常由以下几部分组成:

  1. 起始位(Start Bit):UART通信的数据帧以一个起始位开始,表示数据传输的开始。起始位通常为逻辑低电平(0)。

  2. 数据位(Data Bits):数据位是实际传输的数据比特。数据位的数量可以是5、6、7或8位,取决于设备的设置。

  3. 校验位(Parity Bit):校验位是用于检测和纠正数据传输中的错误的附加比特。校验位可以是奇校验、偶校验或无校验(没有校验位)。如果选择了奇校验,则校验位被设置为确保数据位中的1的数目为奇数。如果选择了偶校验,则校验位被设置为确保数据位中的1的数目为偶数。

  4. 停止位(Stop Bit):停止位表示数据帧的结束。它通常是一个或多个逻辑高电平(1)。停止位的数量可以是1、1.5或2个,具体取决于设备的设置。

注意:UART空闲位为高电平,UART通信是一种异步通信方式,由于发送方和接收方的时钟不同步,因此需要使用起始位和停止位来标识每个数据帧的开始和结束。

例如,一个典型的UART帧格式可能是:1个起始位 + 8个数据位 + 1个偶校验位 + 1个停止位。这意味着每个数据帧由11个比特组成。

在实际应用中,UART帧格式可以根据具体的需求进行定制,例如调整数据位的数量、校验位的设置和停止位的数量。这取决于设备之间的通信协议和通信要求。

三.RS232协议(基于UART)

1.UART问题

UART具有一些缺点,包括:

  1. 线缆长度限制:UART通信的传输距离受到线缆的长度限制。在长距离传输时,信号可能会衰减或受到干扰,导致数据错误或丢失。

  2. 电气接口不统一:UART只是对信号的时序进行了定义,而未定义接口的电气特性;UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异,所以不同的处理器使用UART通信时一般不能直接相连,UART没有规定不同器件连接时连接器的标准,所以不同设备间通过UART通信时连接很不方便;

  3. 时钟同步问题:UART通信是异步通信,发送方和接收方的时钟不同步。这可能导致时钟差异引发的数据丢失或错误。

  4. 速率限制:UART通信的速率受到波特率的限制。较高的波特率可能会导致更高的传输速率,但也会增加传输时钟的要求和电磁干扰的风险。

  5. 通信速度相对较慢:由于UART通信采用的是异步传输方式,并且需要在每个数据帧中添加起始位、停止位和校验位等附加信息,因此与其他通信协议相比,UART的通信速度相对较慢。

因为UART的各种缺点,我们在电气层面又进一步规定了各种协议,其中包括RS232协议RS485协议

2.RS232协议概述

1.接口
该标准规定采用一个25引脚的DB-25连接器,标准中对连接器的每个引脚的信号内容加以规定)还对各种信号的电平加以规定;后来IBM的PC机将RS232简化成了DB-9连接器,后来成为事实标准;现在工业设备的RS-232接口一般只使用RXD、TXD、GND三条线;

2,信号
该标准规定逻辑“1”的电平为-5v到-15v,逻辑“0”的电平为+5v+15v,选用该电气标准的目的在于提高抗干扰能力,增大通信距离,其传送距离一般可达15m

3.电平转换

虽然很多处理器中都会集成UART控制器,但处理器产生的信号一般都是TTL信号并不是符合RS232标准的信号,所以一般我们还需要在处理器外部去添加电路对信号的电平进行转换;通常使用MAX232芯片进行转换。

4.RS232缺点

RS-232标准作为一种老式的串行通信标准,具有以下几个方面的缺陷:

  1. 速度限制:通信速度较低。

  2. 传输距离较短:15m

  3. 抗干扰性差:RS-232标准的电信号传输距离、电源和静电放电等方面的限制都会影响信号的稳定性,易受外部干扰,同时发送和接收设备之间的接地电位差可能会导致误差。

  4. 接口的信号电平值比较高: 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接

四.RS485协议(基于UART)

1.RS485协议概述

![2023-11-15T06:36:05.png][6]

RS-485是一种串行通信协议,常用于在远距离和噪音环境下进行数据通信。以下是有关RS-485协议的一些重要信息:

  1. 物理层特性:RS-485使用差分信号传输,其中一对信号线为正极性(+)和负极性(-)信号线,用于抵消噪音干扰。这种传输方式提供了更高的抗干扰性和噪音容忍度,使其非常适用于远距离通信。

  2. 半双工通信:RS-485是一种半双工通信协议,意味着数据只能在单个信道上进行一个方向的传输。因此,在RS-485通信中,一方设备必须等待另一方设备完成发送或接收操作后才能开始通信。

  3. 多点通信:RS-485支持多个设备在同一信号线上进行通信,允许多点通信拓扑结构。每个设备都有一个唯一的地址,以便其他设备根据地址来识别并选择性地接收数据。

  4. 最大传输距离:RS-485可在最大传输距离上达到1500米,这是由于其差分信号传输和抗干扰性能较强。相比之下,RS-232通信的传输距离通常较短。

  5. 驱动能力:RS-485驱动能力强,能够驱动较多的接收器,适用于工业环境中的长距离数据通信需求。

  6. 信号:RS485标准规定采用差分信号进行数据传输,两线间的电压差为+2v到+6v表示逻辑“1”,两线间的电压差为-2v到-6y表示逻辑“0”;使用差分信号能有效地减少噪声信号的干扰,延长通信距离。RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接

需要注意的是,RS-485仅定义物理层的传输规范,而未定义数据帧格式和通信协议。因此,在实际应用中,需要根据具体需求制定相应的协议和应用层通信规范。

RS-485协议是一种可靠、抗干扰能力较强的半双工串行通信协议,适用于远距离传输和工业环境中的数据通信应用。

2.电平转换

虽然很多处理器中都会集成UART控制器,但处理器产生的信号一般都是TTL信号并不是符合RS485标准的信号,所以一般我们还需要在处理器外部去添加电路将TTL信号转换成差分信号;

3.RS485优势

根据您提供的信息,以下是RS-485协议的一些优点:

  1. 信号电平值较低:RS-485接口的信号电平值较低,这意味着它不容易损坏接口电路的芯片。这种特性有助于保护设备的硬件,并延长设备的使用寿命。

  2. 与TTL电平兼容:RS-485接口与TTL电平兼容,可以方便地与TTL电路连接,这简化了与其他数字电路的集成和连接,提高了系统的灵活性和兼容性。

  3. 通信速度快:RS-485支持较快的通信速度,可以满足对高速数据传输的需求,适用于实时性要求高的应用场景。

  4. 抗噪声干扰性强:RS-485协议具有优异的抗噪声干扰性能,这使得它在具有电磁干扰或其他噪声干扰的环境中依然能够保持稳定的通信质量。

  5. 传输距离较远:RS-485能够实现较远的传输距离,最高可达1500米。这使得它非常适用于需要长距离数据传输的应用场景,如工业控制系统、仪器仪表和环境监测等领域。

  6. 可实现多节点组网:RS-485支持多个设备在同一总线上进行通信,因此可以实现多节点组网。这种能力使得RS-485适用于需要在多个设备之间进行实时数据传输和通信的应用。

综上所述,RS-485协议具有信号电平低、兼容性强、通信速度快、抗干扰性强和传输距离远的优点,使其成为一种广泛应用于工业控制和远距离数据通信领域的可靠通信协议。

五.IIC协议

1.IIC总线协议简介

![2023-11-15T07:09:01.png][7]

  1. IIC总线是PhiLips公司在八十年代初推出的一种串行半双工总线主要用于近距离、低速的芯片之间的通信;IIC总线有两粮双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用

  2. IIC总线是一种多主机总线,连接在|IC总线上的器件分为主机和从机主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;

2.IIC总线通信过程

非常感谢您提供的更详细的I2C总线协议的步骤。下面是对您提到的每个步骤的更详细说明:

  1. 主机发送起始信号启用总线。

  2. 主机发送一个字节数据指明从机地址和后续字节的传送方向。

  3. 被寻址的从机发送应答信号回应主机。

  4. 发送器发送一个字节数据。

  5. 接收器发送应答信号回应发送器。

循环步骤4和步骤5:发送器和接收器之间在每次传输一个字节数据后,持续地循环执行步骤4和步骤5。

n. 通信完成后主机发送停止信号释放总线。

通过这些步骤,主机和从机之间可以进行可靠的数据传输和通信。这个协议的简洁性和灵活性使得I2C总线协议成为连接多个设备进行短距离通信的一种常见选择。

3.IIC寻址方式

  1. IIC总线上传送的数据是广义的,既包括地址,又包括真正的数据.
  2. 主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,'0’表示主机发送数据,'1’表示主机接收数据;总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第8位将自己定为发送器或接收器

在这里插入图片描述

4.IIC总线信号实现

  1. 起始信号和停止信号
    SCL为高电平时,SDA由高变低表示起始信号
    SCL为高电平时,SDA由低变高表示停止信号
    起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态停止信号产生后总线处于空闲状态
    在这里插入图片描述

  2. 字节传送与应答
    IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位
    在这里插入图片描述

  3. 同步信号
    IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定

在这里插入图片描述

5.典型IIC时序

  1. 主机向从机发送数据
    在这里插入图片描述

  2. 从机向主机发送数据
    在这里插入图片描述

  3. 主机先向从机发送数据,然后从机再向主机发送数据
    在这里插入图片描述

注:阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送;A表示应答,A非表示非应答,S表示起始信号,P表示终止信号

六.SPI协议

1.SPI总线协议简介

SPI(Serial_Per ipheral Interfaco)是串行外设接口的缩写,SPI是一种高速的全双工同步串行通信总线;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备;SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选)SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议;

SPI(Serial Peripheral Interface)协议是一种用于串行通信的同步协议,通常用于在数字集成电路之间传输数据。SPI协议通常包含以下特点:

  1. 线配置:SPI使用四根线进行通信,包括一个主时钟线(SCLK),一个主输出/从输入线(MOSI),一个主输入/从输出线(MISO)以及一个片选线(SS)。

  2. 主从结构:SPI协议通常包括一个主设备和一个或多个从设备。主设备控制通信并负责生成时钟信号,而每个从设备都有一个片选线,由主设备控制。

  3. 全双工通信:SPI通信是全双工的,意味着主设备和从设备可以同时发送和接收数据。

  4. 传输模式:SPI协议可以通过调整时钟极性和相位来支持四种传输模式,以适应不同设备的需求。

  5. 速率灵活:SPI协议在不同的设备上可以以不同的速率进行通信,因为时钟频率是可调的。

  6. 灵活性:SPI协议具有一定程度的灵活性,可以通过协商进行高速数据传输,但同时也有较高的实现复杂度。

在这里插入图片描述

2.寻址方式

当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该从设备。

在这里插入图片描述

3.通信过程

SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑‘1’,低电平表示逻辑‘0’;一个字节传送完成后无需应答即可开始下一个字节的传送;SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送;

在这里插入图片描述

4.极性和相位

极性和相位
SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHA)这两个因素,

  1. CPOL表示SCLK空闲时的状态
    CPOL=0,空闲时SCLK为低电平
    CPOL=1,空闲时SCLK为高电平
  2. CPHA表示采样时刻
    CPHA=0,每个周期的第一个时钟沿采样
    CPHA=1,每个周期的第二个时钟沿采样
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将;设计为某种特定的工作模式;我们在使用该设备时就必须保证主设备工作模式和该从设备保持一致,否则是无法进行通信的;所以一般我们需要对主设备的CPOL和CPHA进行配置;

七.IIC和SPI异同点

相同点

  1. 均采用串行、同步的方式
  2. 均采用TTL电平,传输距离和应用场景类似
  3. 均采用主从方式工作

不同点

  1. 1IC为半双工,SPI为全双工。
  2. 11C有应答机制,SPI无应答机制。
  3. 1IC通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号来寻址。
  4. 1IC的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka消费全流程

Kafka消费全流程 1.Kafka一条消息发送和消费的流程图(非集群) 2.三种发送方式 准备工作 创建maven工程&#xff0c;引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.3.1&l…

阿里云服务器的tcp端口无法访问(云服务厂家问题?)

问题->无法访问 阿里云服务器的tcp端口 最近一台阿里云服务器的一个端口61616无法访问&#xff0c;在服务器内用外网地ip发现无法访问&#xff0c;用内网ip访问是正常的&#xff0c;通过技术排查&#xff1a; 解决->无法访问 阿里云服务器的tcp端口 1 配置官网的安全组…

如何正确使用数据库的读写分离

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 背景 在应用系统发展的初期&#xff0c;我们并不知…

spring基于XML方式的组件管理

基本介绍 依赖注入是一种处理对象间依赖关系的技术。在Spring中&#xff0c;依赖注入有构造方法注入和设值注入两种方式。 设值注入是将依赖作为成员变量&#xff0c;通过主调类的setter方法注入依赖。构造方法注入则是在Bean的构造方法中注入依赖。 本次我们将通过具体例子来…

大白话讲清楚:什么是 Langchain 及其核心概念

在AI和机器学习领域&#xff0c;每天都有新技术和框架涌现。今天&#xff0c;我们来聊聊最近引起广泛关注的一个框架 —— Langchain。 https://python.langchain.com/docs/get_started/introduction 那么&#xff0c;Langchain到底是什么&#xff0c;它为什么这么受欢迎&#…

[NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< ​全文 6000 字 内容摘要 NAND Flash 引脚功能 读操作步骤 NAND Flash中的特殊硬件结构 NAND Flash 读写时的数据流向 Read 操作时序 读时序操作过…

测试SpringBoot的时候报错mapper未装载的解决方案:

1.报错信息和截图&#xff1a; org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name com.tang.testspringboot.TestSpringBootApplicationTests: Unsatisfied dependency expressed through field mapper: No qualifying bean o…

SAM:segment anything model——一个通用的图像分割基础模型

文章目录 一、Segment Anything Task二、SAM模型的架构&#xff08;一&#xff09;图像编码器image encoder&#xff08;二&#xff09;prompt encoder&#xff08;三&#xff09;mask decoder 三、SAM 模型的思想&#xff08;一&#xff09;Transformer的自注意力机制&#xf…

Oracle-数据库性能变慢问题分析

问题背景: 应用运维报障说最近两天业务数据入库和表查询都变得很慢&#xff0c;需要排查一下数据库的性能问题 问题分析&#xff1a; 登录到服务器上&#xff0c;通过TOP命令快速看了一下&#xff0c;服务器整体的CPU使用%usr不算特别高&#xff0c;但%wa IO等待很高&#xff…

数据库与SQL

数据库与SQL 学习链接数据库关系型数据库管理系统&#xff08;RDBMS&#xff09; SQLSQL介绍SQL类型SQL 基础语言学习创建表&#xff08;create table&#xff09;语法 数据类型SQL最常用的数据类型 学习链接 基础篇&#xff1a;数据库 SQL 入门教程 数据库 用于存储数据 存放…

centos下系统全局检测工具dstat使用

目录 一&#xff1a;没有需要安装 二&#xff1a;dstat命令参数 三、监测界面各参数含义&#xff08;部分&#xff09; 四、dstat的高级用法 一&#xff1a;没有需要安装 yum install dstat 二&#xff1a;dstat命令参数 有默认选项&#xff0c;执行dstat命令不加任何参数…

docker完成redis 三主三从

文章目录 关闭防火墙启动docker后台服务新建6个docker容器redis实例创建并运行docker容器实例 进入容器redis-node-1并为6台机器构建集群关系链接进入6381作为切入点&#xff0c;查看集群状态主从容错切换迁移案例容错切换迁移 主从扩容案例为主节点6387分配从节点6388主从缩容…

第二十八周:文献阅读笔记(弱监督学习)+ pytorch学习

第二十八周&#xff1a;文献阅读笔记&#xff08;弱监督学习&#xff09; 摘要Abstract1. 弱监督学习1.1. 文献摘要1.2. 引言1.3. 不完全监督1.3.1. 主动学习与半监督学习1.3.2. 通过人工干预1.3.3. 无需人工干预 1.4. 不确切的监督1.5. 不准确的监督1.6. 弱监督学习的创新点 2…

List集合遍历过程中修改元素(有坑)

说来惭愧&#xff0c;学 java 2年了&#xff0c;对 “Java是值传递” 这句话还没有理解它的精髓&#xff0c;以至于编程的时候出现了一些错误&#xff0c;这里记录一下。 一.问题再现 1.1将List集合中的每个字符串更改为其他值 1.2将List集合中的对象更改为其他对象 二.问题分…

Socket编程-IO模型

1、首先IO模型的内容。 感觉可以简单理解为&#xff1a;我们写代码时&#xff0c;在基础的 IO 操作上做了一些其他的策略&#xff0c;根据策略的不同&#xff0c;一般有阻塞IO和非阻塞IO 1、阻塞IO 就是在操作的时候&#xff0c;比如网络通信中&#xff0c;某一线程使用下面这…

【Web】CTFSHOW PHP特性刷题记录(全)

知其然知其所以然&#xff0c;尽量把每种特性都详细讲明白。 目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100 web101 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web…

【QML COOK】- 007-Item对象、信号和槽

信号&#xff08;signal&#xff09;和槽&#xff08;slot&#xff09;是Qt的独特的设计&#xff0c;自然在QML中也被支持。 Item是QML所有类型的基类&#xff0c;Item类型不会显示在窗口上&#xff0c;但是可以支持信号和槽。本节就用Item编写一个信号和槽的实例。 1. 创建Q…

【Spring 篇】走进SpringMVC的世界:舞动Web的激情

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇关于SpringMVC的博客&#xff0c;让我们一起探索这个舞动Web的框架&#xff0c;感受它带来的激情和便利。在这个世界里&#xff0c;我们将学到SpringMVC的概述、开发步骤以及如何快速入门&#xff0c;一切都是如此的令人兴奋…

数据分析实战丨基于flask+pygal可视化分析sqlite中的数据

文章目录 写在前面实验目标项目框架实验内容1.配置实验环境2.查看sqlite3数据库的数据3.创建项目文件4.编写代码5.运行项目 运行结果写在后面 写在前面 本期内容&#xff1a; 基于FlaskPygal可视化分析Sqlite3中的数据 实验环境&#xff1a; pythonpygalflask 项目下载地址…

Cocos 使用VsCode调试-跨域问题

解决方案&#xff1a; 在添加完debug配置后 在项目文件夹中打开vscode然后找到launch.json 这个runtimeArgs参数在原本的配置中是没有的,给他添加上去 "runtimeArgs": ["--disable-web-security" ] 原理: 禁用浏览器跨域检查&#xff08;仅用于调试&…