linux pl320 mbox控制器驱动分析 - (1) pl320手册分析

news2024/11/26 22:47:10

linux pl320 mbox控制器驱动分析

  • 1 pl320简介
    • 1.1 pl320用途
    • 1.2 pl320 IPCM 由以下部分组成:
    • 1.3 pl320 IPCM可配置的参数
    • 1.4 功能操作
    • 1.5 IPCM 操作流程
    • 1.6 Channel ID
  • 2 Using mailboxes(使用邮箱中断)
    • 2.1 Defining source core
    • 2.2 Defining destination core
    • 2.3 Using the Mailbox Mask Register
    • 2.4 Using the Mailbox Send Register
    • 2.5 Mailbox Data Registers
    • 2.6 Setting mode
      • 2.6.1 Auto Acknowledge
      • 2.6.2 Auto Link
    • 2.7 Interrupts and status Registers
    • 2.8 Configuration Status Register
    • 2.9 Usage constraints
      • 2.9.1 Multiple cores
      • 2.9.2 Single core
      • 2.9.3 Auto Link feature
        • 2.9.3.1 Auto Acknowledge enabled
        • 2.9.3.2 Auto Acknowledge disabled

pl320手册的下载地址为:
https://developer.arm.com/documentation/ddi0306/b/?lang=en
https://developer.arm.com/Processors/PL320

1 pl320简介

1.1 pl320用途

PL320 is an Inter-processor communications module for servicing interrupts. It pre-dates the GIC architecture.
PL320 是用于服务中断的处理器间通信模块。它早于 GIC 架构。

The IPCM provides up to 32 mailboxes with control logic and interrupt generation to support inter-processor communication. An AHB interface enables access from source and destination cores. The IPCM:
IPCM 提供多达 32 个邮箱,带有控制逻辑和中断生成以支持处理器间通信。 AHB 接口支持从源core和目标core进行访问。 IPCM:

  • Sends interrupts to other cores.
  • 向其他内核发送中断。
  • Passes small amounts of data to other cores.
  • 将少量数据传递给其他核心。

The mailboxes within the IPCM can be available as floating resources between cores or as dedicated resources to specific cores. A source core can have multiple mailboxes and send messages in parallel.
IPCM 中的邮箱可用作内核之间的浮动资源或用作特定内核的专用资源。源core可以有多个邮箱并并行发送消息。

1.2 pl320 IPCM 由以下部分组成:

  • 1-32 个可编程邮箱,每个包含:
    • 单个 1-32 位邮箱源寄存器
    • 单个 1-32 位邮箱目标寄存器,具有单独的设置、清除和状态地址
    • 单个 2 位邮箱模式寄存器以启用自动确认和自动链接模式
    • 单个 1-32 位邮箱屏蔽寄存器,具有单独的设置、清除和状态地址,使您能够屏蔽掉需要轮询而不是被中断的内核的单个邮箱中断
    • 单个 2 位邮箱发送寄存器,用于触发源和目标内核的邮箱中断
    • 0-7 32 位数据寄存器存储消息。
  • 1-32组只读中断状态寄存器,每个中断一个,每组包括:
    • 1-32位原始中断状态寄存器(每个位对应每个邮箱)
    • 1-32 位屏蔽中断状态寄存器(每个位对应每个邮箱)
  • 一个 32 位配置状态寄存器
  • 中断输出的集成测试寄存器
  • 外设和 PrimeCell 标识寄存器。

1.3 pl320 IPCM可配置的参数

IPCM 是一个高度可配置和可编程的模块。它具有三个可配置的参数:

  • 1-32个邮箱
  • 每个邮箱 0-7 个数据寄存器
  • 1-32 中断。
    这些参数使您能够配置 IPCM 实例以满足系统要求,从而减少门数。源、目标、模式和掩码等可编程特性使配置的 IPCM 能够由不同的内核以不同的方式使用,具体取决于当前的应用。

1.4 功能操作

The IPCM generates interrupts under software control. These interrupts normally have data associated with them and can be directed to one or more of up to 32 different interrupt outputs. Each interrupt output corresponds directly to a bit in every Mailbox Source, Mailbox Destination, and Mailbox Mask Register in every mailbox in the IPCM. These registers therefore control which interrupt lines are asserted when messages are sent and acknowledged.
IPCM 在软件控制下产生中断。这些中断通常具有与其关联的数据,并且可以定向到多达 32 个不同中断输出中的一个或多个。每个中断输出直接对应于 IPCM 中每个邮箱中每个邮箱源、邮箱目标和邮箱掩码寄存器中的一个位。因此,这些寄存器控制在发送和确认消息时断言哪些中断线。

You connect the interrupt outputs to the system interrupt controllers during integration. One or more interrupt outputs can connect to each interrupt controller. Normally the IPCM has at least one interrupt output connected to every interrupt controller in the system, enabling any core to send a message to any other core. When more than one IPCM interrupt is connected to the same interrupt controller, different types of message can be indicated on different interrupt lines, and therefore handled by different ISRs.
在集成期间将中断输出连接到系统中断控制器。一个或多个中断输出可以连接到每个中断控制器。通常情况下,IPCM 至少有一个中断输出连接到系统中的每个中断控制器,使任何内核都可以向任何其他内核发送消息。当多个 IPCM 中断连接到同一个中断控制器时,不同类型的消息可以在不同的中断线上指示,因此由不同的 ISR 处理。
A multi-core system normally has at least one IPCM instantiated. More can be instantiated if required. Because the IPCM is configurable, you can have several differently configured IPCMs instantiated in the same system.
一个多核系统通常至少有一个实例化的 IPCM。如果需要,可以实例化更多。因为 IPCM 是可配置的,所以您可以在同一系统中实例化多个不同配置的 IPCM。

1.5 IPCM 操作流程

Figure 2-3 shows an example system in which the IPCM is integrated so that IPCMINT[0] is connected to the interrupt controller for Core0 and IPCMINT[1] is connected to the interrupt controller for Core1.
图 2-3 显示了一个示例系统,其中集成了 IPCM,因此 IPCMINT[0] 连接到 Core0 的中断控制器,IPCMINT[1] 连接到 Core1 的中断控制器。
在这里插入图片描述

  • Core0 有一条消息要发送给 Core1。 Core0 通过在邮箱源寄存器中设置位 0 来声明邮箱。 Core0 然后在邮箱目标寄存器中设置位 1,启用中断并将消息编程到邮箱数据寄存器中。最后,Core 0 通过将 01 写入邮箱发送寄存器来发送消息。这会将中断断言到 Core1。
  • 当 Core1 被中断时,它会读取 IPCMINT[1] 的屏蔽中断状态寄存器以确定哪个邮箱包含消息。 Core1 读取该邮箱中的消息,然后清除中断并通过向邮箱发送寄存器写入 10 来断言确认中断。
  • Core0 被确认消息中断,完成操作。然后 Core0 决定是保留邮箱以发送另一条消息,还是释放邮箱,释放邮箱以供系统中的其他内核使用。

1.6 Channel ID

The Channel ID is defined as the one-hot encoded value that corresponds to a specific interrupt output from the IPCM. An IPCM configured to have 32 interrupt outputs has 32 corresponding Channel IDs. The Channel ID programs the Mailbox Source, Mailbox Destination, and Mailbox Mask Registers.
通道 ID 定义为与 IPCM 的特定中断输出相对应的单热编码值。配置为具有 32 个中断输出的 IPCM 具有 32 个对应的通道 ID。通道 ID 对邮箱源邮箱目标邮箱掩码寄存器进行编程。

Channel IDs map to 32 interrupt outputs (通道 ID 映射到 32 个中断输出).
在这里插入图片描述
在这里插入图片描述
从channel id和中断的映射关系可以看出,每个channel对应一个mbox中断。
在每个内核有一个 IPCM 中断的系统中,每个内核都有一个在 IPCM 中定义它的通道 ID。一些系统每个内核可以有多个 IPCM 中断,因此每个内核有多个通道 ID。

2 Using mailboxes(使用邮箱中断)

2.1 Defining source core

A core must obtain a mailbox to send a message. To do this the core writes one of its Channel IDs to the Mailbox Source Register and then reads the Mailbox Source Register back again to check whether the write was successful. The Mailbox Source Register must only contain a one-hot encoded value, that is, a single Channel ID. The software must ensure that only a one-hot encoded number is written to the Mailbox Source Register. You can only clear the Mailbox Source Register after it is programmed. Any writes other than 0x00000000 are ignored. This mechanism guarantees that only a single core has control of the mailbox at any one time.
核心必须获得邮箱才能发送消息。为此,核心将其通道 ID 之一写入邮箱源寄存器,然后再次读取邮箱源寄存器以检查写入是否成功。邮箱源寄存器必须只包含一个单热编码值,即单个通道 ID软件必须确保只有一个热编码号码被写入邮箱源寄存器。您只能在编程后清除邮箱源寄存器。除 0x00000000 之外的任何写入都将被忽略。这种机制保证在任何时候只有一个核心可以控制邮箱。
A core gives up a mailbox, when it is no longer required, by clearing the Mailbox Source Register. Clearing the Mailbox Source Register also clears all the other registers in the mailbox. This guarantees that a mailbox is always cleared when it is newly allocated.
当不再需要邮箱时,核心会通过清除邮箱源寄存器来放弃邮箱。清除邮箱源寄存器会清除邮箱中的所有其他寄存器。这保证了邮箱在新分配时总是被清除

2.2 Defining destination core

The Mailbox Destination Register has separate Set and Clear write locations to enable you to set individual bits in the Mailbox Destination Register without using read-modify-write transfers. You can set a single bit in the Mailbox Destination Register by writing that bit to the Destination Set Register. This causes the hardware to OR that bit with the current Mailbox Destination Register value. Similarly, you can clear a single bit in the Mailbox Destination Register by writing that bit to the Destination Clear Register.
邮箱目标寄存器具有单独的设置和清除写入位置,使您能够在不使用读-修改-写传输的情况下设置邮箱目标寄存器中的各个位。您可以通过将该位写入目标设置寄存器来设置邮箱目标寄存器中的单个位。这会导致硬件将该位与当前的邮箱目标寄存器值进行“或”运算。同样,您可以通过将邮箱目标寄存器中的一位写入目标清除寄存器来清除该位。
When the source core defines the mode of a mailbox, it defines which other cores are to receive the message by programming the OR of all the Channel IDs into the Mailbox Destination Register. If a core has more than one Channel ID only one is used per message. You can only write to the Mailbox Destination Register after the Mailbox Source Register is defined.
当源 core 定义邮箱模式时,它通过将所有通道 ID 的 OR 编程到邮箱目标寄存器中来定义哪些其他core将接收消息。如果一个core有多个通道 ID,则每条消息只使用一个。您只能在定义邮箱源寄存器后写入邮箱目标寄存器。

2.3 Using the Mailbox Mask Register

The Mailbox Mask Register uses separate Set and Clear registers for modification similar to the Mailbox Destination Register. The Mailbox Mask Register enables the interrupt outputs. To enable interrupts for a particular mailbox, a core writes its Channel ID to the Mask Set location. The interrupt for that mailbox can be masked out by writing the same Channel ID to the Mask Clear location. You can only write to the Mailbox Mask Register locations after the Mailbox Source Register is defined.
邮箱掩码寄存器使用单独的设置和清除寄存器进行修改,类似于邮箱目标寄存器。邮箱掩码寄存器启用中断输出。要为特定邮箱启用中断,内核将其通道 ID 写入掩码集位置。可以通过将相同的通道 ID 写入屏蔽清除位置来屏蔽该邮箱的中断。您只能在定义邮箱源寄存器后写入邮箱掩码寄存器位置。

2.4 Using the Mailbox Send Register

A message is sent by setting bit 0 of the Mailbox Send Register. This triggers the interrupt to the destination core. Clearing this bit clears the interrupt to the destination core. The acknowledge message is sent to the source core by setting bit 1 of the Mailbox Send Register. Clearing this bit clears the interrupt to the source core. You can use one write to clear bit 0 and set bit 1 in the Mailbox Send Register, although this is not mandatory. You cannot set bit 1 then clear bit 0 because 11 is an invalid value for the Mailbox Send Register. The Mailbox Send Register can only be written to after the Mailbox Source Register is defined.
通过设置邮箱发送寄存器的位 0 来发送消息。这会触发到目标core的中断。清除该位会将中断清除到目标内核。通过设置邮箱发送寄存器的位 1确认消息发送到源core。清除该位会清除源内核的中断。您可以使用一次写入清除邮箱发送寄存器中的位 0 并设置位 1,但这不是强制性的。您不能设置位 1 然后清除位 0,因为 11 是邮箱发送寄存器的无效值。邮箱发送寄存器只能在邮箱源寄存器定义后写入。

2.5 Mailbox Data Registers

The Mailbox Data Registers are general-purpose 32-bit registers that contain the message and can only be written to after the Mailbox Source Register is defined. The Mailbox Data Registers are normally written to before sending the message.
邮箱数据寄存器是包含消息的通用 32 位寄存器,只能在定义邮箱源寄存器后写入。邮箱数据寄存器通常在发送消息之前写入。

2.6 Setting mode

The Mailbox Mode Register controls how the acknowledge interrupt is sent back to the source core, and whether the current mailbox is linked to the next mailbox in the IPCM. The Mailbox Mode Register has two bits and you can only write to it after the Mailbox Source Register is defined.
邮箱模式寄存器控制如何将确认中断发送回源内核,以及当前邮箱是否链接到 IPCM 中的下一个邮箱。邮箱模式寄存器有两个位,您只能在定义邮箱源寄存器后写入它。

2.6.1 Auto Acknowledge

In Auto Acknowledge mode, an acknowledge interrupt is automatically sent to the source core after the final destination core has cleared its interrupt. Destination cores must clear their interrupts by writing their Channel ID value to the Destination Clear location. This clears their Channel ID from the Mailbox Destination Register. When the Mailbox Destination Register finally reaches zero, indicating that all destination cores have cleared their interrupts, the mailbox automatically detects this, clears bit 0 and sets bit 1 of the Mailbox Send Register. The source core then receives the acknowledge interrupt. The data associated with an Auto Acknowledge is the same as that for the original message. You can use Auto Acknowledge mode for 1-32 destination cores.
在自动确认模式下,在最终目标core清除其中断后,确认中断会自动发送到源内核。目标内核必须通过将它们的通道 ID 值写入目标清除位置来清除它们的中断。这将从邮箱目标寄存器清除他们的通道 ID。当邮箱目标寄存器最终达到零时,表明所有目标内核都已清除其中断,邮箱会自动检测到这一点,清除位 0 并设置邮箱发送寄存器的位 1源core然后接收确认中断。与自动确认关联的数据与原始消息的数据相同。您可以对 1-32 个目标内核使用自动确认模式。

Note
You can use Auto Acknowledge when the system contains just two cores, a source core and a destination core.
当系统仅包含两个内核(一个源core和一个目标core)时,您可以使用自动确认。

When Auto Acknowledge mode is disabled, the acknowledge interrupt is optional. The destination core must clear its interrupt by clearing bit 0 of the Mailbox Send Register. Only when the destination core sets bit 1 of the Mailbox Send Register does the source core obtain its acknowledge interrupt, indicating that the destination core has finished with the message. You can only disable Auto Acknowledge mode when there is only one destination core, where there is also a possibility of updating the message for the acknowledge.
当禁用自动应答模式时,应答中断是可选的。目标core必须通过清除邮箱发送寄存器的位 0清除其中断。只有当目标内核设置邮箱发送寄存器的位 1 时,源内核才会获得其确认中断,表明目标内核已完成消息处理。您只能只有一个目标core禁用自动确认模式,其中也有可能更新确认消息。

2.6.2 Auto Link

Auto Link provides a mechanism to link mailboxes together so that when a message is acknowledged in one mailbox, the next message is sent from the linked mailbox instead of interrupting the source core. When Auto Link is enabled, the destination core clears bit 0 and sets bit 1 of the Mailbox Send Register in the usual way, but the acknowledge interrupt to the source core is masked out and Mailbox Send Register bit 0 is set in the next mailbox, sending that message.
自动链接提供了一种将邮箱链接在一起的机制,这样当一个邮箱中的一条消息被确认时,下一条消息将从链接的邮箱发送,而不是中断源core。当启用自动链接时,目标core会以通常的方式清除邮箱发送寄存器的位 0 并设置位 1,但是源内核的确认中断被屏蔽掉邮箱发送寄存器的位 0 会在下一个邮箱中设置,发送该消息。

In this mode, a source core can allocate multiple mailboxes to itself, link them together by setting the Auto Link bits and preload messages in all the mailboxes. When the first message is sent, it is not acknowledged until all the messages have been sent. There is no restriction on the destinations of these messages or whether Auto Acknowledge is enabled when Auto Link is used. In the IPCM, Mailbox0 can be linked to Mailbox1, which in turn can be linked to Mailbox2, up to Mailbox31. For example, if you want to link Mailbox0, Mailbox1, and Mailbox2, set the Auto Link bits in Mailbox0 and Mailbox1. Do not set the Auto Link bit in Mailbox2, to enable the acknowledge interrupt to be sent back to the source core.
在这种模式下,源内核可以为自己分配多个邮箱,通过设置自动链接位将它们链接在一起,并在所有邮箱中预加载消息。发送第一条消息时,直到发送完所有消息后才会确认。对于这些消息的目的地或使用自动链接时是否启用自动确认没有限制。在 IPCM 中,Mailbox0 可以链接到 Mailbox1,Mailbox1 又可以链接到 Mailbox2,直到 Mailbox31。例如,如果要链接 Mailbox0、Mailbox1 和 Mailbox2,请设置 Mailbox0 和 Mailbox1 中的自动链接位。不要设置 Mailbox2 中的自动链接位,以允许将确认中断发送回源内核。

When Auto Link is disabled, the source core is interrupted if an acknowledge interrupt is sent that has no effect on any other mailbox.
禁用自动链接时,如果发送了对任何其他邮箱都没有影响的确认中断,则源内核将被中断。

Note
When using Auto Link with Auto Acknowledge, the mailbox automatically sets Mailbox Send Register bit 1 in the first mailbox to send the acknowledge back to the source core but, because Auto Link is also set, the mailbox automatically sets Mailbox Send Register bit 0 in the linked mailbox.
当使用带有自动确认的自动链接时,邮箱会自动在第一个邮箱中设置邮箱发送寄存器位 1 以将确认发送回源内核,但是,由于还设置了自动链接,邮箱会自动在第一个邮箱中设置邮箱发送寄存器位 0链接邮箱。

2.7 Interrupts and status Registers

When a core receives an IPCM interrupt, it determines which mailbox triggered it by reading the Masked Interrupt Status Register related to that interrupt line. Each Masked Interrupt Status Register contains up to 32 bits, each bit referring to a single mailbox.
当内核接收到 IPCM 中断时,它通过读取与该中断线相关的屏蔽中断状态寄存器来确定哪个邮箱触发了它。每个屏蔽中断状态寄存器最多包含 32 位,每一位对应一个邮箱。

If a core is using a mailbox in polled mode, it can use the Raw Interrupt Status Register to indicate which mailbox requires attention.
如果内核在轮询模式下使用邮箱,它可以使用原始中断状态寄存器来指示需要注意哪个邮箱。

In Figure 2.4, each mailbox contains up to seven data registers to hold the message. Every mailbox instance with a single IPCM must have the same number of data registers.
在图 2.4 中,每个邮箱最多包含 7 个数据寄存器来保存消息。每个具有单个 IPCM 的邮箱实例必须具有相同数量的数据寄存器。
在这里插入图片描述
Each mailbox can generate up to 32 interrupts, one for each Channel ID. The number of interrupts defines the number of bits in the Mailbox Source Register, Mailbox Destination Register, and Mailbox Mask Register. For example, in Figure 2.4, the IPCM has 32 interrupt outputs. Mailbox0 generates bit 0 of the IPCMMIS0-31 buses, while Mailbox31 generates bit 31 of the IPCMMIS0-31 buses.
每个邮箱最多可产生 32 个中断,每个通道 ID 一个。中断的数量定义了邮箱源寄存器、邮箱目标寄存器和邮箱掩码寄存器中的位数。例如,在图 2.4 中,IPCM 有 32 个中断输出。 Mailbox0 生成 IPCMMIS0-31 总线的位 0,而 Mailbox31 生成 IPCMMIS0-31 总线的位 31。

Multiple mailboxes are grouped together as shown in Figure 2.4 to form the 32-bit IPCM interrupt bus, IPCMINT[31:0]. All the interrupt bits from each mailbox relating to a single Channel ID are grouped together to form the masked interrupt status buses, IPCMMIS0[31:0] to IPCMMIS31[31:0]. The bits within these buses are then ORed together to form the IPCM interrupt bus, IPCMINT[31:0].
如图 2.4 所示,多个邮箱组合在一起形成 32 位 IPCM 中断总线,IPCMINT[31:0]。来自与单个通道 ID 相关的每个邮箱的所有中断位组合在一起形成屏蔽中断状态总线,IPCMMIS0[31:0] 到 IPCMMIS31[31:0]。然后将这些总线中的位进行“或”运算以形成 IPCM 中断总线 IPCMINT[31:0]。

2.8 Configuration Status Register

The three configurable parameters for the IPCM are:
IPCM 的三个可配置参数是:

  • number of mailboxes, 1-32
  • 邮箱数量,1-32
  • number of data registers per mailbox, 0-7
  • 每个邮箱的数据寄存器数,0-7
  • number of interrupts, 1-32.
  • 中断数,1-32

The configuration options that you choose define the read-only Configuration Status Register, enabling software to determine the IPCM configuration by reading this register. This enables a generic IPCM software driver to determine how to use each IPCM instance within a system.
您选择的配置选项定义了只读配置状态寄存器,使软件能够通过读取该寄存器来确定 IPCM 配置。这使通用 IPCM 软件驱动程序能够确定如何使用系统中的每个 IPCM 实例。

2.9 Usage constraints

There are several valid use models for a mailbox and some constraints under which they can be used. Messages can be sent to:
有几种有效的邮箱使用模型和使用它们的一些限制条件。消息可以发送至:

2.9.1 Multiple cores

If a message is sent to multiple cores, you must use the Auto Acknowledge feature and data must not be modified for the acknowledge. Destination cores must clear their interrupts by writing their Channel ID to the Destination Clear Register.
如果一条消息被发送到多个内核,您必须使用自动确认功能,并且不得为确认修改数据。目标内核必须通过将它们的通道 ID 写入目标清除寄存器清除它们的中断

2.9.2 Single core

If there is only a single destination core, the Auto Acknowledge mode is optional. If you disable the Auto Acknowledge mode, the acknowledge is optional, although an acknowledge normally happens, and the Mailbox Data Register can optionally be updated. When Auto Acknowledge is disabled, the destination core must clear its interrupt by clearing bit 0 of the Mailbox Send Register.
如果只有一个目标内核,则自动确认模式是可选的。如果禁用自动确认模式,则确认是可选的,尽管通常会发生确认,并且可以选择更新邮箱数据寄存器。禁用自动确认时目标core必须通过清除邮箱发送寄存器的位 0 来清除其中断。

2.9.3 Auto Link feature

You can only use the Auto Link feature when there is an acknowledge. You can use the Auto Link feature with either:
您只能在确认时使用自动链接功能。您可以将自动链接功能用于:

2.9.3.1 Auto Acknowledge enabled

The mailbox automatically sets the acknowledge when the final destination core clears its interrupt.
当最终目标内核清除其中断时,邮箱会自动设置应答。

2.9.3.2 Auto Acknowledge disabled

The destination core must send the acknowledge.
目标内核必须发送确认。

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

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

相关文章

JNI中GetObjectArrayElement, GetStringUTFChars,ReleaseStringUTFChars函数讲解

文章目录 GetObjectArrayElement函数使用场景代码演示GetStringUTFChars 函数使用场景ReleaseStringUTFChars函数 GetObjectArrayElement函数 函数原型: jobject GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index); Returns an element of a J…

STL容器之deque

文章目录 deque容器简介deque的操作 deque容器简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器 deque是双端数组,而vector是单端的deque在接口上和vector非常相似,在许多操作的地方都可以直接替换deque可以随机存取元…

C语言-【操作符二】

Hello,大家好,前面的文章里边介绍了算术、赋值以及移位操作符,这篇文章呢,就介绍一下C语言中的其他操作符吧~ 目录 位操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用,函…

C++11多线程:windows临界区和Linux互斥锁、递归锁的区别与使用。

文章目录 前言一、windows临界区1.1 基本概念1.2 函数使用 二、使用步骤1.代码示例1 总结 前言 多线程windows临界区和Linux互斥锁 提示:以下是本篇文章正文内容,下面案例可供参考 一、windows临界区 1.1 基本概念 Linux下有递归锁,递归锁…

着重讲解一下自动化测试框架的思想与构建策略,让你重新了解自动化测试框架

目录 序言: 一、简述自动化测试框架 二、自动化测试框架思想 三、构建自动化测试框架的策略 四、自动化测试框架的发展趋势 序言: 也许到现在大家对所谓的“自动化测试框架”仍然觉得是一种神秘的东西,仍然觉得其与各位很远;…

【JavaScript】ES6新特性(1)

1. let 声明变量 let 声明的变量只在 let 命令所在的代码块内有效 块级作用域 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

08-04 中间件和平台运行期监控

缓存中间件的三大坑 缓存击穿 用户访问热点数据&#xff0c;并且缓存中没有热点数据&#xff0c;大量访问直接到DB&#xff0c;热点击穿采用Canal做数据异构方案&#xff0c;把数据库中的值全部放到缓存热点缓存策略&#xff1a;通过分析调用日志获取热点数据&#xff0c;放到…

PMP项目管理-[第十一章]风险管理

风险管理知识体系&#xff1a; 规划风险管理&#xff1a; 识别风险&#xff1a; 实施定性风险分析&#xff1a; 实施定量风险分析&#xff1a; 监督风险&#xff1a; 11.1 风险 定义&#xff1a;是一种不确定的事件或条件&#xff0c;一旦发生&#xff0c;就会对一个或多个项目…

Elasticsearch(二)

Clasticsearch&#xff08;二&#xff09; DSL查询语法 文档 文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 常见查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。如&#xff1a…

eNSP模拟器下VRRP+MSTP实验配置

①&#xff1a;底层配置&#xff1a; vlan trunk 略 ②&#xff1a;MSTP配置&#xff1a; 所有交换机&#xff1a; stp region-configuration region-name aa revision-level 1 instance 1 vlan 2 to 3 instance 2 vlan 4 to 5 active region-configuration 核心1&…

Java笔记_21(网络编程)

Java笔记_21 一、网路编程1.1、初始网络编程1.2、网络编程三要素1.3、IP1.4、端口号1.5、协议1.6、UDP协议 一、网路编程 1.1、初始网络编程 什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景:即时通信、网游对战…

(一)SAS初识

1、SAS常用工作窗口 “结果”&#xff08;Result&#xff09;窗口——管理SAS程序的输出结果&#xff1b; “日志”&#xff08;Log&#xff09;窗口——记录程序的运行情况&#xff1b; “SAS资源管理器”&#xff08;Explore&#xff09;窗口&#xff1b; “输出”&#xff0…

洛谷P1217-回文质数 Prime Palindromes

洛谷P1217-回文质数 Prime Palindromes 这个题目我做出来了但是超时了&#xff0c;时间复杂度有点高&#xff0c;主要是因为我用了大量的循环&#xff0c; 所以我这个是比较暴力的解法&#xff0c;下面我分析我的暴力代码 首先是判断回文数的函数 第一步将标识传入参数是不是…

[数据集][目标检测]篮球数据集VOC格式7398张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;7398 标注数量(xml文件个数)&#xff1a;7398 标注类别数&#xff1a;1 标注类别名称:["basketball"]…

详解MNIST数据集下载、解析及显示的Python实现

Content MNIST数据集基本介绍下载MNIST数据集到本地解析MNIST数据集显示MNIST数据集中训练集的前9张图片和标签 随着图像处理、计算机视觉、机器学习&#xff0c;甚至深度学习的蓬勃发展&#xff0c;一个良好的数据集作为学习和测试相关算法非常重要。MNIST数据集对于想要学习和…

PMP 高项 07-项目质量管理

项目质量管理 概念 质量的基本概念 克劳斯比&#xff1a;符合要求 戴明&#xff1a;低成本条件下可预测的一致性和可靠度&#xff0c;适应市场需要 朱兰&#xff1a;适用性&#xff0c;满足客户需要 国际标准化组织&#xff1a;质量是反映实体&#xff08;产品、过程或活动等…

中间件容器化部署实现方案的前期调研

中间件容器化部署是为了实现GitOps模式的持续交付,实现部署即代码。痛点在于大多数中间件都是有状态的,本篇介绍如何实现有状态中间件的容器化部署。 常见中间件要实现容器化部署,需要解决以下问题: 对于网关类中间件,作为流量入口,虽然是无状态类型的中间件,但由于需要…

flask实现S3 Web客户端下载文件

import io from minio import Minio from minio.error import S3Error from flask import Flask, jsonify, render_template, request, send_file# 实例化 Flask 应用 app Flask(__name__)# 配置 MinIO 客户端 minio_client Minio("192.168.2.110:58894",access_ke…

Vue CLI 初始化脚手架

3.1. 初始化脚手架 3.1.1. 说明 Vue脚手架是Vue官方提供的标准化开发工具&#xff08;开发平台&#xff09;最新的版本是 4.x文档 Vue CLI 3.1.2. 具体步骤 如果下载缓慢请配置npm淘宝镜像npm config set registry http://registry.npm.taobao.org全局安装 vue/cli npm ins…

Python BP算法模板

BP算法模板 神经网络结构 三大基本结构 权重(轴突、树突) 权重的矩阵表示 数值(胞体) 数值处理方式 sigmoid 函数 def __sigmoid(self,x):return 1 / (1 np.exp(-x))sigmoid 的导函数 def __sigmoid_prime(self,x):return x * (1 - x)sigmoid 函数图像 其目的是将数值限制…