一个 24 通道 100Msps 逻辑分析仪
这是一个创建非常便宜的逻辑分析仪的项目,但其功能可与昂贵的商业分析仪相媲美。该分析仪可以以每秒 1 亿个样本的最高速度对多达 24 个通道进行采样,并且可以通过单个通道中的极性变化或多达 16 个通道形成的模式来触发。
该项目不仅包含硬件,还包含软件,它有一个多平台应用程序,可以可视化和分析信号。由于该设备非常独特,其协议与 Sigrok 等其他软件不兼容,但客户端还允许以兼容格式导出捕获的数据,其他程序可以读取该格式(甚至有一个 cmd 应用程序可以直接捕获到此如果您不想使用 GUI 应用程序,请格式化)。
该项目基于 Raspberry Pico,它支持其两个变体,即常规 Pico 和 Pico W,因此您甚至可以在没有物理连接到计算机的情况下使用该设备。
设计资料下载链接:逻辑分析仪24通道-100Msps硬件和软件设计资料
所需硬件
由于项目目标是创造尽可能便宜但有用的设备,我将最低要求保持在最低限度,最低限度到最简单的设备形式是......一个 Pico,没有别的,你可以对固件进行编程,将一些电线连接到它,就是这样,您就可以使用逻辑分析仪了。
这带来了一些限制,因为 Pico 只支持 3.3v IO,所以我设计了几个板,一个用于分析仪本身(主要是为了更容易连接/断开杜邦线并将其连接到辅助板)和一个电平转换器木板。
电平转换器板允许使用范围从 1.6v 到 5v 的电压,它默认参考 5v,但您可以重新配置它以接受外部参考电压。
此外,最新版本的分析仪板允许以菊花链方式连接分析仪,因此您最多可以链接其中的五个,并同时对多达 120 个通道进行采样,这是逻辑分析仪的大量通道。
准系统配置
要将 Pico(或其他基于 RP2040 的电路板,如 RP2040 Zero)用作逻辑分析仪,您需要短接触发引脚,这两个引脚保留用于快速和复杂的触发(有关固件和软件部分的更多信息)。
完成这些短路后,将 UF2 文件上传到板上,设备就可以使用了。
Pico 引出线是这样的:
和零引出线:
分析板
分析仪板包含非常少的组件:一个包含通道、接地、+3v3、+5v 和两个外部触发引脚的水平排针、两个用于菊花链分析仪的三针连接器(公头和母头)、一个电阻器、二极管和 Pico 本身。
外部触发引脚允许使用向设备请求的相同触发模式触发其他设备,如示波器,这仅适用于快速和复杂的触发,因为这些是使用 GPIO0/1 桥触发 PIO 机器的设备。
标头的引出线是这样的:
变速板
移位器板也很容易组装,它包含六个 TXU0104 电平转换器、一些去耦电容器、连接到逻辑分析仪和通道线的引脚/接头以及一个用于配置电压的跳线。
移位器分布在 PCB 的两侧以减小尺寸和走线长度(我尽量保持走线尽可能短以避免高频干扰,但这些也是长度匹配的以避免边缘情况下的不一致)但它们非常容易组装,我总是使用拖动方法手工焊接这些,但使用红外线烤箱焊接它们也应该没问题。
移位器的引脚排列与逻辑分析仪完全相同,除非您移除 5v 参考跳线,在这种情况下,5v 引脚成为外部参考电压源。
逻辑分析仪固件
固件
固件是使用标准 Pico SDK 和 Visual Studio Code 构建的。如果您想自己构建项目并且没有安装 SDK,我建议使用适用于 Windows 的 pico 安装程序,它使安装变得轻而易举,并为构建项目做好一切准备。对于其他操作系统,有不同的方法来设置 SDK,请参阅 Pico “入门”文档。
可以为不同的板构建固件,现在您可以使用 Pico、Pico W(带和不带 WiFi)和 RP2040 Zero。
要更改构建哪个文件,您需要修改两个文件:
构建设置文件
该文件包含选择哪个板将成为固件目标所需的定义:
<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--color-fg-default)"><span style="background-color:var(--color-canvas-subtle)"><code>#define FIRMWARE_VERSION "4_5"//Select the board type to build the firmware for
#define BUILD_PICO
//#define BUILD_PICO_W
//#define BUILD_PICO_W_WIFI
//#define BUILD_ZERO
</code></span></span></span></span>
根据需要取消注释目标板的定义。
如果你想知道为什么有人想在没有 WiFi 支持的情况下使用 W,很简单,为了减少设备的功耗,你可能想在没有连接到电源的笔记本电脑上使用它,在这种情况下,启用 WiFi 支持将浪费电能,这会减少电池的使用时间。
CMakeLists 文件
此文件包含项目构建过程的定义并指示包含哪些库。由于 W 功能基于外部模块,因此其使用需要包含一个库。
取决于你是否想在有或没有 WiFi 的情况下使用它,库是不同的(即使你不想启用 WiFi,你也需要包含一个库,因为 Pico 的 LED 通过此模块连接)并且它已配置在这个文件中。
<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--color-fg-default)"><span style="background-color:var(--color-canvas-subtle)"><code># Configure the correct cyw library based on what this is built for
# Regular pico: empty
# Pico W without WiFi support: pico_cyw43_arch_none
# Pico W with WiFi support: pico_cyw43_arch_lwip_poll
# set (CYW_LIB pico_cyw43_arch_lwip_poll)
# set (CYW_LIB pico_cyw43_arch_none)
</code></span></span></span></span>
如果您使用的是 W,请取消注释您需要的那个,否则请留下这些注释。
目前,唯一带有 CYW 模块的开发板是 Pico-W,但如果将来另一块开发板添加此模块,您将需要按照说明启用它。
添加对不同板的支持。
RP2040 已成为一种非常流行的微控制器,因此其他制造商已开始创建自己的电路板,每一种都具有不同的特性。
为了支持任何主板,固件已使用定义系统进行了修改,该系统简化了为其中任何一个配置它的任务。
定义新板的第一步是创建定义集。为此,您需要编辑电路板定义文件。
在那里添加一个新的#elif
名称#define
,您的板将使用,并在其中添加板的所有定义:
<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--color-fg-default)"><span style="background-color:var(--color-canvas-subtle)"><code>This defines the name sent to the software
#define BOARD_NAME "PICO"If defined the device supports complex, fast and external triggers. To support these kind of triggers two channels need to be
reserved and the first 16 channels need to be sequential.
#define SUPPORTS_COMPLEX_TRIGGERStablishes the channel base GPIO, this is the first GPIO that will be used as a channel.
This is not the GPIO mapped to channel 1 but the first GPIO used as an input channel.
#define INPUT_PIN_BASE 2Complex/fast/ext trigger output pin (if enabled)
#define COMPLEX_TRIGGER_OUT_PIN 0Complex/fast/ext trigger input pin (if enabled)
#define COMPLEX_TRIGGER_IN_PIN 1If defined, the onboard led is a led connected to a GPIO
#define GPIO_LEDIf defined, the onboard led is a led connected to a CYGW module (for the Pico W)
#define CYGW_LEDIf defined, the onboard led is a RGB led connected to a GPIO
#define WS2812_LEDDefines the used GPIO used for the GPIO and WS2812 led types
#define LED_IO 25If defined enables the Pico W WiFi module
#define USE_CYGW_WIFI
</code></span></span></span></span>
请记住,至少需要定义一种 LED 类型。
创建电路板定义后,您将需要添加通道映射。搜索这个:
<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--color-fg-default)"><span style="background-color:var(--color-canvas-subtle)"><code>//Pin mapping, used to map the channels to the PIO program
#if defined (BUILD_PICO)const uint8_t pinMap[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,27,28,COMPLEX_TRIGGER_IN_PIN};
#elif defined (BUILD_PICO_W)const uint8_t pinMap[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,27,28,COMPLEX_TRIGGER_IN_PIN};
#elif defined (BUILD_PICO_W_WIFI)const uint8_t pinMap[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,27,28,COMPLEX_TRIGGER_IN_PIN};
#elif defined (BUILD_ZERO)const uint8_t pinMap[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28,29,22,23,24,25,COMPLEX_TRIGGER_IN_PIN};
#endif
</code></span></span></span></span>
要添加映射,请#elif
使用您在板定义中使用的定义名称创建一个新条目。您必须映射所有通道,如果您的电路板没有暴露足够的引脚,只需重复您已经使用的通道之一,这可以防止软件出现问题,通道的数据将被重复而不会产生任何其他后果。
一旦您的电路板被定义,您就可以像任何其他电路板一样编译启用它的固件。
主窗口
让我们看一下软件的主窗口及其部分。
- 1:文件菜单,可以管理抓包文件。
- 2:协议分析器菜单,允许调用已安装的协议分析器。
- 3:网络设置,允许配置一个WiFi设备的网络设置。
- 4:刷新按钮,刷新可用COM端口列表。
- 5:端口选择器,选择要连接的设备。
- 6:打开/关闭设备按钮,连接或断开设备。
- 7:设备标识,显示连接到软件的设备类型。
- 8:重复捕捉按钮,重复上次相同参数的捕捉。
- 9:捕捉按钮,打开捕捉对话框。
- 10:中止按钮,取消正在运行的捕获。
- 11:频道查看器,显示捕获的频道信息。
- 12:样本查看器,显示捕获的样本。
- 13:样本查看器位置,滑动样本查看器。
- 14:Sample marker,显示显示哪些样本,用于对样本进行操作。
- 15:协议分析数据,这是协议分析器数据的显示方式。
- 16:样本查看器选择器,选择在屏幕上显示多少个样本。
- 17:Capture info,显示当前捕获是如何实现的信息。
一切都很简单,最基本的用法是连接到设备,点击“捕获”,配置捕获对话框并接受它,设备将开始捕获,一旦捕获完成,样本将显示在示例查看器。但当然,这是最基本的用法,该软件允许做更多的事情,所以我们将逐节探讨。
现在我们将查看应用程序的所有菜单,了解我们可以访问哪些功能,然后我们将了解如何使用设备的所有功能。
文件菜单
文件菜单允许管理捕获文件。LogicAnalyzer 允许您存储捕获以及有关捕获的所有信息,这对于共享或比较捕获非常有用,并且为了管理这些文件,我们使用“文件”菜单。
文件菜单有以下选项:
- 1:新建...,创建一个新的捕获文件。它是使用“信号描述语言”(从现在开始使用 SDL)创建的。
- 2:打开...,打开一个现有的捕获文件。
- 3:保存...,保存当前捕获,存储所有关于它的信息和创建的区域。
- 4:导出...,将当前捕获的数据导出到与 PulseView 等其他程序兼容的 CSV 文件。
- 5:退出,关闭应用程序。
协议分析器菜单
协议分析器菜单允许调用协议分析器或清除示例查看器中的覆盖信息。请记住,此菜单是动态的,它将显示安装在“analyzers”文件夹中的分析器,您可以创建自己的分析器,它们将显示在此处。此外,此菜单可能会更改其顺序,因为它是根据找到文件的顺序填充的。现在让我们看看默认预装的那些。
- 1:I2C,允许分析I2C协议。
- 2:SPI,允许分析SPI协议。
- 3:串口:允许分析RS-232协议
- 4:清除分析数据:清除协议分析仪覆盖在样本查看器上的所有数据。
网络设置菜单
此菜单只有一个选项,“更新网络设置”,并且只有在软件通过 USB 连接到 Pico-W 分析仪时才会启用。顾名思义,它会更新设备的网络设置。
连接到设备
通过 USB 连接到单个设备非常简单,只需从下拉列表中选择设备并按“打开”即可。
但是还有另外两种设备类型,“网络”设备和“多设备”设备。
网络设备
这用于通过 WiFi 连接到 Pico-W。一旦我们选择它并按“打开”,这将向我们展示网络设置对话框。
这个对话框非常简单,我们介绍设备的 IP 地址(我们必须在使用网络设置菜单之前配置它)、端口,然后我们按“接受”,如果设备可用,它将连接。
多设备设备
这用于连接最多五个以菊花链连接的设备,第一个设备将充当主设备,负责检测触发条件(只允许复杂和快速的触发) , 其他四个将充当从机,并在主机检测到触发后进行捕获。
首先,我们必须选择主设备,然后启用我们在菊花链中连接的尽可能多的设备并配置它们的设置。如果我们选择网络设备,我们将看到网络设置对话框,引入的设置将显示在设备下拉菜单的旁边。
设置好所有设备后,我们可以按“接受”,如果一切正常,我们将看到设备显示为“MULTI_ANALYZER_(version)”。请注意,所有设备必须共享相同的设备版本,如果您在设备中编程了不同的版本,驱动程序将拒绝将它们连接为多设备链。
捕获
现在我们已经熟悉了连接过程,让我们开始真正的交易,捕获。
一旦我们按下“捕获”按钮,我们将看到“捕获”对话框。
基本参数
在对话框的第一行,我们将看到捕获的基本参数:频率(每秒样本数)、触发前样本和触发后样本。
频率选择器允许我们选择每秒捕获的样本数量,范围从 3100 (3.1Khz) 到 100000000 (100Mhz)。
接下来,我们将在触发发生之前存储大量样本,这对于在满足触发条件之前验证通道状态非常有用。
最后,我们有大量的样本将在触发发生后存储,这将是我们捕获的主要数据。
我们可以捕获的样本数量将取决于我们捕获的数量和通道。这些限制是:
- 最多通道 8(模式 0)
- 最少 2 个预触发样本
- 最多 98303 个预触发样本
- 最少 512 个后触发样本
- 最多 131069 个后触发样本
- 最多通道 16(模式 1)
- 最少 2 个预触发样本
- 最多 49151 个预触发样本
- 最少 512 个后触发样本
- 最多 65533 个后触发样本
- 最多通道 24(模式 2)
- 最少 2 个预触发样本
- 最多 24576 个预触发样本
- 最少 512 个后触发样本
- 最多 32765 个后触发样本
此规则同样适用于多设备,但考虑到使用最高通道的设备,例如,如果我们有两个设备,我们有 48 个可用通道,通道 1 到 24 是第一个设备通道,通道 25 到 48 是第二个设备通道,范围从 1 到 24。例如,如果我们选择通道 1 和通道 48,我们将使用第一个设备的通道 1 和第二个设备的通道 24,因此选择的捕获模式将是模式 2。
频道
接下来我们有频道选择器,这允许我们选择我们想要捕获的频道。您可以随机选择要使用的通道,但请记住模式选择所应用的规则。除了为捕获启用通道外,我们还可以命名通道,这将在通道编号后显示在通道查看器中,并且还将存储在保存的任何捕获文件中(这对于记住哪个信号是哪个信号非常有用,如果我们存储捕获以供以后分析)。
触发器
最后我们有触发器选择器。它分为两个不同的部分,边缘触发部分和模式触发部分。
边沿触发是最简单但最快的,它会在通道取高值或低值时触发。如果我们选择“边缘”单选按钮,我们将能够选择 24 个通道之一作为触发通道,我们也可以选择边缘是正的还是负的(高或低)。请注意,如果我们使用多设备,则此触发模式将不可用,这仅适用于模式触发器。
模式触发要复杂得多,我们最多可以使用 16 个通道而不是单个通道,当所有指定的通道形成一个具体的模式时它就会满足,但这也比边沿触发慢并且有一些限制。首先,我们必须指定基本通道,这是用于模式的第一个通道。它的范围可以从通道 1 到通道 16,并且模式不能超过通道 16,因此如果我们使用通道 8 作为基本通道,我们有 9 个通道可用于模式,如果我们选择通道 2,我们有 15 个通道可用于模式, ETC。
我们还可以指定“快速”模式,这种模式限制更多但也更精确,模式最多只允许五个通道,但触发器将以 100Mhz 运行。如果我们不选择快速模式,触发器将以大约 66Mhz 的频率运行,因此请记住这一点。这应该不是问题,除非触发条件持续的时间少于一个周期,因为我们可以选择在触发之前和之后捕获多少样本,我们可以以一种我们可以确保不会安全的方式设置它不错过任何重要数据。这也是驱动本身补偿的,所以通常无论我们选择哪一个都会有大约+-1 sample的误差。
模式触发器具有这些限制,因为它使用 pico 的辅助 PIO 单元来检查触发模式,而边沿触发器使用相同的程序来捕获和检测触发器。这就是为什么我们还必须将 GPIO0 和 GPIO1 捆绑在一起,触发程序通知捕获程序上升 GPIO0 的触发条件,捕获程序使用 GPIO1 读取它。
运行捕获
一旦我们设置了所有参数,我们就可以开始捕获了。按“接受”,捕获对话框将关闭,设备将开始闪烁,等待触发条件得到满足。如果出于某种原因我们想要取消捕获,“中止”按钮将被启用并停止捕获。
捕获完成后,样本将显示在屏幕上,样本查看器将跳转到触发发生的位置,并将调整屏幕上显示的样本数量。
关于 Multidevice 设备的说明
由于链中的每个设备都运行自己的时钟,因此它们之间可能存在一点偏差,该偏差可能为 +-1 个样本,因此请将其考虑在内。
目录
所需硬件
准系统配置
分析板
变速板
逻辑分析仪固件
固件
构建设置文件
CMakeLists 文件
添加对不同板的支持。
主窗口
文件菜单
协议分析器菜单
网络设置菜单
连接到设备
网络设备
多设备设备
捕获
基本参数
频道
触发器
运行捕获
关于 Multidevice 设备的说明
分析协议
I2C分析仪
SPI分析仪
串口分析仪
编辑捕获
基本编辑
转移
测量
地区
创建样本
分析协议
正如我们所见,该程序默认包括三个协议分析器:I2C、SPI 和串行。一旦我们加载了一个捕获,我们就可以根据需要运行其中的多个,我们可以运行相同的分析器或多个不同的分析器来捕获一个捕获并且信息将被合并,这允许每个示例一次捕获三个 SPI 设备并分析它们在同一个捕获中,或者分析一个 SPI 设备和一个串行设备,等等。
I2C分析仪
如果我们选择 I2C 分析器,我们将看到配置对话框。
要使用分析仪,您需要指定哪个通道是 SDC 通道和 SDA 通道(时钟和数据)。该对话框看起来有点奇怪,但这是有原因的,所有协议分析器都是使用通用接口实现的,如果您想知道它们是如何实现的。
一旦我们选择了两个通道,分析器就会运行并向我们显示有关捕获的信息。
分析器将显示开始和停止条件、操作请求、地址,并将在每个字节中包含它是否被确认以及是否发生帧错误。条件将显示在“<”和“>”之间,“A”表示“已确认”,“N”表示“未确认”,“F”表示“帧错误”。
SPI分析仪
选择 SPI 分析器将打开 SPI 分析器对话框。
请注意此对话框现在如何适应得更好,并注意右侧出现了一个滚动条,这是因为所有设置都不适合对话框。
要配置分析仪,我们必须提供:CS、CK、MISO 和 MOSI 通道、移位方向(LSB 到 MSB 或 MSB 到 LSB)CPOL(极性)和 CPHA(采样边沿)。CS、MISO 和 MOSI 通道是可选的,如果未指定 CS 通道,则分析仪假定始终选择该设备,对于 MISO 和 MOSI 也是如此,如果未提供其中之一,则不会处理(至少其中之一必须选择 IO 通道)。CK 通道是必需的。
一旦我们选择了参数,分析器就会向我们显示有关捕获的数据。
SPI 协议实际上是已实现协议中最简单(但最安全)的,它是完全同步的,主从数据有不同的线路,因此它仅提供有关已读取数据的信息。
串口分析仪
选择串行分析器将打开串行分析器对话框。
要配置分析仪,我们必须提供:RX 和 TX 通道、极性(真正的 RS-232 物理层使用负极性,但现在更常见的是使用正极性的 TTL 物理层)、数据位、奇偶校验、停止位和波特。RX 和 TX 是可选的,但至少必须提供一个,其余所有参数都是必需的。
在继续之前,我必须指出,除非捕获没有正确完成,否则您将遇到帧错误。RS-232 是异步的,所以没有时钟信号,因为分析仪会尝试根据采样频率和指定的波特率计算时钟,但如果您不捕获传输波特率的倍数,则很有可能帧错误将被检测到,因为它会读取一些超出帧位置的位。
输入所有参数后,将显示分析数据。
分析器将显示分析的数据,如果发现任何帧错误,它也会在数据包中显示为“F”。
编辑捕获
有时编辑捕获、删除无用样本、插入缺失数据、重复样本等会很有用。为此,我们将使用样本标记中的上下文对话框。
基本编辑
首先我们有插入选项,这将允许在我们点击的地方插入一些样本。这将打开创建示例对话框,这允许使用 SDL 语言创建示例。
接下来我们有常规的编辑选项:剪切、复制、粘贴和删除。要使用剪切、复制和删除功能,首先我们必须在样本标记中选择一个范围,您可以在样本标记上单击鼠标左键并拖动,或者您可以放置临时标记(左键单击样本标记),转到您所在的位置想要结束选择并使用 Ctrl+左键单击来创建一个范围(您也可以在单击机智 Ctrl+左键后拖动)。要粘贴一组样本,您必须先剪切或复制一系列样本。
转移
下一个编辑操作是 Shift,这将移动一些通道的大量样本。
移动将发生在我们单击以调出上下文菜单的示例中,我们可以根据需要移动任意数量的频道。要从列表中选择/取消选择一个通道,您可以单击它,或者您可以按住 Ctrl 并单击并拖动以同时反转多个通道的选择状态。
我们还可以选择向左或向右移动,以及将在移动后的样本中插入的内容:低值、高值或旋转样本。
测量
这不是编辑功能,但它包含在同一菜单中,因为它需要选择一系列样本。如果我们选择“Measure”选项,Measure 对话框将弹出有用的信息,例如所选样本的数量、样本的持续时间、频率等。
地区
最后我们有区域功能。有时突出显示样本区域很有用,也许您想与某人共享捕获并显示哪个区域很重要,或者您可能想保存文件以备后用并指出一些重要区域捕获。
为此,我们可以创建一个区域,为此我们首先需要选择一系列样本,打开上下文菜单,然后选择“创建区域”。这将带来区域对话框。
要创建一个区域,我们可以给它起一个名字并选择一种颜色。一旦我们选择了参数,该区域将显示在示例查看器中。
如果我们想删除一个区域,右键单击该区域上方的样本标记,将启用“删除区域”菜单,单击它,它将被删除。
如果我们编辑样本,区域将被调整,如果我们删除属于一个区域的样本,该区域将被缩短,如果我们插入该区域将被扩展,如果该区域的所有样本都被删除,该区域也将被删除。
创建样本
LogicAnalyzer 结合了一种创建样本的强大方法,即 SDL 语言。这允许以一种简单的方式从头开始修补和创建捕获文件。该程序甚至包含一个用于 SDL 语言的语法着色编辑器,这使得创建这些文件变得非常容易。
但为什么?为什么创建这些样本如此重要?好吧,这确实与将来添加的新功能有关,即重播捕获文件的可能性。
看看它的实际效果。
这里我们有三个不同的部分:
- Ammount 选择器,指定我们要创建多少个样本,仅在“插入”模式下可用。
- 频道信息,这里我们可以看到频道号和名称
- 信号查看器,这是已生成信号的表示
要生成信号,我们单击通道的信号查看器,这将带来信号合成器,如果我们已经为通道加载或创建 SDL,它将自动加载。
相关文章:
一个 24 通道 100Msps 逻辑分析仪
这是一个创建非常便宜的逻辑分析仪的项目,但其功能可与昂贵的商业分析仪相媲美。该分析仪可以以每秒 1 亿个样本的最高速度对多达 24 个通道进行采样,并且可以通过单个通道中的极性变化或多达 16 个通道形成的模式来触发。 该项目不仅包含硬件࿰…...
使用Process Explorer和Dependency Walker排查C++程序中dll库动态加载失败问题
目录 1、exe主程序启动时的库加载流程说明 2、加载dll库两种方式 2.1、dll库的隐式引用...
网工Python:如何使用Netmiko的SCP函数进行文件传输?
在网络设备管理中,传输配置文件、镜像文件等是经常需要进行的操作。Netmiko是一个Python库,可用于与各种网络设备进行交互,提供了一些用于传输文件的函数,其中包括SCP(Secure Copy Protocol)函数。本文将介…...
题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和--不能完全通过,最好情况通过67.
原题链接: 题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和 https://www.dotcpp.com/oj/problem3166.html 致歉 害,首先深感抱歉,这道题还是没有找到很好的解决办法。目前最好情况就是67分。 这道题先这样跳过吧,当然以后还…...
ChatGPT- OpenAI 的 模型(Model) 介绍
ChatGPT的火爆程度大家都知道了,该章节我们来了解一下 ChatGPT 一个关键概念 - 模型(Model)。主要是为大家介绍一下在 OpenAI 中,究竟有哪些模型可以使用。 在后续的章节,我们会分单独的小章节逐一的为大家介绍各个不同模型的调用以及接口参…...
X 态及基于 VCS 的 X-Propagation 检测
🔥点击查看精选 IC 技能树系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#…...
数据库之事务隔离级别详解
事务隔离级别详解 一、事务的四大特性(ACID)1. 原子性(atomicity):2. 一致性(consistency):3. 隔离性(isolation):4. 持久性(durability): 二、事务的四种隔离级别1. 读未提交(Read uncommitted)࿱…...
守护进程、僵尸进程、孤儿进程
守护进程、僵尸进程、孤儿进程 守护进程(Daemon Process) 定义 守护进程又称Daemon进程(精灵进程),是Linux中的后台服务进程。 它的生命周期较长,通常独立于控制终端并且周期性地执行某种任务或者等待处…...
软件设计师笔记
软件设计师笔记 计算机组成与体系结构 数据的表示、计算机结构、Flynn分类法、CISC与RISC、流水线技术、存储系统、总线系统、可靠性、校验码 1. 数据的表示 (一)进制转换 R进制转十进制使用按权展开法: 十进制转R进制使用短除法 二进制…...
4_用dockerfile制作镜像
Docker 镜像原理 思考: Docker 镜像本质是什么? Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G? Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MBÿ…...
肝一肝设计模式【四】-- 建造者模式
系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 文章目录 系列文章目录前言一、什么是建造者模式二、举个栗子三、静态内部类写法四、开源框…...
从设计到产品
从设计到产品 最近上的一些课的笔记,从 0 开始设计项目的角度去看产品。 设计系统 设计系统(design system) 不是 系统设计(system design),前者更偏向于 UI/UX 设计部分,后者更偏向于实现部分。 个人觉得,前端开发与 UI/UX 设…...
《疯狂Python讲义》值传递的细节
函数的参数包含着整个程序的规范性,之前还是没有那么去注意重要的细节,读完书中函数值传递篇章,还是有所收获的。 参数有两种形式,一种是形参一种是实参,形参可以理解为实参的载体,函数当中的关键词也是描…...
【7. ROS 中的 IMU 惯性测量单元消息包】
欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】🥳🥳🥳 2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空&#…...
pcie m.2固态硬盘装机后无法识别到启动盘
1、第一种情况《系统版本过低》 原因: 使用m.2固态硬盘的电脑,最好安装iwn8.1以上的系统,因为win7系统及其win xp系统 没有自带NVME驱动。 搞定办法: 比较简单的方式就是直接开运行快启动u盘启动盘制作工具将系统升级到win10系…...
Java Web应用开发 ——第四章:JavaBean技术测验
一.单项选择题(共13题,55.9分) 1 在 JSP 中调用 JavaBean 时不会用到的标记是:( ) A、 < jsp:javabean> B、 < jsp:useBean> C、 < jsp:setProperty> D、 < jsp:getProperty> 正确答案&a…...
CTF权威指南 笔记 -第二章二进制文件- 2.4 -动态链接
目录 静态文件的缺点 动态链接 位置无关代码 延迟绑定 _dl_runtime_reslove 函数定义 深入审视 静态文件的缺点 随着可执行文件的增加 静态链接带来的浪费空间问题就会愈发严重 如果大部分可执行文件都需要glibc 那么在链接的时候就需要把 libc.a链接进去 如果一个libc…...
C++:计算机操作系统:多线程:高并发中的线程
高并发中的线程 一切要从CPU说起PC 程序计数器从CPU到操作系统从进程到线程 从这篇开始,我将会开启高性能,高并发系列,本篇是给系列的开篇,主要关注 多线程以及线程池。 一切要从CPU说起 你可能会有疑问,讲多线程为何…...
大数据Doris(十一):Aggregate 数据模型
文章目录 Aggregate 数据模型 一、导入数据聚合 二、保留明细数据...
osg::Drawable类通过setDrawCallback函数设置回调函数的说明
osg::Drawable类可以通过该类的setDrawCallback函数设置回调函数类对象。被设置的回调类对象必须从osg::Drawable::DrawCallback类派生,并重写drawImplementation函数,以实现自己特定的需求。这个回调函数在每次帧事件中都会被调用(如:在帧的…...
Python基础合集 练习17(类与对象)
class Dog: pass papiDog() print(papi) print(type(papi)) 构建方法 创建类过后可以定义一个特殊的方法。在python中构建方法是__init__(),init()必须包含一个self参数 class pig(): #def__init__(self) -> None: print(‘你好’) pipgpig() 属性和方法 cl…...
再多猜一次就爆炸(小黑子误入)
目录 猜数字游戏 游戏设计思路 1.电脑随机生成一个数 2.猜数字 3.输入我是ikun,泰裤辣! 否则电脑将在一分钟后关机 游戏运行效果 源码 代码分析 代码实现关键语句 strcmp() rand()与srand() 时间戳time() 寄语 猜数字游戏 游戏设计思路 1.电脑随机生…...
图像超分辨率简单介绍
文章目录 图像超分辨率简单介绍什么是图像超分辨率?常见的图像超分辨率算法插值算法基于边缘的图像重建算法局部线性嵌入(LLE)拉普拉斯正则化 基于深度学习的超分辨率算法超分辨率CNN超分辨率GAN 步骤1. 收集数据2. 选择算法3. 训练模型4. 测…...
【Liunx】进程的程序替换——自定义编写极简版shell
目录 进程程序替换[1~5]1.程序替换的接口(加载器)2.什么是程序替换?3.进程替换的原理4.引入多进程5.系列程序替换接口的详细解析(重点!) 自定义编写一个极简版shell[6~8]6.完成命令行提示符7.获取输入的命令…...
c++标准模板(STL)(std::array)(三)
定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起 std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组…...
c#笔记-创建一个项目
创建一个项目 创建控制台程序 在你安装完成Visual Studio后打开它,你会的到一个启动窗口 点击创建新项目,选择右上角c#的没有Framework的控制台应用。 项目名称,位置自己随意。 目标框架选择NET7.0。 项目创建完成后应该你的界面应该类似…...
Photoshop如何使用图像调色之实例演示?
文章目录 0.引言1.将一张偏冷调的图像调整成暖调2.将图像调整成不同季节色彩倾向3.变换花朵的颜色4.创建人像轮廓风景5.修饰蓝天白云6.调换花草颜色 0.引言 因科研等多场景需要进行绘图处理,笔者对PS进行了学习,本文通过《Photoshop2021入门教程》及其配…...
IDEA中使用Git提交代码提示:您即将把CRLF行分隔符提交到Gt仓库。 建议将core.autocrlf Git特性设置为trUe,以免发生行分隔符问题。
IDEA中使用Git提交代码提示:您即将把CRLF行分隔符提交到Gt仓库。 建议将core.autocrlf Git特性设置为trUe,以免发生行分隔符问题。 问题背景: 在IDEA中,使用Git提交代码到远程仓库时,结果弹出一个警告窗口 问题原因: …...
ArduPilot之开源代码LibrarySketches设计
ArduPilot之开源代码Library&Sketches设计 1. 简介1.1 Core libraries1.2 Sensor libraries1.3 Other libraries 2. 源由3. Library Sketches设计3.1 设计框架3.2 Example Sketches3.3 AP_Common Sketches3.3.1 配置sitl环境3.3.2 编译AP_Common3.3.3 运行AP_Common3.3.4 代…...
第一章:概述
1,因特网概述 1.网络、互联网和英特网 网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。 多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因此,互联网是“网络的网络…...
山东省住房和城乡建设厅网站/推广普通话手抄报内容50字
昆腾公司(NYSE:QTM)近期公布了截至2013年12月31日的2014财年第三财季的初步业绩。公司预计本财季的收入在1.45亿至1.46亿美元之间,高于2013年10月23日发布的业绩中预测的最高值。这要特别归功于Scalar磁带自动化系统和DXi重复数据删除设备销售收入的持续增长&#x…...
施工企业财务经理年终总结/网站排名优化培训课程
全网最全最新最细的MYSQL5.7下载安装图文教程 一、MYSQL两种安装包格式 MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的。zip格式相当于绿色版,不需要安装,只需解压缩之后就可以使用了,但是要进行配置。msi…...
大连开发区网站建设/百度公司官方网站
在一次数据恢复之后,遇到了ORA-00600 kcbz_check_objd_typ_3错误,在此记录一下。首先 kcbz_check_objd_typ_3 这个错误的含义是: 当Oracle在检查内存中的数据块时,发现数据块上的对象号是错误的,随之抛出kcbz_check_ob…...
怎么才能注册做网站/网站设计优化
下载android应用的apk文件变成了zip--网上转载的解决方案 下载android应用的apk文件变成了zip--网上转载的解决方案 解决方案一、 最近把开发的android应用放在公司网站上,用IE下载后遇到了问题:扩展名.APK文件点击下载后却变成了.ZIP文件,…...
做问卷调查用哪个网站好/青岛seo整站优化哪家专业
VMware安装后主机未连接虚拟网卡VMnet1和VMnet8 安装VMware后,打开虚拟网络编辑器 发现VMnet1和VMnet8 主机未连接 情况如下: 1、还原默认还是显示未连接 2、发现VMnet1和VMnet8的主机连接还是没有连接 解决方法 首先卸载VMware 并且将C\ProgramData下的…...
常州低价网站建设公司/新媒体培训
*本文作者:yangyangwithgnu,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。在逻辑漏洞中,任意用户密码重置最为常见,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记…...