Ubuntu下搭建Black Magic Probe (BMP) 编译环境

版本和环境信息如下:

PC平台: Windows 11 专业版

虚拟机运行平台:Oracle VM VirtualBox 7.1.6

Linux虚拟机: Ubuntu24.04

Debug调试器:

BlackMagicProbe(BMP) 开源调试器:WeAct STM32F103CBT6 BluePill 核心板 WeAct STM32F411CEU6 BlackPill 核心板

USB-TO-TTL: USB转TTL串口小板

ARM Linux GDB: arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz

BlackMagicProbe固件:blackmagic-firmware

 

1. 背景

在学习Zephyr 实时操作系统项目的时候,接触到一款高效又 经济的调试开发神器--Black Magic Probe(BMP)。这是一款专为ARM Cortex微控制器设计的JTAG/SWD探针,其独特的魅力在于内置了GDB服务器,从而允许开发者直接利用强大的GNU Debugger进行远程调试,简化了传统嵌入式开发中的调试流程。

Black Magic Probe之所以能在众多调试工具中脱颖而出,得益于它简洁的设计理念和对开源生态的支持。它需要的开发环境包括一系列标准库,如libbsd-dev, libfontconfig-dev, libgtk-3-dev, libusb-1.0-dev以及glfw-3.3,这些是保证其在Linux系统上无缝运行的基础。通过这样的配置,BMP不仅实现了与硬件的紧密交互,也为开发者提供了图形界面与命令行双重支持,极大地丰富了调试手段。

 

2. 源码与固件

调试器固件:https://github.com/koendv/blackmagic-firmware (BMP release固件库)

调试器源码:https://github.com/blackmagic-debug/blackmagic (BMP固件与BMDA程序库)

调试器上位机程序:https://github.com/compuphase/Black-Magic-Probe-Book (不太好用)

2.1. 调试器源码编译

2.1.1. 编译器依赖标准库安装

# 依赖标准库
sudo apt-get install -y libbsd-dev libfontconfig-dev libgtk-3-dev libusb-1.0-0 libftdi1 libcapstone4 libgpiod2 libhidapi-hidraw0 libjaylink0 libjim0.79 pkg-config
# STM32烧录工具
# stm32flash ISP烧录工具
# dfu-util USB烧录工具
sudo apt-get install -y dfu-util stm32flash
# 编译所需工具
# 解压GCC工具
tar -xzf arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz -C ~/workspace/zephyr-gdb/arm-gnu-toolchain-14.2/
# 添加ARM工具链到系统路径
export PATH=$HOME/workspace/zephyr-gdb/arm-gnu-toolchain-14.2/bin:$PATH
pip install meson==0.63.0 ninja==1.10.2 -i https://pypi.mirrors.ustc.edu.cn/simple/

2.1.2. 生成编译配置

要构建固件,您需要配置固件将运行的探测硬件,以及要使用的交叉编译工具链。

# 配置固件配置文件
user@desktop:~/workspace/blackmagic/cross-file$ ls -al
total 88
drwxrwxr-x  2 polaris polaris 4096  6月  1 16:39 .
drwxrwxr-x 14 polaris polaris 4096  6月  1 16:42 ..
-rw-rw-r--  1 polaris polaris  628  6月  1 15:48 96b_carbon.ini
-rw-rw-r--  1 polaris polaris  443  6月  1 15:48 arm-none-eabi.ini
-rw-rw-r--  1 polaris polaris  662  6月  1 15:48 blackpill-f401cc.ini
-rw-rw-r--  1 polaris polaris  662  6月  1 15:48 blackpill-f401ce.ini
-rw-rw-r--  1 polaris polaris  662  6月  1 15:48 blackpill-f411ce.ini
-rw-rw-r--  1 polaris polaris  565  6月  1 15:48 bluepill.ini
-rw-rw-r--  1 polaris polaris  578  6月  1 15:48 ctxlink.ini
-rw-rw-r--  1 polaris polaris  574  6月  1 15:48 f072.ini
-rw-rw-r--  1 polaris polaris  612  6月  1 15:48 f3.ini
-rw-rw-r--  1 polaris polaris  630  6月  1 15:48 f4discovery.ini
-rw-rw-r--  1 polaris polaris  624  6月  1 15:48 hydrabus.ini
-rw-rw-r--  1 polaris polaris  636  6月  1 15:48 launchpad-icdi.ini
-rw-rw-r--  1 polaris polaris  827  6月  1 15:48 native.ini
-rw-rw-r--  1 polaris polaris  697  6月  1 15:48 native-remote.ini
-rw-rw-r--  1 polaris polaris  638  6月  1 15:48 native-riscv.ini
-rw-rw-r--  1 polaris polaris  760  6月  1 15:48 native-st-clones.ini
-rw-rw-r--  1 polaris polaris  759  6月  1 15:48 native-uncommon.ini
-rw-rw-r--  1 polaris polaris  615  6月  1 15:48 stlink.ini
-rw-rw-r--  1 polaris polaris  624  6月  1 15:48 stlinkv3.ini
-rw-rw-r--  1 polaris polaris  566  6月  1 15:48 swlink.ini

该项目包含一些可配置的构建选项,这些选项会影响生成的二进制文件。您可以通过以下方式为相应的探针配置固件或启用某些功能。

本文主要介绍bluepill.ini和blackpill-f401cc.ini。

bluepill.ini文件解析

# This a cross-file for the bluepill probe, providing sane default options for it.
# 编译固件需要的gcc工具链
[binaries]
c = 'arm-none-eabi-gcc'
cpp = 'arm-none-eabi-g++'
ld = 'arm-none-eabi-gcc'
ar = 'arm-none-eabi-ar'
nm = 'arm-none-eabi-nm'
strip = 'arm-none-eabi-strip'
objcopy = 'arm-none-eabi-objcopy'
objdump = 'arm-none-eabi-objdump'
size = 'arm-none-eabi-size'
# BlackMagicProbe使用的是核是ARM
[host_machine]
system = 'bare-metal'
cpu_family = 'arm'
cpu = 'arm'
endian = 'little'[project options]
# 运行 BMD(BlackMagic-Debug) 固件的硬件平台
probe = 'bluepill'
# 启用调试和烧写的目标平台和架构如下
targets = 'cortexm,lpc,nrf,nxp,renesas,rp,sam,stm,ti'
# 启用 Real-Time Transfer RTT(实时传输)支持
rtt_support = false
# 需要编译black magic debug bootloader
bmd_bootloader = true

blackpill-f401cc.ini文件解析

# This a cross-file for the blackpill-f401cc probe, providing sane default options for it.
# 编译固件需要的gcc工具链
[binaries]
c = 'arm-none-eabi-gcc'
cpp = 'arm-none-eabi-g++'
ld = 'arm-none-eabi-gcc'
ar = 'arm-none-eabi-ar'
nm = 'arm-none-eabi-nm'
strip = 'arm-none-eabi-strip'
objcopy = 'arm-none-eabi-objcopy'
objdump = 'arm-none-eabi-objdump'
size = 'arm-none-eabi-size'
# BlackMagicProbe使用的是核是ARM
[host_machine]
system = 'bare-metal'
cpu_family = 'arm'
cpu = 'arm'
endian = 'little'[project options]
# 运行 BMD(BlackMagic-Debug) 固件的硬件平台
probe = 'blackpill-f401cc'
# 启用调试和烧写的目标平台和架构如下
targets = 'cortexar,cortexm,riscv32,riscv64,apollo3,at32f4,ch32,ch579,efm,gd32,hc32,lpc,mm32,nrf,nxp,puya,renesas,rp,sam,stm,ti,xilinx'
# 启用 Real-Time Transfer RTT(实时传输)支持
rtt_support = true
# 需要编译black magic debug bootloader
bmd_bootloader = true

不难发现blackpill-f401cc比bluepill支持设备多很多,是应为F401的Flash和RAM都比F103大。

这里我选择的是WeAct STM32F103CBT6 BluePill 核心板作为BlackMagicProbe调试器。所以我选择bluepill.ini进行编译

# 配置预编译
meson setup build --cross-file cross-file/bluepill.ini

配置预编译会检测编译的依赖是否准备齐全。

问题: 解决github https下载失败超时问题

git config --local url."git@github.com:".insteadOf "https://github.com/"

这样会将所有 https://github.com/ 开头的 URL 自动替换为 SSH 协议

meson setup build --cross-file cross-file/bluepill.ini
meson setup build --cross-file cross-file/blackpill-f401cc.ini

meson setup build --cross-file cross-file/bluepill.ini配置构建解析

 


meson setup build --cross-file cross-file/bluepill.ini
......
......
Black Magic Debug 2.0.0-rc2Remote ProtocolRISC-V acceleration               : NO
# 支持调试的CPU厂家TargetsCortex-A/R support                : NOCortex-M support                  : YESRISC-V 32-bit support             : NORISC-V 64-bit support             : NOArterytek parts                   : NOAmbiq Apollo3 parts               : NOWinChipHead CH32 parts            : NOWinChipHead CH579 parts           : NOEnergy Micro parts                : NOGigaDevice parts                  : NOHC32 parts                        : NOLPC series parts                  : YESMindMotion parts                  : NOnRF series parts                  : YESKinetis series parts              : YESPuya PY32 series parts            : NORenesas parts                     : YESRaspberry Pi MCUs (RP2040, RP2350): YESATSAM series parts                : YESSTM32 (and clones) parts          : YESTexas Instruments parts           : YESXilinx parts                      : NO
# 作为BlackMagicProbe硬件的固件信息ProbeName                              : BluePillPlatform                          : STM32F1Bootloader                        : Black Magic Debug BootloaderLoad Address                      : 0x8002000SWIM as UART                      : NO
# 支持调试功能Black Magic Debug# 启用调试输出(用于调试 BMD 堆栈,而非调试目标平台)Debug output                      : NO# 启用 RTT(实时传输)支持RTT support                       : NOAdvertise QStartNoAckMode         : YES# 编译固件Building Firmware                 : YES# 编译BMDA BlackMagicDebugAppBuilding BMDA                     : YES
# 编译依赖的字库是否齐全Subprojectshidapi                            : YESlibopencm3                        : YESlibusb                            : YES#使用调试配置文件User defined optionsCross files                       : cross-file/bluepill.ini#编译固件
meson compile -C build
#生成dfu文件
meson compile -C build boot-bin
#生成固件
~/workspace/blackmagic$ ls build/ -al
total 5824
drwxrwxr-x 11 polaris polaris    4096  6月  1 18:08 .
drwxrwxr-x 14 polaris polaris    4096  6月  1 17:34 ..
-rwxrwxr-x  1 polaris polaris    7848  6月  1 17:46 blackmagic_bluepill_bootloader.bin
-rwxrwxr-x  1 polaris polaris  265144  6月  1 17:46 blackmagic_bluepill_bootloader.elf
-rwxrwxr-x  1 polaris polaris  119080  6月  1 17:38 blackmagic_bluepill_firmware.bin
-rwxrwxr-x  1 polaris polaris 1286032  6月  1 17:38 blackmagic_bluepill_firmware.elf
#合并allinone文件
#因为STM32F103CBT6默认没有dfu固件,所以需要生成blackmagic_bluepill_bootloader.bin
#blackmagic_bluepill_bootloader为dfu
dd if=blackmagic_bluepill_bootloader.bin of=blackmagic_allinone-bluepill.bin
dd if=blackmagic_bluepill_firmware.bin of=blackmagic_allinone-bluepill.bin seek=8 bs=1k conv=notrunc

meson setup build --cross-file cross-file/blackpill-f401cc.ini配置构建解析

meson setup build --cross-file cross-file/blackpill-f401cc.ini
......
......
Build targets in project: 40Black Magic Debug 2.0.0-rc2Remote ProtocolRISC-V acceleration               : NO
# 支持调试的CPU厂家TargetsCortex-A/R support                : YESCortex-M support                  : YESRISC-V 32-bit support             : YESRISC-V 64-bit support             : YESArterytek parts                   : YESAmbiq Apollo3 parts               : YESWinChipHead CH32 parts            : YESWinChipHead CH579 parts           : YESEnergy Micro parts                : YESGigaDevice parts                  : YESHC32 parts                        : YESLPC series parts                  : YESMindMotion parts                  : YESnRF series parts                  : YESKinetis series parts              : YESPuya PY32 series parts            : YESRenesas parts                     : YESRaspberry Pi MCUs (RP2040, RP2350): YESATSAM series parts                : YESSTM32 (and clones) parts          : YESTexas Instruments parts           : YESXilinx parts                      : YES
# 作为BlackMagicProbe硬件的固件信息ProbeName                              : WeAct Studio F401CC BlackPillPlatform                          : STM32F4Bootloader                        : Black Magic Debug BootloaderLoad Address                      : 0x08004000
# 支持调试功能Black Magic Debug# 启用调试输出(用于调试 BMD 堆栈,而非调试目标平台)Debug output                      : NO# 启用 RTT(实时传输)支持RTT support                       : YESAdvertise QStartNoAckMode         : YES# 编译固件Building Firmware                 : YES# 编译BMDA BlackMagicDebugAppBuilding BMDA                     : YES
# 编译依赖的字库是否齐全Subprojectshidapi                            : YESlibopencm3                        : YESlibusb                            : YES
# 使用调试配置文件User defined optionsCross files                       : cross-file/blackpill-f401cc.ini#编译固件
meson compile -C build
#生成dfu文件
meson compile -C build boot-bin
#生成固件
~/workspace/blackmagic$ ls build/ -aldrwxrwxr-x 11 polaris polaris    4096  6月 11 09:46 .
drwxrwxr-x 13 polaris polaris    4096  6月 11 09:41 ..
-rwxrwxr-x  1 polaris polaris 2090448  6月 11 09:45 blackmagic
-rwxrwxr-x  1 polaris polaris    8232  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.bin
-rwxrwxr-x  1 polaris polaris  138760  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.elf
drwxrwxr-x  2 polaris polaris    4096  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.elf.p
-rwxrwxr-x  1 polaris polaris  150212  6月 11 09:45 blackmagic_blackpill_f401cc_firmware.bin
-rwxrwxr-x  1 polaris polaris 1486816  6月 11 09:45 blackmagic_blackpill_f401cc_firmware.elf
#合并allinone文件
#因为STM32F401CCU6默认没有dfu固件,blackmagic_blackpill_f401cc_bootloader.bin
#blackmagic_blackpill_f401cc_bootloader为dfu
dd if=blackmagic_blackpill_f401cc_bootloader.bin of=blackmagic_allinone-blackpill.bin
dd if=blackmagic_blackpill_f401cc_firmware.bin of=blackmagic_allinone-blackpill.bin seek=16 bs=1k conv=notruncdfu-util -d 0483:df11 -a 0 -s 0x08000000 -D blackmagic_allinone-blackpill.bin

编译bluepill固件和BMDA

#编译固件
meson compile -C build
#生成dfu文件
meson compile -C build boot-bin
#生成固件
~/workspace/blackmagic$ ls build/ -al
total 5824
drwxrwxr-x 11 polaris polaris    4096  6月  1 18:08 .
drwxrwxr-x 14 polaris polaris    4096  6月  1 17:34 ..
-rwxrwxr-x  1 polaris polaris    7848  6月  1 17:46 blackmagic_bluepill_bootloader.bin
-rwxrwxr-x  1 polaris polaris  265144  6月  1 17:46 blackmagic_bluepill_bootloader.elf
-rwxrwxr-x  1 polaris polaris  119080  6月  1 17:38 blackmagic_bluepill_firmware.bin
-rwxrwxr-x  1 polaris polaris 1286032  6月  1 17:38 blackmagic_bluepill_firmware.elf
-rwxrwxr-x  1 polaris polaris 1286032  6月  1 17:38 blackmagic.exe
-rwxrwxr-x  1 polaris polaris 1286032  6月  1 17:38 ftd2xx.dll
#合并allinone文件
#因为STM32F103CBT6默认没有dfu固件,所以需要生成blackmagic_bluepill_bootloader.bin
#blackmagic_bluepill_bootloader为dfu
dd if=blackmagic_bluepill_bootloader.bin of=blackmagic_allinone-bluepill.bin
dd if=blackmagic_bluepill_firmware.bin of=blackmagic_allinone-bluepill.bin seek=8 bs=1k conv=notrunc

编译blackpill_f401cc固件和BMDA

#编译固件
meson compile -C build
#生成dfu文件
meson compile -C build boot-bin
#生成固件
~/workspace/blackmagic$ ls build/ -aldrwxrwxr-x 11 polaris polaris    4096  6月 11 09:46 .
drwxrwxr-x 13 polaris polaris    4096  6月 11 09:41 ..
-rwxrwxr-x  1 polaris polaris 2090448  6月 11 09:45 blackmagic
-rwxrwxr-x  1 polaris polaris    8232  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.bin
-rwxrwxr-x  1 polaris polaris  138760  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.elf
drwxrwxr-x  2 polaris polaris    4096  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.elf.p
-rwxrwxr-x  1 polaris polaris  150212  6月 11 09:45 blackmagic_blackpill_f401cc_firmware.bin
-rwxrwxr-x  1 polaris polaris 1486816  6月 11 09:45 blackmagic_blackpill_f401cc_firmware.elf
#合并allinone文件
#因为STM32F401CCU6默认没有dfu固件,blackmagic_blackpill_f401cc_bootloader.bin
#blackmagic_blackpill_f401cc_bootloader为dfu
dd if=blackmagic_blackpill_f401cc_bootloader.bin of=blackmagic_allinone-blackpill.bin
dd if=blackmagic_blackpill_f401cc_firmware.bin of=blackmagic_allinone-blackpill.bin seek=16 bs=1k conv=notrunc

2.2 BMP固件烧录

 USB-TO-TTL 与 STM32F103CB6T/F401CCU6 接线

USB-TO_TTL 引脚

STM32F103CB/F401CC 引脚

备注

TX

PA10 (RX)

必须连接

RX

PA9 (TX)

必须连接

GND

GND

必须连接

VCC

3V3

必须连接

接上USB-TO-TTL至PC后,在USB设置中勾选“FTDI FT231X USB UART [1000]”

并在Ubuntu虚拟机中查询到如下:


user@desktop:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# USB-TO-TLL设备
Bus 002 Device 006: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
user@desktop:~$ ls /dev/ttyUSB* -al
crw-rw---- 1 root dialout 188, 0  6月 12 19:33 /dev/ttyUSB0

保持BOOT0开关按压状态,同时短按NRST开关后立即释放。然后执行下载固件命令:

下面命令必须在固件所在目录下执行,如果不是必须带绝对路径。

# bluepill更新固件命令
sudo stm32flash -b 115200 -w blackmagic_allinone-bluepill.bin /dev/ttyUSB0stm32flash 0.5http://stm32flash.sourceforge.net/Using Parser : Raw BINARY
Interface serial_posix: 115200 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : Up to 20KiB  (512b reserved by bootloader)
- Flash      : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote address 0x0801ec6c (100.00%) Done.# 特别注意同时不要将MCU的Type-C连接到电脑,必须使用外部供电,不然会影响MCU下载。
# 同时在DFU模式和ISP模式STM32F4x1首选DFU模式
# blackpill更新固件命令sudo stm32flash -b 115200 -w blackmagic_allinone-blackpill.bin /dev/ttyUSB0 stm32flash 0.5http://stm32flash.sourceforge.net/Using Parser : Raw BINARY
Interface serial_posix: 115200 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0433 (STM32F401xD(E))
- RAM        : Up to 96KiB  (12288b reserved by bootloader)
- Flash      : Up to 512KiB (size first sector: 1x16384)
- Option RAM : 16b
- System RAM : 30KiB
Write to memory
Erasing memory
Wrote address 0x08028ac4 (100.00%) Done.

自制BlackMagic Probe刷完固件后接上Type-C,便可以在设备管理器看到如下:

user@desktop:~/workspace/zephyr-gdb/blackmagic/build$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 010: ID 1d50:6018 OpenMoko, Inc. Black Magic Debug Probe (Application)
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
user@desktop:~/workspace/zephyr-gdb/blackmagic/build$ ls /dev/ttyA*
/dev/ttyACM0 # Debug Port  
/dev/ttyACM1 # UART Port

自制BMP(BluePill)引脚定义参考:

BMP(STM32F103CB)          Cotrex-M芯片
-------------------------------------
GND          -------------> GND
SWCLK (PA5)  -------------> SWCLK
SWDIO (PB14) -------------> SWDIO
TX (PA2)     -------------> RX
RX (PA3)     -------------> TX
VCC(3.3V)    -------------> VDD (可选,若目标板无供电)

自制BMP(BlackPill)引脚定义参考:

BMP(STM32F401CC)          Cotrex-M芯片
-------------------------------------
GND          -------------> GND
SWCLK (PB8)  -------------> SWCLK
SWDIO (PB9) -------------> SWDIO
TX (PA2)     -------------> RX
RX (PA3)     -------------> TX
VCC(3.3V)    -------------> VDD (可选,若目标板无供电)

参考文献:

How to Install on STM32F103 Blue Pill and STM32F401/STM32F411 Black Pill

Black Magic Debug 官方文档

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

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

相关文章

Spring Cloud Gateway 动态路由实现方案

动态路由的核心需求:在不重启网关的情况下,实时修改路由规则。以下是 4 种实现方案: 方案 1:基于内存的动态路由(RefreshRoutesEvent) 适用场景:临时修改,重启失效 Autowired pri…

Flutter 路由守卫全面解析:从原理到实践

路由守卫是现代移动应用开发中不可或缺的重要机制,它如同应用的"安检系统",在页面跳转前进行必要的检查和拦截。本文将深入探讨 Flutter 中路由守卫的实现原理、多种实现方案以及实际应用场景,帮助开发者构建更安全、更可靠的 Flut…

mysql表备份数据,改表名

mysql表改表名 在MySQL中,直接更改表名并不是一个操作,因为MySQL不允许直接更改表的名称。但是,你可以通过创建一个新表,然后将旧表的数据复制到新表中,最后删除旧表的方式来实现更改表名的目的。这个过程通常被称为“…

开疆智能ModbusTCP转Canopen网关连接汇川AM403PLC与编码器配置案例

二、AM403作为Modbus四主站的配置过程 1.将AM403设为主站 AM403本体带一路EtherNET园囗(CN3),本例使用该网口作为ModbusTCP通讯口.如下图所示展开项目树,从设备树中找到网络组态(或者Network Configuration): 双击该节点标题打开网络组态设置界面&…

Charles里怎么进行断点调试

Charles进行断点测试的核心目的是通过主动拦截并篡改网络请求与响应数据,构建特定测试场景以验证系统健壮性和逻辑正确性,主要服务于以下关键场景: 🔧 一、验证后端逻辑健壮性 绕过前端校验 修改前端受限参数(如超长字符串、特殊字符),测试后端对异常输入的过滤与容错…

【3D插件推荐】PolyCloth v2.07 超强布料模拟工具(附图文安装教程与下载)

软件介绍 PolyCloth v2.07是一款专为3ds Max设计的布料模拟动画插件,由PolyDesign开发。该插件基于物理动力学模拟,能够为用户提供一个多线程和C的布料画笔工具,帮助用户轻松创建真实感极强的布料动画效果。无论是角色服装还是室内装饰&…

开源综合性网络安全检测和运维工具-TscanClient

开源综合性网络安全检测和运维工具-TscanClient 前言 在当今数字化的时代,网络安全问题日益凸显,企业和个人面临着各种各样的网络威胁。为了有效应对这些威胁,一款强大的网络安全检测和运维工具显得尤为重要。今天,我要给大家介…

MySQL 8.0 OCP 英文题库解析(十五)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题131~140 试题1…

WPF将容器内的组件按比例缩放

1.使用多值转换器,XAML中传入容器的当前宽高,和组件的原始宽高。 <Grid.Height><MultiBinding Converter="{StaticResource SetScaleConverter}"><Binding ElementName="MainWindow1" Path="ActualWidth"></Binding>…

开疆智能ModbusTCP转Devicenet网关连接ABB机器人配置案例

本案例是模拟ModbusTCP主站软件通过开疆智能ModbusTCP转Devicenet网关连接ABB机器人的配置案例&#xff0c;具体过程如下。 配置过程 ABB机器人IO板配置 1、简介 (ABB老版本IO板通讯配置为UNIT&#xff0c;新版本IO板通讯配置为DeviceNet device&#xff0c;此日记以新版本D…

Spring @Qualifier,@Primary

[Q&A] Qualifier 引入背景 在使用 Inject 或 Autowired 进行依赖注入时&#xff0c;默认是 按类型匹配 Bean 的&#xff0c;但如果容器中有多个相同类型的 Bean&#xff0c;Spring 就无法确定该注入哪一个&#xff0c;会抛出异常&#xff1a;NoUniqueBeanDefinitionExcept…

面试遇到的商城项目相关问题总结

今天面试遇到的商城项目相关问题总结 记录一下面试中被问到的和商城项目相关的高频问题和我的实际解答&#xff0c;希望能帮到也在准备前端面试的小伙伴&#xff01; 1. 商城首页、商品列表页怎么做性能优化&#xff1f; 主要从这几个方面展开&#xff1a; 1&#xff09;资…

初探 OpenCV for Android:利用官方示例开启视觉之旅

在移动开发领域&#xff0c;计算机视觉技术的应用越来越广泛&#xff0c;而 OpenCV 作为开源的计算机视觉库&#xff0c;无疑是实现相关功能的强大工具。OpenCV for Android 提供了一系列丰富的示例&#xff0c;帮助开发者快速上手并掌握其在 Android 应用中的使用方法。本文将…

Linux中shell编程的函数递归用法和脚本自动化讲解

一、函数递归 1.1 函数简介 样式1&#xff1a;函数间调用 - 函数体内部调用其他的函数名 样式2&#xff1a;文件间调用 - 函数体内部调用另外一个文件的函数名 - 需要额外做一步文件source的加载动作 注意&#xff1a;我们将专门提供函数的文件称为 -- 函数库…

基于数据库实现配置管理和定时任务启停

本文大纲 1、背景2、实现思路3、基于数据库实现4、总结 1、背景 项目中&#xff0c;定时任务的控制&#xff0c;常常通过配置文件中的开关&#xff0c;但如果定时任务很多&#xff0c;配置文件维护就很烦&#xff0c;且要考虑配置热部署的问题 2、实现思路 上一篇提到了一些…

Linux服务器上MySQL CPU使用率过高问题排查与定位

文章目录 一、CPU高负载常见成因分析1.1 全表扫描与索引缺失1.2 复杂计算与临时表1.3 锁竞争与线程上下文切换1.4 查询优化器误判1.5 硬件资源瓶颈 二、操作系统级初步定位2.1 使用top定位MySQL进程2.2 用pidstat分析线程级CPU2.3 vmstat分析系统负载 三、数据库层深度诊断3.1 …

Java解析前端传来的Unix时间戳

在Java中&#xff0c;前端传递的 1749571200000 是一个 Unix时间戳&#xff08;毫秒级&#xff09;&#xff0c;表示自1970年1月1日00:00:00 UTC以来经过的毫秒数。以下是两种常见的解析方式&#xff08;推荐使用Java 8的java.time API&#xff09;&#xff1a; 方法1&#xff…

error report

build/X86_VI_hammer_GPU/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc: In member function ‘int OutputUnit_d::getVCBufferOccupancy(int)’: build/X86_VI_hammer_GPU/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc:135:40: error: no matching fu…

本地部署模型 --vLLM + Docker 部署+封装接口

vLLM的介绍 vLLM的核心特性&#xff1a; 最先进的服务吞吐量 使用PageAttention高效管理注意力键和值的内存 量化&#xff1a;GPTQ&#xff0c;AWQ&#xff0c;INT4&#xff0c;INT8和FP8 VLLM的灵活性和易用性体现在以下方面&#xff1a; 具有高吞吐量服务以及各种解码算法…

每日一博 - JWT 安全实战指南

文章目录 Pre引言背景与原理简介核心安全挑战传输层安全实践签名算法与密钥管理Header 与 Claims 严格校验Token 生命周期管理存储与前端实践抗攻击措施日志与监控附加增强与高级方案小结与建议后续方向 引言&#xff1a;阐述 JWT 的流行与安全重要性背景与原理简介&#xff1a…