AutoSar 通信服务架构,CAN通信诊断详解

news2024/11/23 21:43:34

文章目录

      • Com(通信服务模块)
      • PDU的定义和结构
      • PDU的分类
      • IPDU Mux 模块
      • PDU R 模块(路由)
      • Bus TP 模块
      • BUS Interface
        • CanIf模块
        • LinIf模块
      • 发送数据示例(CAN报文)
      • 接收数据示例(CAN报文)
      • 通信过程中路由选择的细节
      • CAN诊断网络分层
      • CAN诊断通信过程
      • CAN TP 组帧和拆帧过程
        • 举个栗子

在这里插入图片描述

AUTOSAR(Automotive Open System Architecture)通信服务是为了简化车内ECU(电子控制单元)之间的通信而设计的。它基于多种汽车通信协议(如CAN、LIN、FlexRay等),并定义了一系列模块来组成通信协议栈。

  1. Com(通信服务模块)
  • 功能:管理和协调应用层之间的数据交换,处理信号的发送和接收。
  • 特点:支持周期性和事件驱动的通信,能够与多种底层协议(如 CAN、LIN、Ethernet)集成。
  1. PduR(PDU 路由器)
  • 功能:负责将 PDU(协议数据单元)从一个模块路由到另一个模块。
  • 特点:提供多路复用和选择功能,将输入 PDU 分配给适当的接收方,以优化数据流。
  1. CanIf(CAN 接口模块)
  • 功能:作为 CAN 网络的接口,管理 CAN 帧的发送和接收。
  • 特点:支持 CAN 设备的初始化、数据传输和错误处理,同时与其他通信模块协同工作。
  1. LinIf(LIN 接口模块)
  • 功能:提供与 LIN 网络的接口,处理 LIN 帧的发送和接收。
  • 特点:支持 LIN 网络的多种功能,包括主从模式的管理和错误检测。

最底层MCAL:提供了底层通信的驱动,比如CAN发送接收驱动,Lin发送接收驱动

Com(通信服务模块)

AUTOSAR中的通信服务模块(Com模块)是AUTOSAR架构中非常重要的一部分。它主要负责在不同速率的总线网络之间进行数据交换,并为汽车控制单元(ECU)应用软件提供统一的通信环境。

以下是Com模块的一些关键功能和特点:

  1. 功能
  • 数据交换:支持不同模块之间的数据交换,包括传感器数据、控制命令等。
  • 信号处理:管理信号的发送和接收,包括信号的格式转换和处理。
  • 信号调度:根据系统需求调度信号的发送,优化数据传输的时间和频率。
  1. 通信模式
  • 发送和接收:支持周期性和事件驱动的通信模式,允许模块根据需要发送和接收数据。
  • 数据变化通知:当信号值发生变化时,Com 模块可以通知相关的接收方,以实现即时更新。
  1. 支持的协议
  • 多协议支持:Com 模块可以与多种底层通信协议集成,例如 CAN、LIN、FlexRay 和 Ethernet。
  • 多路复用和选择:支持输入 PDU 多路复用(IPDU Mux),可以选择合适的信号源进行数据处理。
  1. 配置和可扩展性
  • 可配置性:Com 模块的行为和参数在 AUTOSAR 系统描述文件(.arxml 文件)中配置,支持灵活的信号和通信管理。
  • 模块化设计:通过模块化设计,可以根据具体应用需求进行定制和扩展。
  1. 错误处理
  • 错误检测和管理:Com 模块可以检测通信错误,并提供相应的错误管理策略,以确保系统的可靠性。
  1. 接口
  • 标准化接口:Com 模块提供标准化的接口,以便于与其他 AUTOSAR 模块(如 PduR、CanIf 等)进行交互和集成。

在AUTOSAR架构中,协议数据单元(Protocol Data Unit,PDU)是用于在不同层级之间传递数据的基本单位。PDU在AUTOSAR通信模型中负责封装和传递应用层数据,使得不同的模块和设备能够互相交换信息。

通信栈完整流程:

在这里插入图片描述

PDU的定义和结构

  • 定义:PDU是在通信网络中传输的数据单元,包含了消息的有效载荷以及额外的控制信息¹²。
  • 结构:PDU通常由两个主要部分组成:头部(Header)和有效载荷(Payload)。头部用于描述PDU的属性和参数,而有效载荷则携带了实际的数据内容²。

PDU的分类

根据功能和通信模式的不同,PDU可以分为以下几种类型:

  1. L-PDU(Link Layer PDU)

    • 数据链路层PDU:用于数据链路层的通信,包含ID、数据长度和数据¹。
  2. N-PDU(Network Layer PDU)

    • 网络层PDU:在网络层传输,包含网络层地址信息(N_AI)和协议控制信息(N_PCI),如单帧、首帧、连续帧和流控帧¹²。
  3. I-PDU(Interaction Layer PDU)

    • 交互层PDU:用于不同进程之间的数据传输,可以是周期性的或事件触发的²。

IPDU Mux 模块

在 AUTOSAR 中,IPDU Mux(Input Protocol Data Unit Multiplexer)模块用于管理和路由多种输入 PDU(协议数据单元)的接收和传输。它的主要作用是处理不同的信号和数据流,尤其是在具有多个信号源或多种数据格式的情况下

  1. 功能
  • 信号选择:根据特定条件或标志,从多个输入 PDU 中选择一个进行处理。这个条件可以是消息的 ID、数据内容或其他控制信号。
  • 路由管理:将接收到的输入 PDU 路由到相应的接收模块或应用层,以便进行进一步处理。
  1. 数据转换
  • 数据格式转换:IPDU Mux 模块可以处理不同数据格式的输入 PDU,并将其转换为统一格式,以便于上层模块处理。
  1. 多路复用
  • 资源优化:通过多路复用输入 PDU,可以有效利用网络带宽和资源,减少数据传输的冗余。
  1. 配置
  • 可配置性:IPDU Mux 模块的配置通常在 AUTOSAR 系统描述文件(如 .arxml 文件)中定义,支持灵活的信号处理和路由策略。
  1. 应用场景
  • 多种信号源:在车辆电子系统中,可能有多个传感器或控制单元发送相似或相关的数据。IPDU Mux 模块可以根据需要选择合适的信号进行处理。

PDU R 模块(路由)

PDU Router(PduR)模块是AUTOSAR架构中的关键组件,负责在不同通信网络之间传输和处理数据。它确保数据能够准确、高效地到达目的地。以下是PduR模块的一些主要功能和特点:

  • 数据路由:
    • 上层到下层:PduR模块将来自上层模块(如COM、DCM)的I-PDU传输到下层通信接口模块(如CanIf、LinIf)。
    • 下层到上层:它也将来自下层模块的I-PDU传递到上层模块。
  • 网关功能:
    • PduR模块可以作为网关,将I-PDU从一个通信接口模块传输到另一个通信接口模块。
  • 静态路由配置:
    • I-PDU的路由是基于静态定义的I-PDU标识符执行的,路由路径在预编译阶段配置。
  • 多播和单播:
    • PduR支持I-PDU的单播(1:1)和多播(1:n)传输。
  • 模块解耦:
    • 通过PduR模块,上下层模块之间实现了解耦,增强了系统的灵活性和可维护性。
      PduR模块在汽车通信架构中起到了桥梁作用,确保了不同模块之间的有效通信。

Bus TP 模块

在AUTOSAR架构中,Bus Transport Protocol(Bus TP)模块主要负责在不同通信总线(如CAN、LIN、FlexRay等)上传输大于单帧容量的数据。以下是Bus TP模块的一些关键功能和特点:

  1. 多帧传输
    • 分段传输:当数据长度超过单帧容量时,Bus TP模块将数据分段为多个帧进行传输
    • 重组数据:接收端的Bus TP模块负责将分段的帧重新组装成完整的数据包
  2. 流控制
    • 流控帧:Bus TP模块使用流控帧(Flow Control Frame)来管理数据传输的流量,确保发送端不会超出接收端的处理能力
  3. 错误检测和恢复
    • 错误检测:Bus TP模块能够检测传输过程中的错误,如帧丢失或顺序错误
    • 错误恢复:在检测到错误时,Bus TP模块会触发重传机制,以确保数据的完整性
  4. 协议支持
    • ISO 15765-2:Bus TP模块通常基于ISO 15765-2标准,用于CAN总线的诊断通信
    • 其他协议:也支持其他通信协议,如LIN和FlexRay
  5. 与其他模块的交互
    • PduR模块:Bus TP模块与PduR模块协作,确保数据能够正确路由到目标模块
    • CanIf、LinIf等接口模块:Bus TP模块通过这些接口模块与物理总线进行通信

通过这些功能,Bus TP模块在确保大数据量可靠传输方面发挥了重要作用。

BUS Interface

是的,在AUTOSAR架构中,BUS Interface主要包括CAN Interface(CanIf)和LIN Interface(LinIf)模块。以下是这两个模块的详细介绍:

CanIf模块
  1. 位置和作用
    • CanIf模块位于底层CAN驱动(CanDrv)、CAN收发器(CanTrcv)和上层通信服务层(如PduR、CanNm、CanTp)之间
    • 它提供了一个硬件独立的接口,用于管理不同的CAN硬件,如CAN控制器和CAN收发器
  2. 主要功能
    • 数据发送和接收:CanIf模块负责将上层模块的I-PDU传输到CAN总线,并接收来自CAN总线的I-PDU
    • 控制器模式管理:CanIf模块可以控制CAN控制器的启动、停止和模式切换
    • 错误处理和通知:CanIf模块能够处理CAN总线上的错误,并向上层模块发送错误通知
LinIf模块
  1. 位置和作用
    • LinIf模块作为硬件抽象接口层,屏蔽了下层LIN驱动的具体实现
    • 它位于LIN驱动(LinDrv)和上层通信服务层(如PduR、LinTp)之间
  2. 主要功能
    • 数据传输:LinIf模块负责将上层模块的I-PDU传输到LIN总线,并接收来自LIN总线的I-PDU
    • 诊断和唤醒:LinIf模块支持LIN总线的诊断功能和休眠唤醒机制
    • 错误处理:LinIf模块能够检测和处理LIN总线上的错误,并向上层模块发送错误通知

发送数据示例(CAN报文)

在 AUTOSAR 通信服务中,发送 CAN 报文的具体流程可以概括为以下几个步骤:

  1. 准备数据
  • 应用层准备数据:应用层或上层模块准备要发送的数据,并调用相应的接口进行发送。
  • 填充 PDU:将数据填充到 PDU 中,包括必要的控制信息和数据有效载荷。
  1. 调用 PDU Router (PduR)
  • 发送请求:应用层通过 PduR 调用发送接口(如 PduR_Send()),请求发送数据。
  • 路由选择:PduR 确定数据的目标(例如,CAN 或 LIN),并决定相应的传输协议(如 CanTp)。
  1. 调用 CanTp(如果需要)
  • 分段处理:如果数据超过 CAN 帧的最大长度,PduR 将数据传递给 CanTp 进行分段处理。
  • 发送分段 PDU:CanTp 将数据分段并发送每个数据块,控制每个块的传输状态和确认。
  1. 通过 CanIf 模块
  • 调用 CanIf:PduR 或 CanTp 完成分段后,将每个数据段传递给 CanIf 模块。
  • CAN 帧封装:CanIf 封装数据到 CAN 帧中,包括消息 ID 和其他控制信息。
  1. 通过 CAN 驱动发送
  • 调用 CAN 驱动:CanIf 调用底层 CAN 驱动接口(如 CanIf_Transmit()),将封装好的 CAN 帧发送到硬件。
  • 硬件发送:底层驱动将 CAN 帧发送到 CAN 总线。
  1. 确认与反馈
  • 接收确认:接收端的 CAN 控制器收到 CAN 帧后,发送确认信号,表明成功接收。
  • 处理反馈:发送端的 CAN 驱动接收到确认后,通知 CanIf 模块,更新传输状态,并可以选择进行后续的处理(如发送下一个数据段)。
  1. 完成
  • 通知应用层:一旦所有数据成功发送和确认,PduR 或相应的模块将返回结果给应用层,表明发送完成。

接收数据示例(CAN报文)

在 AUTOSAR 通信服务中,接收 CAN 报文的具体流程可以分为以下几个步骤:

  1. CAN 硬件接收
  • 接收数据:CAN 控制器监测 CAN 总线,接收到一个完整的 CAN 帧。
  • 存储数据:接收到的 CAN 帧数据被存储在硬件缓冲区中,等待处理。
  1. 调用 CAN 驱动
  • 通知 CanIf:CAN 控制器通过中断或轮询方式通知 CAN 驱动(如 CanIf 模块)有新数据可用。
  • 提取数据:CAN 驱动从硬件缓冲区提取接收到的 CAN 帧,并准备将其传递给上层模块。
  1. 通过 CanIf 处理
  • 转发报文:CanIf 将接收到的 CAN 帧转发给 PduR 模块。
  • 解封装 PDU:CanIf 解封装 CAN 帧,提取出有效载荷和其他控制信息。
  1. 调用 PDU Router (PduR)
  • 路由选择:PduR 根据目标 PDU ID 和配置,确定数据的目的地,并将数据转发给相应的接收模块(如 CanTp 或应用层)。
  • 分段处理:如果数据是通过 CanTp 进行的分段传输,PduR 会将数据传递给 CanTp 进行重组。
  1. 通过 CanTp(如果适用)
  • 重组数据:CanTp 将接收到的分段数据进行重组,确保完整性。
  • 发送到上层:完成重组后,CanTp 将完整的数据传递给 PduR。
  1. 通知应用层
  • 调用应用接口:PduR 将最终的数据传递给应用层或上层模块,调用相应的接口(如 PduR_Receive())。
  • 处理数据:应用层处理接收到的数据,执行相应的业务逻辑。
  1. 确认与反馈
  • 发送确认:根据需要,应用层可以发送确认信息或反馈,确保数据已被成功处理。

通信过程中路由选择的细节

在 AUTOSAR 通信过程中,路由选择主要通过 PDU Router (PduR) 模块进行,具体步骤如下:

  1. PDU 定义
  • 每个 PDU 在配置文件中定义,包括其 ID、数据长度和目标模块等信息。
  1. 接收报文
  • 当接收到 CAN 报文时,CanIf 模块将其转发给 PduR。
  1. 查找路由表
  • PduR 内部维护一个路由表,记录每个 PDU ID 和其对应的目标模块。
  • PduR 使用接收到的 PDU ID 在路由表中查找,确定数据的接收目标。
  1. 转发数据
  • 根据路由表中的配置,PduR 将数据转发给相应的接收模块(如应用层、CanTp 或其他通信模块)。
  • 如果需要,PduR 还会处理数据的转换(例如,格式转换或数据分段)。
  1. 处理确认
  • PduR 可能还会根据配置向发送方或其他模块发送确认信息,确保数据传输的可靠性。

CAN诊断网络分层

CAN 诊断的网络分层通常遵循 OSI 模型的分层结构,具体包括以下几个层次:

  1. 物理层
  • 功能:负责数据的物理传输,包括电气信号的发送和接收。
  • 实现:定义电缆类型、连接器和电气特性,确保信号在 CAN 总线上的稳定传输。
  1. 数据链路层
  • 功能:负责帧的组装、传输和错误检测。
  • 实现:使用 CAN 协议,定义帧格式、优先级、仲裁和错误处理机制。
  1. 网络层
  • 功能:处理数据包的路由和传输,但在 CAN 网络中通常不明显。
  • 实现:一般通过诊断会话管理和数据传输来实现,例如,UDS(统一诊断服务)通过网络层协议传输诊断消息。
  1. 传输层
  • 功能:提供可靠的数据传输,确保数据的完整性和顺序。
  • 实现:在诊断中,CAN 诊断服务(如 UDS)可以通过分段和重组功能来实现大数据块的传输。其中CAN Tp模块便是这个起作用。
  • CanTp 处理以下内容:
    • 数据分段:将较大的 PDU 分割成多个小的 CAN 帧进行传输。
    • 数据重组:在接收端将分段的 CAN 帧重新组合为完整的数据块。
    • 可靠性控制:实现数据传输的确认机制,确保数据的可靠接收。
  1. 会话层
  • 功能:管理和控制会话的建立、维护和结束。
  • 实现:通过会话管理服务(如启动会话、停止会话)来控制诊断服务的状态。
  1. 表示层
  • 功能:负责数据格式化和转换,确保不同系统之间的数据能够理解。
  • 实现:在诊断服务中,数据的编码和解码通常在此层进行。
  1. 应用层
  • 功能:提供最终用户的接口,定义具体的诊断服务。
  • 实现:实现具体的诊断功能,如故障代码读取、数据流监控、程序下载等。

在 AUTOSAR 中,通信报文和诊断报文的处理有所不同:

  1. 诊断报文
  • 经过 CanTp:诊断报文(如 UDS 报文)通常会经过 CAN Transport Protocol (CanTp) 模块。由于诊断报文可能需要传输较大的数据块,CanTp 的分段和重组功能确保能够在 CAN 网络中可靠地传输这些数据。
  1. 通信报文
  • 通常不经过 CanTp:常规的通信报文(例如,传感器数据、控制命令等)通常不需要分段,因此可以直接通过 CAN 控制器发送。通信报文的大小一般在 CAN 帧的限制范围内,不需要 CanTp 的处理。
  • 例外情况:如果某些通信报文的数据量较大并需要分段,那么它们也可能经过 CanTp。

CAN诊断通信过程

在这里插入图片描述

在 AUTOSAR 和 CAN 诊断中,诊断请求帧应答帧是用于实现诊断服务的基本消息类型。

发送方(通常是诊断工具或测试设备)向 ECU(电子控制单元)发送的请求消息。

请求特定的诊断服务或数据,例如读取故障码、执行诊断测试或请求实时数据流。

内容:

  • 服务标识符 (Service ID):指示请求的具体服务类型。
  • 数据字段:包含服务所需的参数和数据。

接收方(ECU)对诊断请求帧的回应消息。

提供请求中所要求的数据或服务的结果,例如返回读取到的故障码或执行结果。

内容:

  • 服务标识符 (Service ID):与请求帧中的服务 ID 一致,表示这是对特定请求的回应。
  • 数据字段:包含请求的结果、错误码或状态信息。

通过这两种帧,诊断工具与 ECU 之间能够实现有效的双向通信,从而获取故障信息和进行各种诊断服务。

CAN TP 组帧和拆帧过程

CAN诊断由发送端的请求和接收端的响应构成,诊断即为发送端与接收端数数据往来。有的诊断一条信息完成, 有的诊断信息需要多条信息完成。毕竟在诊断中,一条CAN消息只包含八个字节,对于一条CAN诊断信息的分段发送问题,就是网络层需要讨论的内容。

在 CANTP层,传输报文主要分为以下几类:

  1. 单帧报文 (Single Frame)
  • 定义:用于传输较小的数据,整个数据在一个帧中发送。
  • 特点:适用于数据长度在 CAN 帧大小限制内的情况,简单快速。
  1. 第一帧 (First Frame)
  • 定义:用于开始传输较大数据块的第一部分。
  • 特点:包含数据的长度信息和序列号,指示接下来会有多帧数据传输。
  1. 数据帧 (Data Frame)
  • 定义:紧随第一帧后传输的数据部分。
  • 特点:用于传输第一帧所指定的数据块的剩余部分,多个数据帧可以连续发送。
  1. 最后一帧 (Flow Control Frame)
  • 定义:用于接收方控制数据流,告知发送方可以继续发送的状态。
  • 特点:用于流量控制,指示发送方是否需要暂停或继续发送数据。

在这里插入图片描述

在 PCI(Protocol Control Information)中,包含 PDU 单元类型和消息字节长度,这两个字段对于 CAN Transport Protocol (CanTp) 的数据传输至关重要。具体理解如下:

  1. PDU 单元类型
  • 定义:PDU 单元类型指示当前传输的消息的类型,通常包括不同的报文类型,如单帧报文、第一帧、数据帧或流控制帧。
  • 功能:通过这一字段,接收方可以确定如何处理接收到的消息。例如:
    • 如果是单帧报文,接收方直接读取数据。
    • 如果是第一帧,接收方将准备接收后续的数据帧。
  1. 消息字节长度
  • 定义:消息字节长度字段指示当前 PDU 中数据的有效字节数。
  • 功能:接收方使用这一字段来了解需要处理的数据量。这对于后续的帧解析和数据重组非常重要,尤其是在处理多帧传输时,接收方需要根据字节长度来确保数据的完整性。
举个栗子

假设我们需要传输一个数据块,总长度为 150 字节。由于 CAN 帧的最大有效负载为 8 字节,CanTp 需要将这个数据块分成多帧进行传输。

数据块:0x01, 0x02, 0x03, ..., 0x96  // 共 150 字节

1.首先发送第一帧:

内容

  • PDU 单元类型:第一帧
  • 数据长度:150 字节(0x96)
  • 数据部分:0x01, 0x02, 0x03, …, 0x08 // 包含前 8 字节的数据
[PDU Type: First Frame | Length: 150 | Data: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]

2.发送后续数据帧

CanTp 会发送多个数据帧。每个数据帧将包含 8 字节数据。

数据帧 1(第二帧):

[PDU Type: Data Frame | Data: 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10]

数据帧 2(第三帧):

[PDU Type: Data Frame | Data: 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18]

数据帧 18(最后一帧):

[PDU Type: Data Frame | Data: 0x96]

3.发送流控制帧(可选)

在数据传输过程中,接收方可以发送流控制帧以控制数据流。例如,如果接收方需要处理时间,可以发送“暂停”指令。

4.重组数据

接收方在收到所有相关的数据帧后,会将它们重组为完整的数据块:

重组的数据块:0x01, 0x02, 0x03, ..., 0x96

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

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

相关文章

监控告警功能详细介绍及操作演示:运维团队的智能保障

在当今这个信息化高速发展的时代,运维团队面临着前所未有的挑战。为了确保系统的稳定性和高效运维,监控告警功能成为了运维团队不可或缺的得力助手。本文将详细介绍我们的监控告警功能,并结合实际操作页面进行演示,帮助运维团队更…

Docker入门指南:快速学习Docker的基本操作

为什么需要Docker 有时我们在本地开发好程序并成功运行之后,却在服务器上运行不起来,通过观察日志通常会发现,哦原来是这个库没安装,于是我们就需要先安装需要用到的库,然后再启动服务你可能还会发现用到的数据库信息…

《Linux从小白到高手》理论篇(六):Linux软件安装一篇通

List item 本篇介绍Linux软件安装相关的操作命令,看完本文,有关Linux软件安装相关操作的常用命令你就掌握了99%了。 Linux软件安装 RPM RPM软件的安装、删除、更新只有root权限才能使用;查询功能任何用户都可以操作;如果普通用…

真正的Open AI ——LLaMA颠覆开源大模型

1. LLaMA 简介 LLaMA(Large Language Model Meta AI)是由Meta(原Facebook)推出的一个大型语言模型系列,旨在通过更小的模型规模和更少的计算资源,实现与其他主流语言模型(如GPT)相媲…

spring简短注入

新建bean 创建set方法 jpackage com.dependency.spring6.bean;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class User {private static final Logger LOGGER LoggerFactory.getLogger(User.class);private String username;private String password;pr…

RPA跨流程复用元素技巧|实在RPA研究

为什么要跨流程复用元素 在 RPA 操作中,元素至关重要,因为自动化的本质就是模拟人类对元素的操作。基本上,每个流程都会包含若干个元素。对于同时维护多个流程的用户而言,相似的流程包,甚至是同一个元素。例如电商用户…

Solidworks斜接法兰快速绘制钣金箱体

Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 0.5mm间距为钣金焊接的预留焊缝。

Linux云计算 |【第四阶段】RDBMS1-DAY6

主要内容: MySQL索引(索引分类、创建索引)、用户及授权(创建用户并授权、查看授权、撤销授权、授权库mysql)、root密码恢复、备份、使用mysqldump进行逻辑备份、Percona 一、MySQL索引 1、基本概念 MySQL 索引(Inde…

给虚拟机安装操作系统以及无密码SSH登录

安装完虚拟化软件VMware Workstation Pro 17之后,我们下载了Ubuntu光盘映像文件,上次说演示desktop版的安装,但是考虑到后面要部署数据库,所以为了方便起见还是下载sever服务器版。 文件还挺大,在等待下载完成这会我们…

基于SpringBoot的休闲娱乐代理售票系统设计与实现

1.1研究背景 21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发休闲娱乐代理售票…

C++那些事之内存优化

C那些事之内存优化 通常程序运行时内存是一个比较大的问题,如何减少内存占用和提升访问速度是至关重要。为了解决这些问题,C20 引入了 no_unique_address 特性,并结合空基类优化(EBO, Empty Base Optimization)&#x…

33 指针与数组:数组名与指针的关系、使用指针遍历数组、数组指针、指针数组、字符指针

目录​​​​​​​ 1 数组名与指针的关系 1.1 数组名 1.2 对数组名取地址 1.3 数组名与指针的区别 1.3.1 类型不同 1.3.2 sizeof 操作符的行为不同 1.3.3 & 操作符的行为不同 1.3.4 自增自减运算的行为不同 1.3.5 可变性不同 2 使用指针遍历数组 2.1 使用 *(nu…

智能网联汽车飞速发展,安全危机竟如影随形,如何破局?

随着人工智能、5G通信、大数据等技术的飞速发展,智能网联汽车正在成为全球汽车行业的焦点。特别是我国智能网联汽车市场规模近年来呈现快速增长态势,彰显了行业蓬勃发展的活力与潜力。然而,车联网技术的广泛应用也带来了一系列网络安全问题&a…

Mybatis知识

1. 基础知识 mybatis是基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动,创建连接,创建statement等繁杂的过程。 通过xml或者注解的方式将要执行的各种sta…

序列化方式五——ProtoStuff

介绍 Protostuff是一个基于Java的高效序列化库,它使用Protocol Buffers(简称protobuf)协议,为Java对象提供高效、灵活且易用的序列化和反序列化方法。Protostuff的主要优势在于其高性能和简单的使用方式,相对于其他序…

C#多线程数据同步的几种方式(不同的锁)

无锁 多个关联数据无法完整获取修改 internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");ThreadPool.QueueUserWorkItem(Thread1);ThreadPool.QueueUserWorkItem(Thread2);ThreadPool.QueueUserWorkItem(Thread3);Console…

SpringBoot框架在墙绘产品展示中的运用

4 系统设计 墙绘产品展示交易平台的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没…

linux查看进程所在的目录

在Linux系统中,查看一个进程所在的目录(即该进程的可执行文件所在的目录)可以通过多种方式实现。 以下是查找进程的可执行文件路径的方法: 使用ls -l /proc/[pid]/cwd 你可以通过查看/proc/[pid]/cwd的符号链接来找到进程的可执…

UE5蓝图实战:动态墙上挖坑与自定义坑尺寸

在Unreal Engine 5.3中,我利用蓝图系统开发了一个创新的挖坑Demo,该Demo展示了如何在实时环境中动态地在墙体上挖坑,并允许用户自定义坑的大小。这一过程得益于UE5官方提供的Geometry Script插件,该插件通过蓝图接口实现了强大的网…

sql-labs:42~65

less42(单引号闭合、报错回显) login_useradmin login_password123 and if(11,sleep(2),1) # # 单引号闭合 ​ login_useradmin login_password123and updatexml(1,concat(0x7e,database(),0x7e),1)# # 报错回显…