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

芯片的可编程字

“芯片的可编程字”其实是指 MCU 的配置字节/熔丝位(fuse bits)/选项字节(option bytes),它们通常用来配置芯片的安全和启动特性。

不同系列 MCU 名字不一样,但作用类似:

  • ARM Cortex-M 系(如 Nordic nRF52840、STM32) → 用 UICC / UICR(用户信息配置寄存器)Option Bytes 配置读写保护、Bootloader 地址、加密等。
  • AVR 系(如 ATmega) → 用 Fuse bits 配置时钟源、启动模式、代码保护等。
  • PIC 系 → 用 Configuration Words 做类似事情。

常见的配置位作用

  1. 读写保护

    • 一旦使能,Flash 程序区就不能被外部 SWD/JTAG/SPI 等接口读取(读保护),有的还禁止写入(写保护)。
    • 比如 STM32 的 RDP (Read Protection) = 1,就无法再读出程序。
  2. 写保护

    • 指定 Flash 的某些扇区禁止擦写,防止应用程序或病毒改写关键代码。
  3. 启动地址/Boot 配置

    • 决定 MCU 上电后是从 Bootloader 还是用户程序启动。
  4. 时钟/复位相关配置

    • 选择内部/外部晶振,是否启用看门狗,低功耗配置等。

重要特性

  • 这些“可编程字”通常是 一次性或有限次数可写,存储在 Flash 的特殊区域。
  • 使能读保护后,想要再解锁通常必须 整片擦除(Chip Erase),这会清除用户程序。
  • 不同厂家的 MCU 解锁方式不同,有的可以“降级保护”,有的完全不可逆。

例子

  • STM32

    • 通过 Option Bytes 设置 RDP=0xAA (无保护) → RDP=0xCC (读保护)。
    • 如果启用了读保护,想要恢复只能全片擦除。
  • nRF52840

    • 使用 UICC/UICR 寄存器 配置保护。
    • 通过 APPROTECT 位启用读保护,一旦打开,SWD 无法访问 Flash 内容,只能通过 全片擦除 才能恢复。

📌 总结
芯片的“可编程字”就是厂家提供的 配置熔丝/寄存器,一旦设置了 读写保护,外部调试器就不能随便读写 Flash,能有效保护知识产权。但代价是:要想清除保护,必须整片擦除,用户程序也会丢失

好的 👍 我给你整理一个 常见 MCU 系列的“读写保护/安全配置字”对照表,涵盖你提到的 STM32、GD32、LPC1700、Kinetis K22、ESP32。这些配置通常在 Flash 的特殊区域或通过专门寄存器设置,一旦启用保护,都会影响调试与读写。


🔒 MCU 安全配置对照表

MCU 系列配置名称/方式功能说明解锁方式备注
STM32 (Cortex-M)Option Bytes 中的 RDP (Read Protection)、WRP (Write Protection)- RDP=0xAA → 无保护
- RDP=0xCC → 读保护 (调试器不能读出程序)
- WRP → 写保护特定扇区
通过 全片擦除 (Mass Erase) 解除,用户程序会丢失STM32F1/F4/F7/H7 系都有类似机制
GD32 (Cortex-M,国产替代)与 STM32 几乎一致(Option Bytes提供读保护、写保护、Boot 配置等通过 全片擦除 解锁GD32 基本兼容 STM32 的保护方式
NXP LPC1700 (Cortex-M3)Code Read Protection (CRP) 配置字 (存在于 Flash 0x2FC–0x2FF)- CRP0 → 无保护
- CRP1 → 禁止读出,允许 ISP/擦除
- CRP2 → 禁止调试接口,只能全擦
- CRP3 → 完全锁死 (不能再 ISP)
取决于级别:CRP2 以上只能整片擦除注意 CRP3 是不可逆的“永久锁定”
NXP Kinetis K22 (Cortex-M4)FTFL_FSEC 寄存器 / Flash Security Byte- SEC=0xFE → Unsecure
- 其他值 → Secure 模式,禁止读写
只能通过 Mass Erase 解锁Kinetis 系列都用 FSEC 控制安全性
ESP32 (Xtensa LX6)eFuse 安全配置位(如 FLASH_CRYPT_CONFIG, DISABLE_JTAG, SECURE_BOOT_EN- 可禁止 JTAG
- 启用 Flash 加密
- 启用 Secure Boot
不可逆烧写,有些功能一旦使能无法关闭ESP32 安全功能很强大,但风险是“烧错就废”

📌 总结

  • STM32 / GD32 → 用 Option Bytes,保护可撤销,但必须整片擦除。
  • LPC1700 → 用 CRP 字,分级保护,CRP3 是永久锁死。
  • Kinetis K22 → 用 Flash Security Byte,保护可解除但需全擦。
  • ESP32 → 用 eFuse 配置安全,部分位是 一次性不可逆(比如禁止 JTAG、开启加密)。

⚠️ 注意事项

  • 一旦启用了 读保护/安全位,再想解除时往往要 全片擦除,意味着你会失去原来的固件。
  • 对 ESP32 这类用 eFuse 的芯片,要特别小心,因为一旦写死,就无法恢复。

🔧 常见 MCU 的保护位配置方式

1. STM32 / GD32

  • 保护位存储在 Flash 的特殊区域(Option Bytes)
  • 当你用 IDE(Keil、STM32CubeProgrammer、OpenOCD)下载时,可以在配置里选择“读保护/写保护”。
  • 在 HEX 文件层面,这些 Option Bytes 也映射在特定地址(比如 0x1FFF F800 之类),所以可以通过生成带有 Option Bytes 区域的 HEX 文件来配置保护位
    👉 但一般推荐用专门的工具,而不是手工改 HEX。

2. LPC1700

  • 使用 CRP 字,位于 Flash 固定地址 0x2FC – 0x2FF

  • 编译器/链接器会在固件 HEX 文件的这个地址填入值,比如:

    • 0xFFFF FFFF → CRP0(无保护)
    • 0x1234 5678 → CRP1/CRP2/CRP3
  • 所以这里确实是 直接修改 HEX 文件中的这几个字节就能改变保护等级


3. Kinetis K22

  • 安全字节 (FTFL_FSEC) 存在于 Flash 0x40C – 0x40F 区域。
  • 编译出来的固件 HEX 文件里会带上这几个字节,决定芯片上电时进入 Secure 还是 Unsecure 状态。
  • 所以这里也是通过 HEX 文件中的配置字节实现。

4. ESP32

  • 不同了 ⚠️
  • ESP32 的保护位存在于 eFuse,这是芯片内部一次性烧写的硬件位,不在 Flash 里。
  • HEX 文件(或者 bin 文件)里无法控制 eFuse。
  • 必须通过 espefuse.py 或官方烧写工具写入,而且很多位 不可逆

✅ 总结

  • STM32 / GD32 → Option Bytes(可通过 HEX 配置,但常用专门工具)。
  • LPC1700 → CRP 字节(就在 HEX 文件里,改几个字节就能生效)。
  • Kinetis K22 → Flash Security Byte(在 HEX 文件里对应地址)。
  • ESP32 → eFuse(硬件寄存器,不能靠 HEX 修改,必须专门工具烧写,而且不可逆)。

📌 换句话说:
👉 传统 ARM MCU (STM32 / LPC / Kinetis) → 可以通过 修改 HEX 文件某些地址字节 来控制保护。
👉 ESP32 这种新型安全 MCU → 保护位存在于 eFuse,不能靠 HEX 修改。

nRF52840

好嘞,这个问题涉及到 Nordic nRF52840 的安全机制,它跟 STM32/LPC 那种 Option Bytes/CRP 有点不同,核心依赖 UICR 配置寄存器硬件保护单元 (ACL、BPROT、APPROTECT)。我给你分层梳理一下:


🔒 nRF52840 保护机制概览

nRF52840 属于 ARM Cortex-M4F 内核的 SoC,主要有以下几类保护手段:

1. 读写保护 (Read/Write Protection)

  • APPROTECT(Access Port Protection):

    • 位于 UICR (User Information Configuration Registers) 中的配置字。
    • 如果启用,调试接口 (SWD) 将被完全锁死,外部调试器无法访问 Flash/SRAM。
    • 唯一解锁方式是 全片擦除 (ERASEALL),这会抹掉所有程序和数据。
    • 这是保护固件知识产权的主要手段。

2. Flash 区域保护

  • BPROT (Block Protection Unit)

    • 可保护 Flash 的某些扇区,防止运行中的应用写/擦除这些区域。
    • 设置后,相关区域在程序运行时只读。
  • ACL (Access Control List)

    • 用于保护 SRAM/外设寄存器的访问权限。
    • 可以限制某些代码段只能访问特定地址区域。

3. 安全启动 (Secure Boot)

  • nRF52840 支持 Secure Bootloader,配合 签名校验 (ECDSA, SHA256),保证固件来源可信。
  • 搭配 NRF_UICR.NRFFW[0] 等寄存器,可以指定启动地址(Bootloader vs 应用)。

4. 信任根与加密支持

  • 内置 CryptoCell 310 安全模块,支持 AES、SHA、ECC、随机数生成。
  • 可用来实现安全固件升级(DFU over BLE/USB),保证代码不被篡改。

⚙️ 配置方式

  1. 通过 HEX 文件 / 烧录工具修改 UICR

    • APPROTECT 位于 UICR.APPROTECT 寄存器中,地址 0x10001208
    • 写入 0xFFFFFF00 → 启用保护。
    • 写入 0xFFFFFFFF → 无保护。
    • 因为 UICR 在 Flash 特殊区域,所以可以在 HEX 文件里附带对应值,烧录时一起写入。
  2. 运行时保护 (BPROT/ACL)

    • 在应用程序初始化时通过寄存器配置。
    • 比如 NRF_BPROT->CONFIG0 = ... 来禁止特定 Flash 页的写操作。
  3. 调试解锁

    • 一旦 APPROTECT 启用,SWD 无法再访问。
    • 必须执行 ERASEALL 命令(通过专用调试器如 J-Link),会清空整个 Flash + UICR,恢复默认无保护。
    • 这保证了固件不可被非法提取。

🚨 特点与风险

  • 可逆性:APPROTECT 不是不可逆的,但解锁必然擦除数据
  • 细粒度保护:BPROT/ACL 允许开发者对特定区域做精细限制,而不是“一刀切”。
  • 与 ESP32 eFuse 不同:ESP32 的 eFuse 是不可逆的硬件熔丝;nRF52840 的 UICR/APPROTECT 可以解锁(代价是全片擦除)。
  • 调试体验:开发阶段通常关闭 APPROTECT,否则调试不便。量产前再开启。

📌 总结

nRF52840 的保护机制主要依靠:

  1. APPROTECT (UICR) → 锁死调试接口,防止固件被读出。
  2. BPROT/ACL → 限制 Flash/SRAM 区域的访问权限。
  3. Secure Boot + CryptoCell → 保证固件升级安全,防止篡改。

👉 实际生产中,一般流程是:

  • 开发阶段:关闭 APPROTECT,方便调试。
  • 量产阶段:启用 APPROTECT,写死 Bootloader 地址,结合安全 DFU 升级。

好嘞,这个问题涉及到 Nordic nRF52840 的安全机制,它跟 STM32/LPC 那种 Option Bytes/CRP 有点不同,核心依赖 UICR 配置寄存器硬件保护单元 (ACL、BPROT、APPROTECT)。我给你分层梳理一下:


🔒 nRF52840 保护机制概览

nRF52840 属于 ARM Cortex-M4F 内核的 SoC,主要有以下几类保护手段:

1. 读写保护 (Read/Write Protection)

  • APPROTECT(Access Port Protection):

    • 位于 UICR (User Information Configuration Registers) 中的配置字。
    • 如果启用,调试接口 (SWD) 将被完全锁死,外部调试器无法访问 Flash/SRAM。
    • 唯一解锁方式是 全片擦除 (ERASEALL),这会抹掉所有程序和数据。
    • 这是保护固件知识产权的主要手段。

2. Flash 区域保护

  • BPROT (Block Protection Unit)

    • 可保护 Flash 的某些扇区,防止运行中的应用写/擦除这些区域。
    • 设置后,相关区域在程序运行时只读。
  • ACL (Access Control List)

    • 用于保护 SRAM/外设寄存器的访问权限。
    • 可以限制某些代码段只能访问特定地址区域。

3. 安全启动 (Secure Boot)

  • nRF52840 支持 Secure Bootloader,配合 签名校验 (ECDSA, SHA256),保证固件来源可信。
  • 搭配 NRF_UICR.NRFFW[0] 等寄存器,可以指定启动地址(Bootloader vs 应用)。

4. 信任根与加密支持

  • 内置 CryptoCell 310 安全模块,支持 AES、SHA、ECC、随机数生成。
  • 可用来实现安全固件升级(DFU over BLE/USB),保证代码不被篡改。

⚙️ 配置方式

  1. 通过 HEX 文件 / 烧录工具修改 UICR

    • APPROTECT 位于 UICR.APPROTECT 寄存器中,地址 0x10001208
    • 写入 0xFFFFFF00 → 启用保护。
    • 写入 0xFFFFFFFF → 无保护。
    • 因为 UICR 在 Flash 特殊区域,所以可以在 HEX 文件里附带对应值,烧录时一起写入。
  2. 运行时保护 (BPROT/ACL)

    • 在应用程序初始化时通过寄存器配置。
    • 比如 NRF_BPROT->CONFIG0 = ... 来禁止特定 Flash 页的写操作。
  3. 调试解锁

    • 一旦 APPROTECT 启用,SWD 无法再访问。
    • 必须执行 ERASEALL 命令(通过专用调试器如 J-Link),会清空整个 Flash + UICR,恢复默认无保护。
    • 这保证了固件不可被非法提取。

🚨 特点与风险

  • 可逆性:APPROTECT 不是不可逆的,但解锁必然擦除数据
  • 细粒度保护:BPROT/ACL 允许开发者对特定区域做精细限制,而不是“一刀切”。
  • 与 ESP32 eFuse 不同:ESP32 的 eFuse 是不可逆的硬件熔丝;nRF52840 的 UICR/APPROTECT 可以解锁(代价是全片擦除)。
  • 调试体验:开发阶段通常关闭 APPROTECT,否则调试不便。量产前再开启。

📌 总结

nRF52840 的保护机制主要依靠:

  1. APPROTECT (UICR) → 锁死调试接口,防止固件被读出。
  2. BPROT/ACL → 限制 Flash/SRAM 区域的访问权限。
  3. Secure Boot + CryptoCell → 保证固件升级安全,防止篡改。

👉 实际生产中,一般流程是:

  • 开发阶段:关闭 APPROTECT,方便调试。
  • 量产阶段:启用 APPROTECT,写死 Bootloader 地址,结合安全 DFU 升级。

完全正确 ✅

BIN 文件烧录和 HEX 文件烧录相比,有几个关键区别,正好解释了为什么误写到 APPROTECT 或其他 UICR 寄存器的可能性很低:


1. BIN 文件烧录特点

  • BIN 文件是 纯二进制数据,没有地址信息。
  • 烧录工具会 指定起始地址,通常是 Flash 用户区(应用程序区)起点,例如 0x00000000
  • BIN 文件本身不会包含 UICR、Option Bytes 或其他特殊保护寄存器的地址数据。

对 nRF52840 来说:UICR 位于 0x10001200 以上的 Flash 特殊区域,远高于应用程序区地址。


2. HEX 文件 vs BIN 文件

特性HEX 文件BIN 文件
包含地址信息✅ 每条记录包含目标地址❌ 仅连续数据,需要烧录工具指定地址
可以写入特殊寄存器✅ 可以覆盖 UICR/Option Bytes❌ 默认不会覆盖,除非起始地址指定到 UICR
容易误写风险中等(如果不小心 HEX 包含 UICR 地址)很低(BIN 只写入用户指定区域)

3. nRF52840 的实际情况

  • APPROTECT 位于 0x10001208
  • 常规 BIN 烧录命令通常起点是 0x00000000,长度几百 KB 至 1 MB,不会触碰到 0x10001200+ 区域。
  • 除非你故意指定起始地址到 UICR 区域,BIN 烧录不会修改保护寄存器。

4. 总结

  • 使用 BIN 文件烧录固件时,基本不会误写到 APPROTECT 或其他保护寄存器。

  • 如果要修改保护位(启用/禁用 APPPROTECT),必须通过:

    1. HEX 文件包含 UICR 数据并烧录,或
    2. 专门工具(nrfjprog、nRF Connect Programmer)写入 UICR。
  • BIN 文件更安全,适合 普通固件升级或量产烧录,不会破坏调试/保护配置。


好的,我给你画一个 ASCII 示意图,展示 BIN 文件烧录 vs HEX 文件烧录 对 nRF52840 UICR(APPROTECT)寄存器的影响:

地址空间示意 (nRF52840)
┌───────────────┐
0x00000000      │ <- Flash 起始地址 (用户程序区)
│               │
│   用户程序    │
│   (BIN/HEX) │
│               │
│               │
│               │
│               │
└───────────────┘
0x10001200      │ <- UICR 特殊区域 (APPROTECT 等)
│  UICR寄存器   │
│  APPROTECT    │
│  BPROT ...    │
└───────────────┘---------------------------------------
BIN 文件烧录示意
┌───────────────┐
0x00000000      │ <- BIN起始地址
│  用户程序数据 │ <- 烧录区
│  ......       │
└───────────────┘
0x10001200      │ <- UICR区
│  不会被修改   │ <- 安全
└───────────────┘HEX 文件烧录示意
┌───────────────┐
0x00000000      │ <- 用户程序区
│  用户程序数据 │
│  ......       │
└───────────────┘
0x10001208      │ <- UICR.APPROTECT
│  可能包含数据 │ <- 如果HEX文件中包含,烧录后启用保护
└───────────────┘

结论

  • BIN 文件只写指定起始地址的连续 Flash 区域,不会触碰 UICR,误写几率几乎为 0。
  • HEX 文件包含地址信息,如果 UICR 地址出现在 HEX 中,烧录时会修改保护寄存器。

启动选项

1. STM32 系列 (Cortex-M)

  • 启动选项引脚:有

    • 引脚名:BOOT0 / BOOT1

    • 功能:

      • BOOT0=0 → 从主 Flash 启动(用户程序)
      • BOOT0=1 → 从系统内置 ROM 启动(System Bootloader,用于 USART/SWD/DFU)
    • BOOT1 有些型号用来扩展 ROM/Flash 启动选项

  • 特点

    • 上电电平决定启动源
    • 支持外部硬件选择启动模式

2. GD32 系列(STM32 类国产芯片)

  • 启动选项引脚:类似 STM32

    • BOOT0 / BOOT1
    • 功能和 STM32 相同,决定启动 ROM / Flash /其他模式

3. NXP LPC 系列 (LPC17xx, LPC54xx)

  • 启动选项引脚:有

    • ISP / Boot 配置引脚(通常是 P0.x 或其他特定引脚)

    • 功能:

      • 上电检测这些引脚状态 → 决定进入 ISP / UART / USB / Flash 启动模式
  • 特点

    • 引脚组合决定启动源
    • 软件也可通过寄存器修改启动地址

4. Kinetis 系列 (NXP, Cortex-M4/M0+)

  • 启动选项引脚:部分有

    • BOOTCFG / FOPT 寄存器 +硬件引脚

    • 功能:

      • 上电检测引脚电平 + 配置寄存器决定启动 ROM / Flash
  • 特点

    • 可通过硬件引脚覆盖启动寄存器配置
    • 常用于进入 Factory Bootloader

5. ESP32 系列

  • 启动选项引脚:有

    • IO0 / IO2 / EN

    • 功能:

      • IO0 低电平 + EN 拉高 → 进入 UART 下载模式(Flash Download Boot)
      • IO0 高 → 正常启动应用程序
  • 特点

    • 硬件上电检测 IO0 实现启动模式选择
    • 用户可方便通过按钮操作进入下载模式

6. 总结对比

MCU 系列硬件启动引脚功能描述软件辅助
STM32 / GD32BOOT0 / BOOT1ROM / Flash 启动可配 Option Bytes
LPC17xxISP / Boot pinFlash / UART / USB 启动Boot寄存器可修改
KinetisBOOTCFG / FOPTROM / Flash 启动软件可覆盖
ESP32IO0 / ENUART 下载 / 应用启动无需额外寄存器
nRF52840无专用引脚Bootloader / DFU 软件检测按钮UICR 配置启动地址

📌 结论

  • 大部分 MCU(STM32、GD32、LPC、Kinetis、ESP32)都有 硬件启动引脚,用于选择 ROM / Flash / Bootloader 等启动模式。
  • nRF52840 是例外,没有专用启动引脚,启动模式通过 软件检测 GPIO + UICR 配置寄存器 实现。

  • nRF52840 没有专用启动选项引脚

  • 启动模式选择依靠

    1. Bootloader 内部软件检测 GPIO(如按钮)
    2. UICR 配置寄存器中的启动地址和标志
  • 用户可以通过 硬件按钮 + Bootloader 软件逻辑 实现上电进入 DFU 模式,或者直接启动应用程序


1. nRF52840 启动机制概览

nRF52840 没有专门的“硬件启动选择引脚”,启动模式主要依靠 Bootloader 和 UICR 配置寄存器控制:

  1. 用户应用程序区(默认启动)

    • 上电或复位后,MCU 会读取 启动地址(通常从 0x00000000 或 UICR 配置的地址)执行应用程序。
  2. Bootloader / DFU 模式

    • 进入 DFU 或 UF2 模式的方式主要有两种:

      1. 软复位触发:Bootloader 通过应用程序内部指令触发跳转到 DFU 镜像。
      2. 硬件复位 + 检测:Bootloader 可以检测某些条件(例如特定按键按下、或 UICR 配置标志),进入 DFU 模式。

2. 与引脚相关的启动选项

虽然 nRF52840 没有专门的启动引脚,但可以通过 复用 GPIO 引脚 / Bootloader 检测实现类似效果:

  • 常见做法

    • 板上有一个 复位按钮或用户按钮

    • Bootloader 启动时检查按钮电平:

      • 按下 → 进入 DFU / UF2 模式
      • 未按 → 启动用户应用程序
  • 这种方式本质上是“软件检测 GPIO”,而非专用硬件启动引脚。


3. UICR 配置寄存器与启动

  • UICR.NRFFW[0] 或其他 Bootloader 相关寄存器可指定:

    • 应用程序启动地址
    • Bootloader 启动条件
  • 可以通过烧录 HEX 文件或编程器修改这些寄存器,决定 MCU 上电后跳转到哪个镜像。


±------------------------------------------------------------+
| MCU 启动模式对比 ASCII 图 |
±---------------±------------------±---------------------+
| MCU 系列 | 硬件启动引脚 | 启动模式选择 |
±---------------±------------------±---------------------+
| STM32 / GD32 | BOOT0 / BOOT1 | 上电电平决定启动源 |
| | | BOOT0=0 -> Flash |
| | | BOOT0=1 -> System ROM|
±---------------±------------------±---------------------+
| LPC17xx | ISP / Boot pin | 上电检测引脚状态 |
| | | ROM / UART / USB / Flash 启动 |
±---------------±------------------±---------------------+
| Kinetis | BOOTCFG / FOPT | ROM / Flash 启动 |
| | | 可硬件覆盖寄存器设置|
±---------------±------------------±---------------------+
| ESP32 | IO0 / EN | IO0=低 + EN=高 -> UART 下载模式 |
| | | IO0=高 -> 正常应用启动 |
±---------------±------------------±---------------------+
| nRF52840 | 无专用引脚 | Bootloader 软件检测按钮 / UICR 配置启动地址 |
±---------------±------------------±---------------------+

说明:

  • STM32 / GD32 / LPC / Kinetis / ESP32 都有硬件启动引脚,直接上电检测决定启动模式。
  • nRF52840 没有专用启动引脚,启动模式通过软件检测 GPIO(按钮)和 UICR 寄存器配置。
  • Bootloader / DFU 模式在 nRF52840 和 ESP32 都可以通过按钮或引脚进入,但实现方式不同。
http://www.dtcms.com/a/362270.html

相关文章:

  • Ps画笔和橡皮擦工具
  • 分布式事务相关02
  • 国内服务器如何安装docker或者是1panel
  • 关闭页面强制清除所有循环定时器
  • Linux 进程间通信(IPC)
  • Android14 init.rc各个阶段的主要操作
  • authentication port-control auto 和 dot1x port-control auto
  • Shell 编程:正则表达式与文本处理器
  • 软考-操作系统-错题收集(1)进程P的页面变换
  • 分布式一致性算法相关
  • 【Audio】切换至静音或振动模式时媒体音自动置 0
  • 基于SpringBoot+MYSQL开发的师生成果管理系统
  • 解锁Git仓库瘦身秘籍,git-sizer真香警告
  • Next.js渲染模式:SSR、SSG与ISR揭秘
  • Python实现点云渲染可视化杂记(直接、彩虹渐变、柱状、饼状和T-SNE赋色)
  • The Algorithmic Foundations of Differential Privacy - 2
  • 8Lane V-by-One HS LVDS FMC Card
  • 【开题答辩全过程】以 智慧药店管理系统的实现与设计为例,包含答辩的问题和答案
  • 基于单片机智能空调/温度控制系统
  • GaussDB 集群故障cm_ctl: can‘t connect to cm_server
  • API安全厂商F5首发后量子加密方案,为企业后量子时代加固防线
  • Java中方法的参数传递
  • TFT屏幕:STM32硬件SPI+DMA+队列自动传输
  • 【无标题】训练、推理适用的数据类型
  • C++ 学习与 CLion 使用:(五)数据类型,包括整型、实型、字符型、转义字符、字符串、布尔型
  • 椭圆曲线的数学基础
  • 【算法专题训练】17、双向链表
  • openEuler2403部署Redis8集群
  • AI推理方法演进:Chain-of-Thought、Tree-of-Thought与Graph-of-Thought技术对比分析
  • Spring 控制器参数注解