PCIE协议-2-事务层规范

1.事务层概述

从高层次上看,事务层的关键方面包括:

  • 一个流水线化的全分割事务协议
  • 用于区分事务层数据包(TLPs)的排序和处理要求的机制
  • 基于信用量的流控制
  • 可选支持数据中毒和端到端数据完整性检测

事务层包含以下内容:

  • TLP的构建和处理
  • 与设备资源关联的事务级机制,包括:
    • 流量控制
    • 虚拟通道管理
  • 用于排序和管理TLPs的规则

  1. 兼容PCI/PCIX的排序
  2. 包括流量类别区分

1.1 地址空间、事务类型和用途

事务构成了请求者和完成者之间信息传输的基础。定义了四种地址空间,并定义了不同的事务类型,每种都有其独特的目标用途,如表2-1所示。

地址空间事务类型基本用途
内存读取从内存映射位置读取数据
写入写入数据到内存映射位置
I/O读取从I/O映射位置读取数据
写入写入数据到I/O映射位置
配置读取设备功能配置/设置
写入
消息baseline(包括供应商定义的)从事件信号机制到通用消息传递

1.1.1 内存事务

内存事务包括以下类型:

  • 读请求/完成
  • 写请求
  • 原子操作请求/完成

内存事务使用两种不同的地址格式:

  • 短地址格式:32位地址
  • 长地址格式:64位地址

某些内存事务可以选择性地有一个包含进程地址空间ID(PASID)的PASID TLP前缀。 

1.1.2 I/O事务

PCI Express支持I/O空间,以兼容需要使用它们的旧设备。本规范的未来修订可能会弃用I/O空间的使用。I/O事务包括以下类型:

  • 读请求/完成
  • 写请求/完成

I/O 事务使用单一地址格式:

  • 短地址格式:32位地址

1.1.3 配置事务

配置事务用于访问设备内功能的配置寄存器。

配置事务包括以下类型:

  • 读请求/完成
  • 写请求/完成

1.1.4 消息事务

消息事务,或简称消息,用于支持设备之间的带内事件通信

除了本文档中定义的特定消息,PCI Express 还提供支持使用指定消息代码的供应商定义消息。 除了使用 PCI-SIG* 供应商 ID(0001h)的供应商定义消息外,特定供应商定义消息的定义不在本文档的范围之内。

本规范建立了一个标准框架,供应商可以在该框架内指定自己的供应商定义消息,以适应其平台的特定要求。 请注意,这些供应商定义的消息不能保证与来自不同供应商的组件互操作。

1.2 数据包格式概述

事务由请求和完成组成,它们使用数据包进行通信。图 2-2 显示了一个 TLP 的高级序列化视图,由一个或多个可选的 TLP 前缀、一个 TLP 头标、一些数据包类型的数据有效载荷,以及一个可选的 TLP digest(ECRC)组成。图 2-3 显示了 TLP 的更详细视图。本章的以下各节定义了数据包头标和ECRC的详细结构。

PCI Express 概念上将信息传输为字节的串行流,如图 2-2 所示。请注意,在字节级别,信息是以 TLP 的最左边的字节在互连上进行传输/接收的。图 2-2 中的字节首先被传输/接收(如果是一个字节或者多个可选的 TLP 前缀存在,则是字节 0;否则是字节 H)。

TLP 前缀、TLP 头标和 TLP digest的详细布局(在图 2-3 中以通用形式呈现)是按照字节编号较低的在左边而不是在右边绘制的,这与传统上在其他 PCI 规范中所描述的相反。头部布局针对串行互连的性能进行了优化,这是由于需要首先传输最关键的信息。例如,在 TLP 头标中,地址字段的最重要字节首先被传输,以便它可以用于早期地址解码。

TLP 中最低地址字节的有效载荷数据(图 2-3 中的字节 J)显示在左上角。 详细布局显示数据结构组织保留了传统的 PCI 字节布局,其中最低地址字节显示在右侧。无论表示方式如何,所有字节都概念上按字节号递增的顺序在链路上传输。

根据数据包的类型,该数据包的头标将包含以下一些字段:

  • 数据包的格式
  • 数据包的类型
  • 任何相关数据的长度
  • 事务描述符,包括:
    • 事务 ID
    • 属性
    • TC
  • 地址/路由信息
  • 字节使能
  • 消息解码
  • 完成状态

2. 事务层协议 - 数据包定义

PCI Express 使用基于数据包的协议在通过链路通信的两个组件的事务层之间交换信息。PCI Express 支持以下基本事务类型:内存、I/O、配置和消息。内存请求支持两种寻址格式:32位和64位。

事务通过请求和完成来承载。仅在需要时使用完成,例如,返回读取数据,或确认 I/O 和配置写事务的完成。完成与它们对应的请求通过数据包头标中的事务 ID 字段的值关联。

所有标为保留的 TLP 字段(有时缩写为 R)在形成 TLP 时必须用全 0 填充接收方必须忽略这些字段中的值,并且Switch必须不修改地转发它们。注意,对于某些字段,有指定的和保留的值 - 这些情况下保留值的处理方式对每种情况都单独指定。

2.1 通用数据包头标字段

所有 TLP 前缀和头标包含以下字段(见图 2-4):

  • Fmt[2:0] - TLP 格式(见表 2-2)- 字节 0 的位 7:5
  • Type[4:0] - TLP 类型 - 字节 0 的位 4:0

Fmt 字段指示存在一个或多个 TLP 前缀,Type 字段指示相关的 TLP 前缀类型。

TLP 头标的 Fmt 和 Type 字段提供了确定 TLP 头标剩余部分大小所需的信息,以及数据包是否包含跟在头标后面的数据有效载荷。

TLP 头标的 Fmt、Type、TD(事务描述符)和长度字段包含确定 TLP 非前缀部分总大小所需的所有信息。Type 字段除了定义 TLP 的类型外,还决定了Switch如何路由 TLP。不同类型的 TLP 在以下各节中更详细地讨论。

  • 允许的 Fmt[2:0] 和 Type[4:0] 字段值显示在下节中。
  1. 所有其他编码都是保留的。
  • TC[2:0] - 流量类别 - byte1 的bit [6:4] 
  • 轻量级通知 (Lightweight Notification   LN) - 1 位表示内存请求是 LN 读取或 LN 写入,或者完成是 LN 完成。
  • TLP 提示 (TLP Hints  TH) - 1 位表示在 TLP 头标存在 TLP 处理提示 (TPH) 以及可选的 TPH TLP 前缀(如果存在)- byte1 bit 0。
  • Attr[1:0] - 属性 - byte2  bit [5:4]。
  • Attr[2] - 属性 - byte1 bit 2。
  • TD - 1 位表示在 TLP 结尾处以单个双字 (DW) 的形式存在 TLP ECRC - byte2 bit 7。
  • 错误中毒 (EP) - 表示 TLP 中毒- byte2 的bit 6。
  • Length[9:0] - 数据有效载荷长度,以双字 (DW) 为单位- byte2 的bit [1:0] 与byte3 的bit [7:0]连接。
  1. TLP 数据必须以 4 字节自然对齐,并以 4 字节 DW 的增量进行。
  2. 保留给不包含或不引用数据有效载荷的 TLP,包括完成 (Cpl)、完成锁定 (CplLk) 和消息(除非另有规定)。

2.2 带数据载荷的 TLP - 规则

  • 长度以双字 (DW) 的整数倍指定。
  • 除了明确引用数据长度的消息外,所有消息的 Length[9:0] 都是保留的
  • 带有数据载荷的 TLP 的发送器不得允许 TLP 的长度字段给出的数据有效载荷长度超过发送器的设备控制寄存器中 Max_Payload_Size 字段指定的长度,该长度以 DW 的整数倍表示。
  1. 对于 ARI 设备,Max Payload_Size 仅由功能 0 中的设置确定。其他功能中的 Max_Payload_Size 设置将被忽略。
  2. 对于与所有功能中 Max Payload_Size 设置相同的非 ARI 多功能设备 (MFD) 相关联的上游端口,传输的 TLP 的数据有效载荷不得超过共同的 Max_ Payload_Size 设置。
  3. 对于与所有功能中 Max_Payload_Size 设置不相同的非 ARI MFD 相关联的上游端口,传输的 TLP 的数据有效载荷不得超过 Max_ Payload_Size 设置,其确定是特定实现的。

               (1) 鼓励发送器实现使用生成事务的功能中的 Max_Payload_Size 设置,或者使用所有功能中最小的 Max_Payload_Size 设置。

                (2)软件不应在不同的功能中将 Max_Payload_Size 设置为不同的值,除非软件了解特定的实现。

        4. 注意:Max_Payload_Size 仅适用于带有数据载荷的 TLP;内存读取请求的长度不受 Max_ Payload_Size 限制。内存读取请求的大小由长度字段控制

  • 接收到的 TLP 的数据载荷大小,由 TLP 的长度字段给出,不得超过接收器的设备控制寄存器中 Max_ Payload_Size 字段指定的长度,该长度以 DW 的整数倍表示。
  1. 接收器必须检查此规则的违规情况。如果接收器确定 TLP 违反此规则,则该 TLP 是一个畸形 TLP。
    • 这是一个与接收端口相关联的报告错误。
  2. 对于 ARI 设备,Max_Payload_Size 仅由功能 0 中的设置确定。其他功能中的 Max Payload_ Size 设置将被忽略。
  3. 对于与所有功能中 Max_Payload_Size 设置相同的非 ARI MFD 相关联的上游端口,接收器需要检查 TLP 的数据有效载荷大小与共同的 Max_Payload_Size 设置。

  • 对于与所有功能中 Max_Payload_Size 设置不相同的非 ARI 多功能设备 (MFD) 相关联的上游端口,接收器需要检查 TLP 的数据有效载荷是否符合特定于实现的 Max_Payload_Size 设置。
  1. 鼓励接收器实现使用目标功能中的 Max_Payload_Size 设置,或者使用所有功能中最大的 Max_Payload_Size 设置。
  2. 软件不应在不同功能中将 Max_Payload_Size 设置为不同的值,除非软件了解特定的实现。
  • 对于包含数据的 TLP,长度字段中的值和 TLP 中包含的实际数据量必须匹配。
  1. 接收器必须检查此规则的违规情况。如果接收器确定 TLP 违反此规则,则该 TLP 是一个畸形 TLP。
    • 这是与接收端口相关联的报告错误。
  • 长度字段中的值仅适用于数据 - 不包括 TLP ECRC。
  • 当与字节地址关联的数据有效载荷包含在除原子操作请求或原子操作完成之外的 TLP 中时,标头后的第一个字节对应于最接近零的字节地址,后续字节按字节地址递增的顺序排列。
    • 例如:对于写入位置 0x100 的 16 字节数据,标头后的第一个字节将写入位置 0x100,第二个字节将写入位置 0x101,依此类推,最后一个字节写入位置 0x10F。
  • 原子操作请求和原子操作完成中的数据有效载荷必须格式化,以使标头后的第一个字节是第一个数据值的最低有效字节,后续字节的数据重要性严格递增。对于比较和交换 (Compare And Swap CAS) 请求,第二个数据值紧跟在第一个数据值之后,并且必须使用相同的格式。
  1. 原子操作完成器用于在目标位置读取和写入数据的字节序格式是特定于实现的,并且允许完成器确定适合目标内存的任何格式(例如,小端序,大端序等)。原子操作完成器的字节序格式能力报告和控制不在本规范范围内。
  2. 小端序示例:对于目标内存为小端序格式、目标位置为 0x100、大小为 64 位(8 字节)的交换请求,标头后的第一个字节写入位置 0x100,第二个字节写入位置 0x101,依此类推,最后一个字节写入位置 0x107。注意,在执行写入之前,完成器首先读取目标内存位置,以便它可以在完成时返回原始值。完成中数据的字节地址对应关系与请求中相同。
  3. 大端序示例:对于目标内存为大端序格式、目标位置为 0x100、大小为 64 位(8 字节)的交换请求,标头后的第一个字节写入位置 0x107,第二个字节写入位置 0x106,依此类推,最后一个字节写入位置 0x100。注意,在执行写入之前,完成器首先读取目标内存位置,以便它可以在完成时返回原始值。完成中数据的字节地址对应关系与请求中相同。
  4. 图 2-6 显示了 64 位(8 字节)FetchAdd操作的完成器目标内存访问的小端序和大端序示例。操作数和结果中的字节编号为 0-7,其中字节 0 是最低有效字节,字节 7 是最高有效字节。在每种情况下,完成器使用适当的字节序格式获取目标内存操作数。接下来,完成器中的原子操作计算逻辑使用原始目标内存值和 FetchAdd 请求中的“加*”值执行 FetchAdd 操作。最后,完成器将 FetchAdd 结果存储回目标内存,使用与获取时相同的字节序格式。

2.3  TLP Digest规则

  • 对于任何 TLP,TD 位上的 1 位表示在 TLP 末尾存在 TLP disgest字段,该字段包含端到端 CRC(ECRC)值。
  1. 如果 TD 位的值与观察到的大小(考虑数据有效载荷,如果存在)不对应,则该 TLP 是畸形 TLP。
    • 这是与接收端口相关联的报告错误。
  • 如果 TLP 的中间或最终 PCI Express 接收器不支持 ECRC 校验,接收器必须忽略 TLP digest。
  1. 如果 TLP 的接收器支持 ECRC 校验,接收器根据规则将 TLP digest字段中的值解释为 ECRC 值。

2.4 路由和寻址规则

有三种主要的 TLP 路由机制:地址、ID 和隐式。本节定义了地址和 ID 路由机制的规则。隐式路由仅与消息请求一起使用,后面介绍。

2.4.1 基于地址的路由规则

  • 地址路由用于内存和 I/O 请求。
  • 规定了两种地址格式,一种是与 4 DW 头标一起使用的 64 位格式(见图 2-7),另一种是与 3 DW 头标一起使用的 32 位格式(见图 2-8)。

  • 对于内存读取、内存写入和原子操作请求,地址类型 (AT) 字段按照表 10-1 所示进行编码。
  • 对于所有其他请求,除非另有明确说明,AT 字段是保留的。LN 读取和 LN 写入有特殊要求。
  • 如果 TH 位被设置,则 PH 字段按照表 2-15 所示进行编码。
  • 如果 TH 位被清除,则 PH 字段是保留的。
  • 地址映射到 TLP 头部的详细信息在表 2-5 中展示。

  • 内存读取、内存写入和原子操作请求可以使用任一格式。
  1. 对于低于 4 GB 的地址,请求者必须使用 32 位格式。如果接收器收到一个使用 64 位格式寻址低于 4 GB 的请求(即,地址的高 32 位为全 1),接收器的行为是未指定的。
  • I/O 读取请求和 I/O 写入请求使用 32 位格式。

2.4.2 基于ID的路由规则

  • ID路由用于配置请求、ID路由消息和完成事务。本规范定义了几个ID路由消息(表F-1)。允许其他规范定义额外的ID路由消息。
  • ID路由使用总线、设备和功能号(BDF)来指定TLP的目的地:
    • 对于非 ARI 路由ID,总线、设备和(3位)功能号到TLP头部的映射显示在表 2-6、图 2-9和图 2-11中。
    • 对于 ARI 路由ID,总线和(s位)功能号到TLP头部的映射显示在表 2-7、图 2-10和图 2-12中。
  • 规定了两种基于ID的路由格式,一种用于带有4 DW头部的(见图 2-9和图 2-10),另一种用于带有3 DW头部的(见图 2-12和图 2-10)。
  1. 两种格式的头标字段位置是相同的(见图 2-5)。

2.5 第一/最后一个DW的数据字节使能规则

字节使能位包括在内存、I/O 和配置请求中。本节定义了相应的规则。 字节使能位,当在请求头标出现时,位于头标的byte 7(见图 2-13)。对于设置了 TH 位的内存读取请求,字节使能字段被重新用于携带 ST[7:0] 字段,字节使能的值如下所定义的含义。只有在可以接受将所有请求的数据字节都使能的情况下,才应将 TH 位设置在内存读请求中。

  • 对于设置了 TH 位的内存读请求,字节使能的以下值是隐含的。
    • 如果此请求的长度字段指示长度为 1 DW,则第一个 DW 字节启用的值隐含地被认为是 1111b,最后一个 DW 字节启用的值隐含地被认为是 0000b。
    • 如果此请求的长度字段指示长度大于 1 DW,则第一个 DW 字节启用和最后一个 DW 字节启用的值隐含地被认为是 1111b。

  • First DW BE[3:0] 字段包含对请求引用的第一个(或唯一)DW的字节使能位。
  1. 如果一个请求的长度字段指示长度大于 1 双字节 (DW),则该字段不能等于 0000b。
  • Last DW BE[3:0] 字段包含请求的最后一个DW的字节使能位。
  1. 如果一个请求的长度字段指示长度为 1 DW,则该字段必须等于 0000b。
  2. 如果一个请求的长度字段指示长度大于 1 DW,则该字段不能等于 0000b。

对于字节使能位字段的每个位:

  • 0b 表示在完成器处对应的数据字节不应被写入,或者如果是非预取的,则不应被读取。

  • 1b 表示在完成器处对应的数据字节必须被写入或读取。

对于所有长度为 1 DW 的请求,允许在First DW BE[3:0]中使用非连续的字节使能位。

  • 非连续字节使能位示例:1010b, 0101b, 1001b, 1011b, 1101b

对于四字节 (QW) 对齐且长度为 2 DW (1 QW) 的内存请求,允许在两个字节使能位字段中都使用非连续的字节使能位。

所有非 QW 对齐且长度为 2 DW (1 QW) 的内存请求,以及长度为 3 DW 或更长的内存请求,必须仅使能请求的First DW和Last DW之间数据的连续字节。

  • 连续字节启用位示例::

  1. First DW BE :1100b,Last DW BE:0011b

  2. First DW BE :1000b,Last DW BE:0111b

表 2-8 显示了字节使能位字段的位、它们在请求头标中的位置,以及引用数据的相应字节之间的对应关系。

带有长度为 1 DW但没有启用任何字节的写入请求是允许的,并且在完成器处(除非另有规定)不会产生任何效果。 

如果一个长度为 1 DW 的读取请求指定没有启用任何字节来读取( FirstDW BE[3:0] = 0000b),相应的完成包必须指定长度为 1 DW,并且包含 1 DW 的数据有效载荷。

  • 数据有效载荷的内容在完成包中是未指定的,可以是任意值。

如果 TLP 违反了本节中指定的字节使能位规则,接收器/完成器的行为是未定义的。

接收器可以(但不是必须)检查是否违反了本节中指定的字节使能位规则。如果实施这些检查的接收器确定 TLP 违反了一个或多个字节使能位规则,该 TLP 就是一个畸形 TLP。这些检查是独立可选的(见第 6.2.3.4 节)。

  • 如果检查了字节使能位规则,违规行为是一个与接收端口相关联的报告错误。

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

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

相关文章

Axure RP 9:卓越的交互式产品原型设计工具

Axure RP 9,作为一款备受欢迎的交互式产品原型设计工具,已经在全球范围内赢得了众多设计师和开发者的青睐。这款软件凭借其强大的功能和出色的用户体验,成为了产品原型设计领域的佼佼者。 Axure RP 9支持Mac和Windows两大操作系统&#xff0…

茅台申购,多平台签到与通知 | 使用极空间NAS部署一个神级脚本『DailyCheckIn』

茅台申购,多平台签到与通知 | 使用极空间NAS部署一个神级脚本『DailyCheckIn』 哈喽小伙伴们好,我是Stark-C~,今天为大家分享一个极空间上非常实用且好玩的项目。 小伙伴们都知道,目前很多平台为了促进用户的活跃度和黏性&#…

LeetCode--所有质数、质数对

1.0 Q: 输出 100 以内所有质数 1.1 /* 第一层循环控制检查到哪个数* 第二层通过遍历除以每个比他小的数的方式,检查每个数是不是质数* 由于要遍历检查,设置一个标记,只要任意一次循环可以整除,我们就设置该标记为不是质数 */boolean isPrime true;for (int i 2; i < 100…

如何彻底将CAD或者Cadence卸载干净

最近因为升级软件需要先彻底删除这两个软件&#xff0c;发现无论如何都不能卸载干净&#xff0c;于是乎找到这样一个软件帮助卸载或查找剩余的软件残留&#xff1a; 官网&#xff1a;https://geekuninstaller.com 支持软件和 UWP 应用的卸载&#xff0c;查看软件注册表和安装目…

[leetcode] 68. 文本左右对齐

文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff…

The 2024 International Collegiate Programming Contest in Hubei Province, China

目录 H. Genshin Impact Startup Forbidden III K. Points on the Number Axis B 估计还会补D&#xff0c;I H. Genshin Impact Startup Forbidden III 对于一个有鱼的池塘&#xff0c;有周围与自己本身五个关键位置可以捕获当前位位置的鱼。把这些位置存储到 map中。用四进制…

深入理解京东商品搜索API(jd.item_search)返回值结构

京东商品搜索API&#xff08;jd.item_search&#xff09;的返回值结构通常是一个复杂的JSON对象&#xff0c;它包含了关于搜索结果的详细信息。为了深入理解这个返回值结构&#xff0c;我们可以将其大致分解为几个主要部分。 status: code: 响应状态码&#xff0c;通常200表示成…

新品 | 功率放大器高压放大测试器HAP-4001

400V功率放大器是一台非常实用的讯号放大器&#xff0c;它具有体积小、重量轻及操作方便&#xff0c;较高的电压输出(400Vp-p)以及较大的输出电流&#xff08;2.8Ap-p&#xff09;等优点。 HAP-4001连续输出直流电流量最大值达到0.5 A&#xff0c;电压放大增益40倍&#xff0c…

OSI七层模型

ISO为了更好的使网络应用更为普及&#xff0c;推出了OSI参考模型。 &#xff08;1&#xff09;应用层 OSI参考模型中最靠近用户的一层&#xff0c;是为计算机用户提供应用接口&#xff0c;也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有&#xff1a;HTTP&…

Echarts柱状图横坐标不显示

本人遇到的问题&#xff1a;折线图横坐标可以正常显示 柱状图接收一样的数据在横坐标却显示不了 1.在前端打印是否能够正常接收数据、数据类型是否有误以及数据是否有内容 console.log(typeof optionbar.xAxis.data)console.log(optionbar.xAxis.data) 2.如上确定能够接收到数…

netty 高性能架构设计--零拷贝

文章目录 前言一、直接内存1.1 什么是直接内存1.2 代码实现1.3 使用直接内存的优缺点 二、netty 零拷贝设计2.1 netty 直接内存2.2 netty 内存池 三、零拷贝的两种方式 前言 本篇从源码层面剖析 netty 高性能架构设计之零拷贝&#xff0c;并且扩展讲述零拷贝的两种实现方式。 …

有没有不使用技术分析工具的?众汇10年交易经验发现还真有

不知道各位投资者有没有遇见过不使用技术分析工具的投资者&#xff0c;众汇用自己的10年外汇交易经验保证&#xff0c;别不信还真有&#xff0c;并且不在少数。 其实道理很简单&#xff0c;这些投资者不相信技术分析工具的效率!在这些投资者看来技术分析工具通常比较滞后、需要…

前置知识储备

基本认知 什么是模式 在一定环境中解决一些问题的方案&#xff08;通俗来说&#xff1a;特定环境中用固定的套路解决问题&#xff09; 什么是设计模式 设计模式是一套反复被人使用&#xff0c;多数人知晓的&#xff0c;经过分类编目的代码设计经验的总结 设计模式最终的目…

2024蓝桥杯CTF writeUP--缺失的数据

压缩包的内容 里面有secret.txt文件&#xff0c;用ARCHPR工具套上字典&#xff0c;爆破压缩包密码。密码为pavilion 解压得到原图&#xff0c;并且有了加密后的图片&#xff0c;根据代码里的key和参数直接运行脚本解密水印图片&#xff1a; import cv2 import numpy as np imp…

【Golang】VSCode进行GO的调试

原来的launch.json {"version": "0.2.0","configurations": [{"name": "Golang","type": "go","request": "launch","program": "${workspaceFolder}","…

CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板

CopyClip for Mac&#xff0c;一款专为Mac用户打造的剪贴板管理工具&#xff0c;让你在复制粘贴的日常任务中&#xff0c;享受到前所未有的高效与便捷。 它常驻在菜单栏中&#xff0c;时刻准备为你服务。一旦你复制了内容&#xff0c;CopyClip就会自动将其保存至历史记录中&…

为什么Qt这么强大却不受欢迎?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Qt的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;虽然这个问题并不被广泛讨论&#xff0c;但我根…

docker-compose安装es+kibana 8.12.2

小伙伴们&#xff0c;你们好&#xff0c;我是老寇&#xff0c;我又回来辣&#xff0c;几个月不见甚是想念啊&#xff01;&#xff01;&#xff01; 因云平台需要改造&#xff0c;es7升级为es8&#xff0c;所以记录一下&#xff0c;es8需要开启ssl认证&#xff0c;需要配置证书…

项目1:STM32+DHT11+FreeRTOS+emwin+LCD

【屏幕显示DHT11数据】 面向对象的思想编写硬件驱动程序&#xff0c;DHT11采集环境中的温湿度数据。使用FreeRTOS提供的任务间通信、同步、互斥&#xff0c;将DHT11的数据传递给显示任务。显示任务中&#xff0c;使用emWin中间件&#xff0c;制作屏幕的各种界面&#xff0c;并将…

基于零一万物多模态大模型通过外接数据方案优化图像文字抽取系统

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…