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

PCIe— Legacy PCI

Legacy Model

        该器件通过将其引脚置位到控制器来生成中断。 在较旧的系统中,这个控制 器通常是Intel 8259 PIC,有15个IRQ输入和一个INTR输出。 然后,PIC将断 言INTR以通知CPU一个或多个中断正在挂起。         
        一旦CPU检测到INTR的断言并准备对其采取行动,它必须识别哪个中断实际 上需要服务,这是通过CPU在处理器总线上发出一个特殊的命令来完成的, 称为中断确认。        
        系统将此命令路由到PIC,PIC返回一个称为“中断向量”的8位值,以报告当前 挂起的最高优先级中断。 系统软件会提前为每个IRQ输入编程一个唯一的向量。  
        然后中断处理程序使用该向量作为扩展表(一个由软件设置的区域,包含所有扩展服务扩展行(ISR)的起始地址)的偏移量,并获取它在该位置找到的 ISR起始地址。
        该地址将指向ISR的第一条指令,该指令已被设置为处理此中断。 这个处理 程序将被执行,服务于中断,并告诉它的设备取消断言它的INTx#行,然后 将控制权返回到先前中断的任务 。            

传统中断交付模型(Legacy Interrupt Delivery)核心流程​

​1. 设备触发中断(Device Asserts Interrupt Pin)​
  • ​物理信号​​:PCI设备通过​​电平触发​​方式拉低INTx#引脚(如INTA#)。
  • ​共享线路​​:多个设备共享同一条中断线(Wire-OR连接),如图中PCI Bus上的INTA#信号。
  • ​关键问题​​:
    • 电平保持:设备需维持低电平直至中断被处理,否则中断丢失。
    • 冲突延迟:共享线路需等待所有设备释放信号才能结束中断。
        PIC将断言INTR以通知CPU一个或多个中断正在挂起。
​2. 中断控制器响应(PIC Processes Request)​
       ​信号传递​​:
  • 南桥(South Bridge)接收INTA#信号,转发至中断控制器(PIC)。
  • PIC检测到有效IRQ输入后,拉高​​INTR信号​​通知CPU(步骤②)。
  • ​8259 PIC特性​​:
    • 15级IRQ输入,固定优先级(IRQ0最高,IRQ7最低)。
    • 边沿/电平触发模式可配置(传统PCI强制为​​电平触发​​)。
​3. CPU中断应答(CPU Issues Interrupt Acknowledge)​
  • ​处理器总线操作​​:
    • CPU检测到INTR有效后,通过北桥(North Bridge)发送​​Interrupt Acknowledge命令​​(步骤③)。
    • 该命令本质是特殊总线周期(x86为INTA总线周期)。
  • ​关键约束​​:
    • 中断应答期间CPU暂停执行,直至获取中断向量。
​4. 中断向量获取(PIC Returns Interrupt Vector)​
  • ​向量生成​​:
    • PIC将当前最高优先级IRQ转换为​​8位中断向量号​​(步骤④)。
    • 向量号由BIOS/OS预先编程(如IRQ0=0x08, IRQ1=0x09)。
  • ​硬件交互​​:
    • 向量号通过数据总线返回给CPU(图中Vector路径)。
​5. 中断服务例程执行(ISR Execution)​
  • ​中断表查询​​:
    • CPU以向量号为索引,从​​中断描述符表(IDT)​​ 读取ISR入口地址(步骤④)。
    • x86实模式:中断表为IVT(基址0x0000);保护模式:IDT基址由IDTR寄存器指定。
  • ​ISR处理流程​​:
    1. 保存CPU上下文(寄存器压栈)。
    2. 执行设备服务逻辑(如读取状态寄存器)。
    3. ​清除中断源​​:向设备发送EOI(End of Interrupt)命令。
    4. 恢复上下文并返回(IRET指令)。
        

传统模型的技术缺陷与PCIe改进​

​1. 主要瓶颈​
​问题​​根源​​后果​
​共享冲突​多设备共享INTx#线路延迟不可控,优先级反转
​电平保持依赖​ISR必须手动清除设备中断竞争条件导致中断丢失
​中断风暴风险​故障设备持续拉低INTx#系统死锁
​多核扩展性差​PIC不支持多CPU中断分发SMP系统性能瓶颈
​2. PCIe的兼容性改造​
  • ​虚拟INTx消息​​:
    • Assert_INTx/Deassert_INTx消息包模拟电平变化。
    • 消息路由:设备 → RC(Root Complex) → IO APIC(替代PIC)。
  • ​桥接转换​​:
    • PCIe-to-PCI桥将物理INTx#信号转换为虚拟INTx消息(见图中Bridge角色)。

与传统模型相关的关键硬件​

​组件​​作用​
​8259 PIC​将IRQ转换为向量号,管理15级中断优先级
​南桥(South Bridge)​集成中断控制器,连接低速设备(如PCI总线)
​北桥(North Bridge)​处理CPU与高速组件(内存/显卡)通信,转发中断应答命令
​中断描述符表(IDT)​存储中断向量与ISR入口地址的映射关系(x86架构核心数据结构)

Changes to Support Multiple Processors

        该模型适用于单CPU系统,但有一个限制,使其在多CPU系统中次优。 问题是INTR引脚只能连接到一个CPU。 如果存在多个处理器,那么只有其中一个处理器会看到中断,并且必须为所有中断提供服务,而其他CPU不会看到任何中断。 为了获得最佳性能,这样的系统确实需要在所有处理器上均匀分布系统任务,称为SMP(对称多处理),但引脚模型不支持它。
         为了实现更好的SMP,需要一个新的模型,为此,PIC被修改为IO APIC(高级可编程控制器)。 IO APIC被设计为具有一个单独的小型总线,称为APIC总线,它可以通过该总线传递中断消息,如第799页的图17 - 4所示。 在这个模型中,消息包含中断向量号,所以CPU不需要发送一个中断确认到IO来获取它。APIC 总线连接到处理器内一个新的内部逻辑块,称为本地APIC。 总线在所有代理之间共享,任何代理都可以在总线上发起消息,但就我们的目的而言,是它用于从外围设备发送中断。 这些中断现在可以由软件静态分配,由不同的CPU、多个CPU提供服务,甚至可以由IO APIC动态分配。

Legacy PCI Interrupt Delivery

  PCI设备想使用中断的画,有两种选择。 他们可以使用:

         (1)INTx#可共享的低电平有效信号,在原始规范中定义。

         (2)消息信号中断是作为规范2.2版本加的。MSI无需修改即可在PCIe系统中使用。

Device INTx# Pins

PCI设备最多支持4个INTx#信号(INTA#~INTD#)。因PCI设备可含8个功能(Function),每个功能仅能驱动一个中断引脚。PCI开发时,典型系统采用含15输入的8259 PIC,但许多IRQ已被系统占用(如定时器、键盘),部分预留给ISA卡。故规范仅支持4个中断引脚。然而PCI总线上设备常超4个,单设备内功能也可能超4个需中断,因此PCI中断被设计为​​电平敏感且可共享​​——这些信号可通过线或(wire-ORed)连接。当中断触发时,ISR需遍历共享同引脚的所有功能以确认中断源 

Determining INTx# Pin Support

        PCI function表示支持其配置头中的INTx#信号。 图所示的只读中断引脚寄存器pin-register指示此函数是否支持INTx#,如果支持,则在请求中断时将断言哪个中断引脚.

        图17-5所示的中断线寄存器(Interrupt Line Register)提供驱动所需的下一条信息:该引脚连接至PIC(可编程中断控制器)的输入引脚。系统软件为PIC的每个输入引脚(IRQ)编程分配唯一的中断向量号。当最高优先级中断触发时,PIC向处理器报告该向量号,处理器据此索引中断向量表,获取并执行对应设备的中断服务程序(ISR)。 

        设计人员从器件分配INTx#引脚的路由方式。 它们可以通过多种方式进行路由, 但最终每个INTx#引脚都连接到中断控制器的一个输入端。 第803页的图17 - 6 举例说明了通过可编程路由器将多个PCI设备中断连接到中断控制器的情况。 连接到可编程路由器给定输入端的所有信号将被定向到中断控制器的特定输入端。 其中断被路由到公共中断控制器输入的功能都将具有由平台软件(通常为固件)分配给它们的相同的中断线编号。 在本例中,IRQ 15有三个PCI INTx#输入,来 自连接到它的不同设备。因此,使用这些INTx#线的功能将共享IRQ 15,因此在查询时,所有function都将使控制器发送相同的向量。 该向量将不同功能的三个ISR链接在一起

Associating the INTx# Line to an IRQ Number 

根据系统需求,路由器被编程将其四个输入连接到PIC(可编程中断控制器)的四个可用输入。完成后,每个功能(Function)关联的INTx#引脚路由路径即确定,系统软件将中断线编号(IRQ号)写入每个功能的​​Interrupt Line寄存器​​。该值最终被设备驱动读取,从而知晓其中断在中断向量表中的位置——驱动将ISR(中断服务程序)入口地址写入此位置,此过程称为​​挂接中断​​(hooking the interrupt)。当该功能触发中断时,CPU将接收与Interrupt Line寄存器指定的IRQ对应的向量号,并据此索引中断向量表,获取该功能设备驱动关联的ISR入口地址。

NTx#信号线为​​低电平有效​​的漏极开路(Open-Drain)信号,系统为每条线提供上拉电阻。连接至同一PCI中断请求信号线的多个设备可同时置位(Assert)该信号而不会造成损坏。 

当功能(Function)触发中断时,其配置头状态寄存器(Status Register)中的​​中断状态位(Interrupt Status Bit)​​ 将被置位。系统软件可通过读取该位判断当前是否有中断挂起。 

PCI 2.3规范在配置头命令寄存器(Command Register)中新增​​中断禁用位(Interrupt Disable Bit,Bit 10)​​。复位时该位为0(允许INTx#信号生成),但软件可置1以禁用INTx#。需注意:​​此位对MSI(消息信号中断)无效​​。MSI通过其专属能力结构(MSI Capability Structure)中的命令寄存器启用,且启用MSI会自动禁用INTx引脚或其模拟机制。 

以下是针对PCI规范中​​中断状态位(Interrupt Status Bit)​​ 的技术解析,结合配置空间寄存器机制及中断触发逻辑进行说明:

🔧 ​​一、中断状态位(Interrupt Status Bit)的核心机制​

​1. 功能定义与行为规则​

  • ​位置与属性​​:
    • 位于PCI配置空间​​状态寄存器(Status Register)​​ 的Bit 3(只读)。
    • 当设备有中断挂起(Pending)时,​​硬件自动置位此位​​,软件无法直接写入。
  • ​触发条件​​:
    • 设备内部中断事件(如DMA完成、错误状态)发生时,硬件将Interrupt Status = 1
  • ​与INTx#信号的关联​​:
    • 若​​命令寄存器(Command Register)​​ 的​​中断禁用位(Interrupt Disable, Bit 10)为0​​(即INTx中断启用):
      • Interrupt Status = 1 会​​立即触发INTx#信号​​(拉低电平或发送Assert_INTx消息)。
    • 若中断禁用位为1(INTx中断禁用):
      • Interrupt Status仍会记录中断状态,但​​不会触发INTx#信号​​,中断被静默。这种设计允许驱动在禁用中断时仍能​​通过轮询状态位处理紧急事件​​(如硬件错误)。

​2. 与中断禁用位的独立性​

​寄存器/位​作用范围是否影响状态位
​Status Bit 3​仅记录INTx中断状态❌ 不受任何控制
​Command Bit 10​控制INTx信号触发✅ 决定是否传递中断

🔄 ​​二、与MSI/MSI-X中断的互斥性​

​1. MSI启用时的自动切换​

​行为​INTx模型MSI模型
​中断触发方式​依赖状态位+INTx#信号内存写消息(TLP包)
​状态位影响​✅ 有效❌ 无效(状态位无意义)
​启用MSI的副作用​硬件自动禁用INTx信号独占中断通道

 Virtual INTx Signaling

如果在PCIe拓扑中无法使用MSI,则将使用INTx信令模型。 以下是需要能够使用INTx消息的设备的两个示例:
  • ​PCIe转PCI/PCI-X桥接器​​:多数PCI设备使用INTx#引脚(因MSI对它们为可选功能)。由于PCIe不支持边带中断信号(sideband signaling),需改用​​带内消息(inband messages)​​ 传递中断请求。中断控制器解析该消息并向CPU提交中断请求(含预编程的向量号)。
  • ​引导设备(Boot Devices)​​:PC系统在引导阶段常用传统中断模型,因MSI通常需OS级初始化。引导至少需三个子系统:输出设备(如显卡)、输入设备(如键盘)、操作系统加载设备(如硬盘)。参与系统初始化的PCIe设备称为“引导设备”,它们在OS及驱动加载前使用传统中断支持,之后建议切换至MSI。

Virtual INTx Wire Delivery

         图17 - 9显示了带有PCIe端点和PCI Express到PCI桥的系统。 假设软件没有在端点上启用MSI,它将发送带有INTx消息的中断请求。 在本例中,桥接器通过INTx消息传播来自已连接PCI设备的基于引脚的中断。 可以看出,桥接器发送INTB消息以从PCI总线发出其INTB#输入的断言和解除断言的信号。 PCIe端点使用emulation消息通知INTA。 
 INTx#信令涉及两个消息:
         Assert_INTx消息指示虚拟INTx#信号的高电平到低电平转换(从非活动到活动)。
         Deassert_INTx消息指示低电平到高电平转换。
        当一个function发送Assert_INTx消息时,它也会在配置状态寄存器中设置其初始化状态位,就像它断言物理INTx#引脚时一样.

INTx Message Format

       图17 - 10描述了INTx消息头的格式。 中断控制器是这些消息的最终目的地,但是所采用的路由方法不是“路由到根复合体”,而实际上是“在接收方本地终止”,如图17 - 10所示。 原因有二。 
        第一是因为沿着上游路径的每个桥(包括交换端口和根端口)可以将虚拟中断线路映射到跨桥的不同虚拟中断线路(例如, 交换机端口接收Assert_INTA,但在向上游传播时将其映射到Assert_INTB )。有关INTx映射的更多信息,请参见下面的“INTx映射”。
        第二个原因是由于我们正在模拟基于引脚的信号。如果一个端口接收到一个映射到其主端INTA的断言中断消息,并且由于上一个中断已经向上游发送了一个Assert_INTA消息,那么就没有理由再发送一个。 INTA已经被视为断言。 有关INTx消息折叠的更多信息,请参见第810页的“INTx折 叠”。

Mapping and Collapsing INTx Messages

INTx Mapping

        SWITCH必须遵守PCI规范定义的INTx映射,如表17 - 1所示。 此映射定义了当中断通过PCI到PCI桥路由时存在的虚拟连接。 该映射基于INTx消息类型和device number来自message请求中的Request ID字段 。

         图17 - 11示例。 在两个下游交换机端口上接收到的断言中断消息都是INTA消息。 每个入口端口的虚拟PCI到PCI网桥将两个INTA消息映射到INTA,这意味着没有变化。 这是因为两个始发端点设备的设备号都为零(它包含在中断消息本身中,作为中断器ID ReqID的一部分)。 表17 - 1显示了来自设备0的中断消息映射到网桥另一侧的相同INTx消息(即, 在交换机内部,两个INTA
消息都映射到INTA)。 因此,每个下游端口将向上游传播中断消息,而无需更改其虚拟线路。 但是,传播的中断消息不再具有原始请求者的ReqID,它们现在具有传播中断消息的端口的ReqID。

INTx Collapsing

        PCIe交换机必须确保INTx消息以正确方式向上游传递​​。具体而言,对传统PCI实现的中断路由处理时需满足:软件能判定哪些中断被路由至中断控制器的哪个输入引脚。INTx#信号线可采用​​线或连接(wire-ORed)​​ 方式接入中断控制器的同一IRQ输入引脚。当多个设备在同一中断线上触发中断时,中断控制器仅感知首个断言(assertion)信号;同理,当其中一个设备撤(deassert)其INTx#信号线时,该线将保持断言状态直至最后一个设备撤销中断。​​这些原则同样适用于PCIe的INTx消息机制​​。

​        但在某些场景下,两个重叠的INTx消息可能被出口端口的虚拟PCI桥映射为同一INTx消息,需要折叠这些消息​​。以图17-12为例:当上游交换机端口为中断消息映射传输路径时,两个下游交换机端口的中断消息(基于其设备号)均被映射为INTB。由于这两个重叠消息类型相同,必须进行折叠。

​        折叠机制确保中断控制器永远不会为共享中断接收到连续的Assert_INTx或Deassert_INTx消息​​,这与INTx信号采用线或连接的行为等效。

折叠机制的必要性​

  • ​避免中断控制器状态冲突​​:

    • 若连续发送Assert_INTB → 中断控制器误判为多次独立中断请求

    • 若过早发送Deassert_INTB → 中断提前终止,遗漏未处理设备

  • ​与物理线或一致性​​:
    折叠机制确保虚拟INTx信号行为完全匹配物理共享中断线的电平特性,保持与传统驱动兼容性​

​机制​

​实现目标​

​硬件要求​

​线或模拟​

兼容共享IRQ的物理PCI中断行为

交换机维护虚拟INTx状态寄存器

​动态映射​

支持多级拓扑下的中断信号重组

端口内置设备号-INTx映射表

​消息折叠​

防止冗余中断消息,确保电平语义

丢弃同类型连续Assert/Deassert消息

INTx Delivery Rules

​关键规则​​:

  1. ​Assert_INTx与Deassert_INTx仅向上游方向发送​
  2. ​交换机仅在中断状态变化时才向上游发送INTx消息​
  3. ​链路两端设备必须跟踪INTA-INTD的当前置位状态​
  4. ​交换机需独立跟踪每个下游端口的四个虚拟信号线状态,并在上游端口呈现折叠后的状态集合​
  5. ​根复合体必须为每个下游端口跟踪四个虚拟信号线(A-D)状态​
  6. ​可通过命令寄存器(Command Register)的中断禁用位(Interrupt Disable bit)关闭INTx信令​
  7. ​若存在活跃的INTx虚拟信号线时禁用中断,必须发送对应的Deassert_INTx消息​
  8. ​若下游交换机端口进入DL_Down状态,所有活跃的INTx虚拟信号线必须解除置位,并向上游端口发送Deassert_INTx消息更新状态​

NOTE:

1. ​​单向传输与状态跟踪机制​

  • ​仅上游传输​​:
    INTx消息(Assert/Deassert)​​仅允许从下游设备向上游根复合体传递​​,禁止反向或同级传输。

  • ​链路级状态同步​​:
    每个PCIe链路两端设备(如设备与交换机端口)需维护​​虚拟INTx信号线状态寄存器​​(如INTA_Status),确保电平行为与物理PCI信号一致。

2. ​​交换机的折叠处理(Collapsing)​

  • ​状态变化触发​​:
    交换机仅当检测到下游端口虚拟信号线状态​​从非活跃→活跃(Assert)或活跃→非活跃(Deassert)时​​,才向上游转发消息。

  • ​多设备信号合并​​:
    多个下游设备共享同一INTx类型时(如设备号1和5均触发INTA),交换机将其​​折叠为单次Assert/Deassert消息​​,模拟PCI的线或(Wire-OR)行为。

    示例:下游两个设备同时Assert_INTA → 交换机仅向上游发送一次Assert_INTA,直至所有设备解除后才发Deassert。

3. ​​根复合体的职责​

  • ​端口级状态管理​​:
    根复合体需为每个下游端口维护​​独立的INTx状态表​​,映射到系统中断控制器(如APIC)。

  • ​中断资源映射​​:
    根据BIOS/ACPI表将虚拟INTx信号(如INTA)转换为物理IRQ,供操作系统处理。

4. ​​中断禁用与异常处理​

  • ​强制解除机制​​:
    若启用命令寄存器的​​Interrupt Disable bit​​(偏移04h位10),需立即发送Deassert_INTx消息解除所有活跃中断。

  • ​链路失效响应​​:
    下游端口进入​​DL_Down状态​​(链路训练失败)时,交换机自动解除其关联的INTx状态,并向上游发送Deassert消息。


📊 ​​三、规则总结​

​规则​

​硬件行为​

​设计目的​

​单向传输​

仅允许Assert/Deassert向上游传递

避免环路,确保路径唯一性

​状态折叠​

交换机过滤冗余状态变化消息

模拟电平触发,减少总线负载

​根复合体跟踪​

独立维护每端口INTx状态

精准映射系统中断资源

​中断禁用强制解除​

禁用时立即发送Deassert

防止残留中断请求干扰系统

​DL_Down状态处理​

自动解除关联INTx并更新上游

确保中断状态与物理链路同步

⚠️ ​​四、设计注意事项​

  1. ​与MSI的互斥性​​:
    启用MSI/MSI-X时,​​INTx自动失效​​(配置空间Command Register的Interrupt Disable位强制置1)。

  2. ​虚拟信号线映射​​:
    交换机需按​​设备号(Device Number)​​ 转换INTx类型(如设备号1的INTA→上游INTB)。

  3. ​驱动兼容性​​:
    传统PCI驱动依赖INTx,需确保在引导阶段(MSI未初始化时)正确处理Assert/Deassert消息。

​核心结论​​:INTx消息规则通过​​状态跟踪+折叠转发+强制解除​​三重机制,在无物理信号线的PCIe架构中精准复现PCI中断语义,为传统设备提供无缝兼容,但高性能场景应优先选用MSI/MSI-X。

相关文章:

PCIe— Legacy PCI

Legacy Model ​​ 该器件通过将其引脚置位到控制器来生成中断。 在较旧的系统中,这个控制 器通常是Intel 8259 PIC,有15个IRQ输入和一个INTR输出。 然后,PIC将断 言INTR以通知CPU一个或多个中断正在挂起。 一旦CPU检测到INTR的断言…...

PostgreSQL数据库配置SSL操作说明书

背景: 因为postgresql或者mysql目前通过docker安装,只需要输入主机IP、用户名、密码即可访问成功,这样其实是不安全的,可能会通过一些手段获取到用户名密码导致数据被窃取。而ES、kafka等也是通过用户名/密码方式连接,…...

MySQL 的 super_read_only 和 read_only 参数

MySQL 的 super_read_only 和 read_only 参数 一、参数基本概念 1. read_only 参数 作用:控制普通用户是否只能读取数据影响范围:所有非SUPER权限的用户默认值:OFF(可读写) 2. super_read_only 参数 作用&#xf…...

低碳理念在道路工程中的应用-预制路面

一、引子 在上一篇文章里,给大家介绍了预制基层的应用,有人提出,既然基层能够预制,那么,道路面层能不能预制呢,有没有相关的研究成果和应用实例呢?答案是肯定的,在本篇文章中&#x…...

12-后端Web实战(登录认证)

在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,所以我们今天的主题就是登录认证。最终要实现的效果是&#…...

TIDB创建索引失败 mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory.

TIDB创建索引失败:解决“mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory”问题 在使用 TIDB 数据库时,我们有时会遇到创建索引失败的问题。常见的错误信息为: mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directo…...

Redis 插入中文乱码键

Java 代码: Bean// 静态代理模式: Redis 客户端代理类增强public StringRedisTemplateProxy stringRedisTemplateProxy(RedisKeySerializer redisKeySerializer,StringRedisTemplate stringRedisTemplate,RedissonClient redissonClient) {stringRedisTemplate.setK…...

Mac OS 使用说明

Mac 的启动组合键 了解可通过在启动时按住一个或多个按键来访问的 Mac 功能和工具。 若要使用这些组合键中的任何一个,请在按下电源按钮以开启 Mac 后或在 Mac 开始重新启动后,立即按住相应按键。请一直按住,直至电脑出现对应的行为。 !!!上…...

4.2.2 Spark SQL 默认数据源

在本实战概述中,我们探讨了如何在 Spark SQL 中使用 Parquet 格式作为默认数据源。首先,我们了解了 Parquet 文件的存储特性,包括其二进制存储方式和内嵌的 Schema 信息。接着,通过一系列命令,我们演示了如何在 HDFS 上…...

234. Palindrome Linked List

目录 一、题目描述 方法一、使用栈 方法二、将链表全部结点值复制到数组,再用双指针法 方法三、递归法逆序遍历链表 方法四、快慢指针反转链表 一、题目描述 234. Palindrome Linked List 方法一、使用栈 需要遍历两次。时间复杂度O(n),空间复杂度…...

广州邮科高频开关电源:以创新科技赋能通信能源绿色未来

在数字化浪潮席卷全球的当下,通信网络作为信息社会的基石,其稳定运行对电源系统的可靠性、效率及智能化水平提出了更高要求。作为国内通信电源领域的领军企业,广州邮科凭借其自主研发的高频开关电源技术,以高效节能、智能管控、绿…...

day41 python图像识别任务

目录 一、数据预处理:为模型打下坚实基础 二、模型构建:多层感知机的实现 三、训练过程:迭代优化与性能评估 四、测试结果:模型性能的最终检验 五、总结与展望 在深度学习的旅程中,多层感知机(MLP&…...

无人机报警器探测模块技术解析!

一、运行方式 1. 频谱监测与信号识别 全频段扫描:模块实时扫描900MHz、1.5GHz、2.4GHz、5.8GHz等无人机常用频段,覆盖遥控、图传及GPS导航信号。 多路分集技术:采用多传感器阵列,通过信号加权合并提升信噪比,…...

Docker 替换宿主与容器的映射端口和文件路径

在使用 Docker 容器化应用程序时,经常需要将宿主机的端口和文件路径映射到容器中,以便在本地访问容器中的服务和数据。本文将详细介绍如何替换和配置 Docker 容器的端口和文件路径映射。 1. 端口映射 端口映射用于将宿主机的端口转发到容器中的端口&am…...

我的3种AI写作节奏搭配模型,适合不同类型写作者

—不用内耗地高效写完一篇内容,原来可以这样搭配AI ✍️ 开场:为什么要“搭配节奏”写作? 很多人以为用AI写作,就是丢一句提示词,然后“等它写完”。 但你有没有遇到这些情况: AI写得很快,学境…...

Bonjour

Bonjour 是苹果的一套零配置网络协议,用于发现局域网内的其他设备并进行通信,比如发现打印机、手机、电视等。 一句话:发现局域网其他设备和让其他设备发现。 Bonjour 可以完成的工作 IP 获取名称解析搜索服务 实际应用场景示例&#xff0…...

华为云Flexus+DeepSeek征文 | 基于Dify和DeepSeek-R1开发企业级AI Agent全流程指南

作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 环境准备 2.1 华为云资源准备 2.1 实…...

HarmonyOS-ArkUI固定样式弹窗(1)

固定样式弹窗指的就是ArkUI中为我们提供的一些具备界面模板性质的弹窗。样式是固定的,我们可以决定在这些模板里输入什么样的内容。常见的有,警告弹窗, 列表选择弹窗, 选择器弹窗,对话框,操作菜单。 下图是本文中要讲到的基类固定样式弹窗,其中选择器弹窗没有包含在内,…...

痉挛性斜颈相关内容说明

一、颈部姿态的异常偏移​ 痉挛性斜颈会打破颈部原本自然笔直的状态,让颈部像被无形的力量牵引,出现不自主的歪斜、扭转。它就像打乱了颈部原本和谐的 “平衡游戏”,使得颈部姿态偏离正常,影响日常的体态与活动。​ 二、容易察觉…...

C语言| 函数参数传递指针

C语言| 拷贝传递(指针控制内存单元)-CSDN博客 【函数参数传指针和传数据的区别】 如果希望在另外一个函数中修改本函数中变量的值,那么在调用函数时只能传递该变量的地址。 1 普通变量,传递它的地址,可以直接操作该变量的内存空间。 举例…...

【25-cv-05917】HSP律所代理Le Petit Prince 小王子商标维权案

Le Petit Prince 小王子 案件号:25-cv-05917 立案时间:2025年5月28日 原告:SOCIETE POUR LOEUVRE ET LA MEMOIRE DANTOINE DE SAINT EXUPERY - SUCCESSION DE SAINT EXUPERY-DAGAY 代理律所:HSP 原告介绍 《小王子》&#x…...

MyBatis 动态 SQL 详解:灵活构建强大查询

MyBatis 的动态 SQL 功能是其最强大的特性之一,它允许开发者根据不同条件动态生成 SQL 语句,极大地提高了 SQL 的灵活性和复用性。本文将深入探讨 MyBatis 的动态 SQL 功能,包括 OGNL 表达式的使用以及各种动态 SQL 元素(如 if、c…...

从 “金屋藏娇” 到 自然语言处理(NLP)

文章目录 从两个问题理解自然语言处理(NLP)1、汉武帝喜欢阿娇吗1. 政治联姻的背景2. 早期情感与后期疏远3. 历史评价的复杂性4. 现代视角结论 2、刘彻和淮南王关系一、背景:诸侯王与中央的矛盾二、刘彻与刘安的互动三、深层原因与历史评价结论…...

vue3 ElMessage提示语换行渲染

在 ElMessage.error 中使用换行符 \n 并不会实现换行&#xff0c;因为 ElMessage 默认会将字符串中的换行符忽略。要实现换行显示&#xff0c;可以使用 HTML 标签 <br> 并结合 ElMessage 的 dangerouslyUseHTMLString 选项。以下是实现换行提示的代码示例&#xff1a; i…...

Java 微服务架构设计:服务拆分与服务发现的策略

Java 微服务架构设计&#xff1a;服务拆分与服务发现的策略 微服务架构作为一种热门的软件架构风格&#xff0c;在 Java 领域有着广泛的应用。它通过将系统拆分为一组小型服务来实现更灵活、可扩展的系统设计。在微服务架构中&#xff0c;服务拆分和服务发现是两个关键环节。本…...

华为OD机试真题——二叉树中序遍历(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《二叉树中序遍历》: 目录 …...

解决 Go 中 `loadinternal: cannot find runtime/cgo` 错误

在 Go 开发中&#xff0c;loadinternal: cannot find runtime/cgo 是一个相对不常见但可能令人困惑的错误。这个错误通常与 CGO 的使用和配置有关。本文将探讨这个错误的成因&#xff0c;并提供解决方案&#xff0c;帮助你在未来的开发中避免类似问题。 错误背景 在 Go 项目中…...

VSCode + GD32F407 构建烧录

前言 最近调试一块 GD32F407VET6&#xff08;168Mhz&#xff0c;8Mhz晶振&#xff09; 板子时&#xff0c;踩了一些“启动失败”的坑。本以为是时钟配置有误&#xff0c;最后发现是链接脚本&#xff08;.ld 文件&#xff09;没有配置好&#xff0c;导致程序根本没能正常执行 ma…...

Linux研学-入门命令

一 目录介绍 1 介绍 Linux与Windows在目录结构组织上差异显著&#xff1a;Linux采用树型目录结构&#xff0c;以单一根目录/为起点&#xff0c;所有文件和子目录由此向下延伸形成层级体系&#xff0c;功能明确的目录各司其职&#xff0c;使文件系统层次清晰、逻辑连贯&#xf…...

Hive在实际应用中,如何选择合适的JOIN优化策略?

在实际应用中选择Hive JOIN优化策略时&#xff0c;需综合考虑数据规模、分布特征、表结构设计、集群资源及业务需求。以下是具体的决策流程和参考标准&#xff1a; 一、数据特征分析 1. 统计数据规模 通过DESCRIBE FORMATTED table_name查看表大小和分区信息。使用SELECT CO…...