【nRF52832】【环境搭建 1】【ubuntu下搭建nRF52832开发环境】
本文讲述如何在 ubuntu 22.04 下开发 nRF52832.
host 环境说明:
$ uname -a
Linux leo 6.8.0-60-generic #63~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 22 19:00:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
1. 安装软件
sudo apt install gcc-arm-none-eabisudo apt-get install build-essential checkinstall
2. nRF5 SDK
1. 下载 SDK
Nordic官方对nRF51、nRF52系列提供了SDK,SDK中提供了大量的BLE和ANT示例。
1. SDK 15.3 版本
下载 15.3版本
将其解压:
leo@leo:~/data_4t/nrf_project/nrf5sdk153059ac345/nRF5_SDK_15.3.0_59ac345$ tree -L 2
.
├── components
│ ├── 802_15_4
│ ├── ant
│ ├── ble
│ ├── boards
│ ├── drivers_ext
│ ├── drivers_nrf
│ ├── iot
│ ├── libraries
│ ├── nfc
│ ├── proprietary_rf
│ ├── sdk_validation.h
│ ├── serialization
│ ├── softdevice
│ └── toolchain
├── config
│ ├── nrf52810
│ ├── nrf52811
│ ├── nrf52832
│ └── nrf52840
├── documentation
│ ├── index.html
│ ├── licenses.html
│ ├── licenses.txt
│ ├── NordicS.jpg
│ ├── nRF5_Garmin_Canada_license.txt
│ ├── nRF5_Nordic_license.txt
│ ├── nRF5x_series_logo.png
│ └── release_notes.txt
├── examples
│ ├── 802_15_4
│ ├── ant
│ ├── ble_central
│ ├── ble_central_and_peripheral
│ ├── ble_peripheral
│ ├── connectivity
│ ├── crypto
│ ├── dfu
│ ├── dtm
│ ├── iot
│ ├── multiprotocol
│ ├── nfc
│ ├── peripheral
│ ├── proprietary_rf
│ ├── readme.txt
│ └── usb_drivers
├── external
│ ├── cifra_AES128-EAX
│ ├── cJSON
│ ├── fatfs
│ ├── fnmatch
│ ├── fprintf
│ ├── freertos
│ ├── infineon
│ ├── licenses_external.txt
│ ├── lwip
│ ├── mbedtls
│ ├── micro-ecc
│ ├── nano
│ ├── nano-pb
│ ├── nfc_adafruit_library
│ ├── nrf_cc310
│ ├── nrf_cc310_bl
│ ├── nrf_oberon
│ ├── nrf_tls
│ ├── protothreads
│ ├── segger_rtt
│ ├── thedotfactory_fonts
│ └── utf_converter
├── external_tools
│ └── cmsisconfig
├── integration
│ └── nrfx
├── license.txt
├── modules
│ └── nrfx
├── nRF5x_MDK_8_24_1_IAR_NordicLicense.msi
└── nRF5x_MDK_8_24_1_Keil4_NordicLicense.msi64 directories, 14 files
2. SDK 17.1.0 版本
现在官网上最新的是 17.1.0 版本:
- 下载
nRF5_SDK_17.1.0_ddde560$ tree -L 2
.
├── components
│ ├── 802_15_4
│ ├── ant
│ ├── ble
│ ├── boards
│ ├── drivers_ext
│ ├── drivers_nrf
│ ├── libraries
│ ├── nfc
│ ├── proprietary_rf
│ ├── sdk_validation.h
│ ├── serialization
│ ├── softdevice
│ └── toolchain
├── config
│ ├── nrf52810
│ ├── nrf52811
│ ├── nrf52820
│ ├── nrf52832
│ ├── nrf52833
│ └── nrf52840
├── documentation
│ ├── index.html
│ ├── licenses.html
│ ├── licenses.txt
│ ├── NordicS.jpg
│ ├── nRF5_Garmin_Canada_license.txt
│ ├── nRF5_Nordic_license.txt
│ ├── nRF5x_series_logo.png
│ └── release_notes.txt
├── examples
│ ├── 802_15_4
│ ├── ant
│ ├── ble_central
│ ├── ble_central_and_peripheral
│ ├── ble_peripheral
│ ├── connectivity
│ ├── crypto
│ ├── dfu
│ ├── dtm
│ ├── multiprotocol
│ ├── nfc
│ ├── peripheral
│ ├── proprietary_rf
│ ├── readme.txt
│ └── usb_drivers
├── external
│ ├── cifra_AES128-EAX
│ ├── cJSON
│ ├── fatfs
│ ├── fnmatch
│ ├── fprintf
│ ├── freertos
│ ├── infineon
│ ├── licenses_external.txt
│ ├── lwip
│ ├── mbedtls
│ ├── micro-ecc
│ ├── nano
│ ├── nano-pb
│ ├── nfc_adafruit_library
│ ├── nrf_cc310
│ ├── nrf_cc310_bl
│ ├── nrf_oberon
│ ├── nrf_tls
│ ├── protothreads
│ ├── segger_rtt
│ ├── thedotfactory_fonts
│ ├── tile
│ └── utf_converter
├── external_tools
│ └── cmsisconfig
├── integration
│ └── nrfx
├── license.txt
├── modules
│ └── nrfx
└── nRF_MDK_8_40_3_IAR_BSDLicense.msi65 directories, 13 files
2. 配置编译环境
15.3 版本和 17.1.0 版本我都验证了步骤是一样的:
修改如下文件:
components/toolchain/gcc/Makefile.posix
// 15.3
GNU_INSTALL_ROOT ?= /usr/bin/
GNU_VERSION ?= 7.3.1
GNU_PREFIX ?= arm-none-eabi
// 17.1.0 components/toolchain/gcc/Makefile.posix
GNU_INSTALL_ROOT ?= /usr/bin/
GNU_VERSION ?= 9.3.1
GNU_PREFIX ?= arm-none-eabi
GNU_INSTALL_ROOT
: 主要配置交叉工具 按照目录, 编译时可以从当前目录中找 gcc.
查看安装目录:
leo@leo:~$ which arm-none-eabi-gcc
/usr/bin/arm-none-eabi-gcc
3. 编译
这里拿 一个官方跑马灯的例子来验证。
pca10040
: 我手里板子,对应官网的PCA10040 型号
examples/peripheral/blinky/pca10040/blank/armgcc$ tree
.
├── blinky_gcc_nrf52.ld
└── Makefile0 directories, 2 files
在当前目录 make
examples/peripheral/blinky/pca10040/blank/armgcc$ make
mkdir _build
cd _build && mkdir nrf52832_xxaa
Assembling file: gcc_startup_nrf52.S
Compiling file: nrf_log_frontend.c
Compiling file: nrf_log_str_formatter.c
Compiling file: boards.c
Compiling file: app_error.c
Compiling file: app_error_handler_gcc.c
Compiling file: app_error_weak.c
Compiling file: app_util_platform.c
Compiling file: nrf_assert.c
Compiling file: nrf_atomic.c
Compiling file: nrf_balloc.c
Compiling file: nrf_fprintf.c
Compiling file: nrf_fprintf_format.c
Compiling file: nrf_memobj.c
Compiling file: nrf_ringbuf.c
Compiling file: nrf_strerror.c
Compiling file: nrfx_atomic.c
Compiling file: main.c
Compiling file: system_nrf52.c
Linking target: _build/nrf52832_xxaa.outtext data bss dec hex filename2760 112 172 3044 be4 _build/nrf52832_xxaa.out
Preparing: _build/nrf52832_xxaa.hex
Preparing: _build/nrf52832_xxaa.bin
DONE nrf52832_xxaa# 编译结束leo@leo:~/data_4t/nrf_project/nrf5sdk153059ac345/nRF5_SDK_15.3.0_59ac345/examples/peripheral/blinky/pca10040/blank/armgcc$ tree -L 2
.
├── blinky_gcc_nrf52.ld
├── _build
│ ├── nrf52832_xxaa
│ ├── nrf52832_xxaa.bin
│ ├── nrf52832_xxaa.hex # 他就是我们要烧录进板子的 文件
│ ├── nrf52832_xxaa.in
│ ├── nrf52832_xxaa.map
│ └── nrf52832_xxaa.out
└── Makefile2 directories, 7 files
同样在 17.1.0 下的操作
leo@leo:~/data_4t/nrf_project/nRF5_SDK_17.1.0_ddde560/examples/peripheral/blinky/pca10040/blank/armgcc/_build$ tree -L 1
.
├── nrf52832_xxaa
├── nrf52832_xxaa.bin
├── nrf52832_xxaa.hex
├── nrf52832_xxaa.in
├── nrf52832_xxaa.map
└── nrf52832_xxaa.out1 directory, 5 files
3. 烧录
1. 软件安装
下载 nRF-Command-Line-Tools_10_9_0_Linux-amd64
https://www.nordicsemi.com/Products/Development-tools/nrf-command-line-tools/download#infotabs
解压:
nrfcommandlinetools1090linuxamd64$ tree
.
├── JLink_Linux_V680a_x86_64.deb
├── JLink_Linux_V680a_x86_64.tgz
├── nRF-Command-Line-Tools_10_9_0_Linux-amd64.deb
├── nRF-Command-Line-Tools_10_9_0.tar
└── README.txt0 directories, 5 files
安装:
# 第一步
sudo dpkg -i JLink_Linux_V680a_x86_64.deb# 第二步
sudo dpkg -i nRF-Command-Line-Tools_10_9_0_Linux-amd64.deb
- 注意安装先后顺序
查看安装后的版本:
$ nrfjprog -v
nrfjprog version: 10.9.0
JLinkARM.dll version: 6.80a$ JLinkExe -v
SEGGER J-Link Commander V6.80a (Compiled May 29 2020 16:30:49)
DLL version V6.80a, compiled May 29 2020 16:30:38
- 如果能看到上面的信息,表示下载环境已经ok 了。
2. 连接板子
1. 硬件接线:
我这里使用 Jlink-v9 仿真器 SWD 接口和板子进行连接:
2. 软件侧
执行如下命令 :
JLinkExe -device NRF52 -if SWD -speed 4000 -autoconnect 1
如果有如下输出信息:表示已经识别到板子了。
SEGGER J-Link Commander V6.80a (Compiled May 29 2020 16:30:49)
DLL version V6.80a, compiled May 29 2020 16:30:38Connecting to J-Link via USB...O.K.
Firmware: J-Link V9 compiled May 7 2021 16:26:12
Hardware version: V9.70
S/N: 69706099
License(s): RDI, FlashBP, FlashDL, JFlash, GDB
VTref=3.261V
Device "NRF52" selected.Connecting to target via SWD
InitTarget() start
InitTarget() end
Found SW-DP with ID 0x2BA01477
DPIDR: 0x2BA01477
Scanning AP map to find all available APs
AP[2]: Stopped AP scan as end of AP map has been reached
AP[0]: AHB-AP (IDR: 0x24770011)
AP[1]: JTAG-AP (IDR: 0x02880000)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FF000
CPUID register: 0x410FC241. Implementer code: 0x41 (ARM)
Found Cortex-M4 r0p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS-M7
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU
ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM
Cortex-M4 identified.
J-Link>
3. 烧录
1. 方式1: 使用 Jlink 进行烧录
// 1. 首先输入上面的命令 连接板子:
JLinkExe -device NRF52 -if SWD -speed 4000 -autoconnect 1// 2. 擦除之前的程序
J-Link> erase
Erasing device...
Comparing flash [100%] Done.
Erasing flash [100%] Done.
J-Link: Flash download: Total time needed: 0.026s (Prepare: 0.015s, Compare: 0.000s, Erase: 0.007s, Program: 0.000s, Verify: 0.000s, Restore: 0.003s)
Erasing done.// 3. 烧录之前 编译的 跑马灯 程序
J-Link> loadfile nrf52832_xxaa.hex
Downloading file [nrf52832_xxaa.hex]...
Comparing flash [100%] Done.
Erasing flash [100%] Done.
Programming flash [100%] Done.
J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (4096 bytes)
J-Link: Flash download: Total: 0.092s (Prepare: 0.026s, Compare: 0.002s, Erase: 0.000s, Program & Verify: 0.052s, Restore: 0.011s)
J-Link: Flash download: Program & Verify speed: 76 KB/s
O.K.// 4. 退出, 此时 程序就开始执行了。
J-Link>exit
2. 方式2: nrfjprog 烧录
全片擦除 +下载+ 复位运行。
$ nrfjprog -f NRF52 --program ./IK-52832DK-V2-TEST.hex --chiperase -rParsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programming device.
Applying system reset.
Run.
4. nrfjprog 命令介绍
nrfjprog 是使用 J-Link 仿真器对 nRF5x 系列 SoC 进行编程的命令行工具。
1. 全片擦除
执行全片擦除后,会擦除片内所有 Flash 和掉电保持的寄存器。
// 擦除
$ nrfjprog -f NRF52 -eErasing user available code and UICR flash areas.
Applying system reset.
2. 下载
nrfjprog 的命令是可以组合的,对于程序下载,可以使用下面两种组合命令,注意他们
的区别。
1. 仅下载+复位运行:芯片必须是空的(擦除过的),否则下载会失败
$ nrfjprog -f NRF52 --program ./IK-52832DK-V2-TEST.hex Parsing hex file.
Reading flash area to program to guarantee it is erased.
Checking that the area to write is not protected.
Programming device.
- 此时重新掉电启动即可
2.全片擦除 +下载+ 复位运行
$ nrfjprog -f NRF52 --program ./IK-52832DK-V2-TEST.hex --chiperase -rParsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programming device.
Applying system reset.
Run.
- 我一般情况会使用这种方式烧录。
3.启用回读保护机制
nrfjprog -f NRF52 --rbp ALL
该命令执行后,无法使用仿真器通过 DEBUG 接口读出芯片的数据,当我们发布产品的
时候,可以通过启用回读保护防止别人读取芯片中烧写的固件,从而保护产品的权益不被侵犯。
3. 读出 SoftDevice 的 FWID
只有已经下载了 SoftDevice 的芯片才可以读出 FWID。
- nRF51xx 系列命令:nrfjprog --family NRF51 --memrd 0x0000300C
- nRF52xx 系列命令:nrfjprog --family NRF52 --memrd 0x0000300C
$ nrfjprog --family NRF52 --memrd 0x0000300C
0x0000300C: FFFF00AF
- 所示,读出的数据是:0xFFFF00AF,表示协议栈的 FWID 是 0xAF,根据 FWID 即可知道
协议栈的版本(FWID 在固件更新 DFU 中会用到)
4. 恢复
恢复:全片擦除并禁用回读保护机制(如果启用)
命令:nrfjprog -f NRF52 -recover
该命令执行后,会擦除片内所有 Flash 和掉电保持的寄存器。
5. ps
本文档 所涉及的软件包我已经打包,请点击下载。
- nRF52832-ubuntu-开关环境资源打包
nrf-52832-env-soft$ tree
.
├── IK-52832DK-V2-TEST.hex
├── nrf52832_xxaa.hex
├── nrf5sdk153059ac345.zip
└── nrfcommandlinetools1090linuxamd64.tar.gz
$ md5sum nrf-52832-env-soft.7z
b61a6911bab6684f9721648740448926 nrf-52832-env-soft.7z
相关文章:
【nRF52832】【环境搭建 1】【ubuntu下搭建nRF52832开发环境】
本文讲述如何在 ubuntu 22.04 下开发 nRF52832. host 环境说明: $ uname -a Linux leo 6.8.0-60-generic #63~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 22 19:00:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux1. 安装软件 sudo apt install gcc-arm-none-eabisudo apt-get i…...
Django
1. Django 和 Tornado 的关系 Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。Django 遵循 MVC(模型-视图-控制器)设计模式的一个变种,称为 MTV(模型-模板-视图)。Django 框架提供…...
51c嵌入式~CAN~合集2
我自己的原文哦~ https://blog.51cto.com/whaosoft/14016935 一、CAN总线常见信号干扰问题 定位干扰原因 当总线有干扰时,有经验的工程师能够迅速定位,但是对于新手来说却很麻烦。 造成总线干扰的原因有很多,比如通过电磁辐射耦合到通…...
【iOS】iOS崩溃总结
【iOS】iOS崩溃总结 一、前言 之前写了一篇博文《【Flutter】程序报错导致的灰屏总结》,浏览量、收藏率和点赞量还挺高,还被收录了,就想着总结一下iOS崩溃,这个也是在iOS面试中经常被问到的。 在 iOS 开发过程中,导致…...
npm 报错:“无法加载文件 ...npm.ps1,因为在此系统上禁止运行脚本” 解决方案(附执行策略说明)
在使用 npm 命令时,部分 Windows 用户可能会遇到如下错误: npm : 无法加载文件 D:\nvm4w\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkID135170 中的 about_Executi…...
AES加密:为你的PDF文档加上一道钢铁防线
在数字化时代,确保敏感数据的安全性至关重要。加密技术在保护信息免受未经授权访问方面起着关键作用。而在众多加密标准中,AES(高级加密标准)因其强大的安全性和广泛的应用而脱颖而出。那么,AES加密如何应用到PDF文档中…...
2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(一)
2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(一) 第一部分:网络平台搭建与设备安全防护任务书DCRS:DCFW:DCWS:WAF: 第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1:应急响…...
1688商品发布API:自动化上架与信息同步
一、1688商品发布API的核心功能与技术架构 1.1 API功能全景 1688商品发布API是1688开放平台的核心组件之一,支持商品信息的自动化发布、编辑、上下架及库存同步。其核心功能包括: 商品信息管理:支持商品标题、描述、价格、库存、SKU&#…...
鸿蒙ArkUI---基础组件Tabs(Tabbar)
基础页面组件 Tabs 作用: 快速创建Tabbar 个人理解: 快速的创建Tabar。 效果图: 代码:interface TabItem {icon: Resource; //未选中activeIcon: Resource; //选中name: string; //文字 }Entry Component struct Index {// st…...
50. Pow(x, n)快速幂算法
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。此函数应将 x 作为浮点数(意味着它可以是十进制数)和 n 作为整数(可以是正数、负数或零)一起使用。 快速幂(Expo…...
Python函数
三.函数进阶 0.定义 函数三要素:函数名,参数,返回值,其中只有函数名是必须要的,参数,返回值可以没有 语法: def 函数名(参数): 函数体 return 返回值 1.…...
7.Spring框架
# spring框架Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道## 为什么要使用 **Spring** 框架? Spring 是一个轻量级应用框架,它提供了 IoC 和 AOP 这两个核心的功能。它的核心目的是为了…...
计算机网络-----详解HTTP协议
✏️1. 什么是HTTP HTTP (全称为 “超⽂本传输协议”) 是⼀种应⽤⾮常⼴泛的应⽤层协议(所谓 “超⽂本” 的含义, 就是传输的内容不仅仅是⽂本(⽐如 html, css 这个就是⽂本), 还可以是⼀些其他的资源, ⽐如图⽚, 视频, ⾳频等⼆进制的数据)。 HTTP 诞⽣…...
解决npm安装依赖报错ERESOLVE unable to resolve dependency tree
在使用 npm 安装项目依赖时,有时会遇到错误信息 “npm ERR! code ERESOLVE”,该错误通常发生在依赖版本冲突或者依赖解析问题时。本文将详细介绍出现这个错误的原因,并提供解决方法,确保正确安装项目依赖并避免该错误的发生。 一…...
微信小程序安卓手机输入框文字飘出输入框
最近在开发微信小程序遇到一个问题,安卓手机输入框文字飘出输入框,但是ios系统的手机则正常。 使用情景:做了一个弹窗,弹窗内是表单,需要填写一些信息,但是在填写信息时光标不显示,输入的内容飘…...
python网络自动化-数据格式与数据建模语言
数据格式 在Python网络运维自动化最基本是JSON、YAML和XML这3种数据格式。除了这3种常用的数据格式,还有一种深受网络工程师喜爱且在网络运维自动化中常用的数据承载方式——表格 需要注意的是JSON的键必须用双引号包裹,JSON的对象数据键值对的值和数组…...
C++ 中的 atan2 函数:深入解析与应用
在 C 编程中,数学计算是许多应用场景的核心,例如几何问题、物理模拟和游戏开发等。atan2 函数作为数学库中的一个重要工具,提供了比普通反正切函数更强大的功能。本文将深入解析 atan2 函数的原理、使用方法以及实际应用场景,并通…...
云计算-Azure Functions :构建事件驱动的云原生应用报告
云计算导论 课程研究报告 Azure Functions :构建事件驱动的云原生应用 摘要: Azure Functions 是一种无服务器解决方案,是由微软 Azure 平台提供的,可以使用户专注于业务逻辑,减少代码的编写,减少需要维护…...
【笔记——李沐动手学深度学习】2.3 线性代数
2.3.1 标量 标量由只有一个元素的张量表示。 下面的代码将实例化两个标量,并执行一些熟悉的算术运算,即加法、减、乘法、除法和指数。 2.3.2 向量 人们通过一维张量表示向量。一般来说,张量可以具有任意长度,取决于机器的内存限…...
多个 Job 并发运行时共享配置文件导致上下文污染,固化 Jenkins Job 上下文
基于 context.py 固化 Jenkins Job 上下文的完整方案,适用于你当前的工作流(Python Jenkins Pipeline),解决: 多个 Job 并发运行时共享配置文件导致上下文污染;读取环境变量或 JSON 文件时被其他 Job 修改…...
github 上的php项目
github 上的php项目 项目的网址 (Loong1996/LikeGirlSite: 情侣网站、情侣网页、恋爱记录网站) # 修改 # admin/Config_DB.php//localhost 为数据库地址 一般使用默认的即可 或(127.0.0.1) $db_address "mysql_php";/…...
防火墙快速管理软件,66K超小巧
软件介绍 今天为大家推荐一款轻量级的Windows防火墙管理工具,这款工具能帮助用户快速开启或关闭系统防火墙功能,操作比系统原生设置更加便捷高效。 软件优势 相比通过系统设置层层点击的操作方式,这款仅66KB大小的微型工具只需单击按钮…...
入门级STM32F103C8T6无人机遥控(原理图)
一、STM32主控电路 一、STM32 主控电路 把 STM32 想象成 “机器人的大脑”,核心电路是 “大脑的基础保障”:让大脑有电、有心跳(时钟 )、能复活(复位 )。 1. 电源引脚(VDD、VDDA、VSS 等 &#…...
无人机灯光驱动模块技术解析
一、运行方式 1. 核心流程: 指令接收:灯光控制模块通过无线通信链路(如WiFi, 数传电台,或专用的表演控制链路)接收来自地面站或中央控制系统的灯光指令。指令包含:颜色(RGB/RGBW值࿰…...
React + Umi(Umijs/Max) 搭建项目及配置
文章标题 01 环境准备02 快速构建2.1 参数选项2.2 umix 还是 umijs/max2.3 使用 pnpm (推荐)2.4 使用 npm 和 yarn2.5 启动项目2.6 启用 Prettier(可选)2.7 打包部署发布 03 Tailwind CSS 插件(可选)3.1 安…...
React 第六十四节Router中HashRouter的使用详细介绍及案例分析
前言 HashRouter 是 React Router 提供的一种路由实现方案,它使用 URL 的 hash 部分(# 后面的内容)来实现客户端路由功能。 一、HashRouter 的核心用途 客户端路由:在不刷新页面的情况下管理应用导航兼容性:支持不支…...
Linux RDMA网络配置手册
一、配置前准备工作 在进行 RDMA 网络配置之前,请确保以下准备工作已完成: 硬件环境 确保服务器支持 RDMA 功能,例如支持 InfiniBand 或 RoCE(RDMA over Converged Ethernet)的网卡。确保网络交换设备支持 RDMA 协议…...
sentinel与seata组件在微服务中的基本作用
微服务基础内容: 在微服务中,首先学习了微服务的横向拆分与纵向拆分,纵向拆分指按照功能拆分模块,横向拆分指将高复用的模块单独拆分,使纵向拆分的模块去调用这部分内容。 学习了基本拆分后,需要知道微服…...
Springboot 集成多数据源pgSql+mysql,启动报错
一.错误信息: 2025-06-25 20:25:50.870 ERROR [ai-manage-center,,] --- [ruid-ConnectionPool-Create-1057240219] DruidDataSource : create connection SQLException, url: jdbc:postgresql://10.10.60.227:5432/ai_dify1?sslmodedisable¤tSchemapub…...
南宫28NG相信品牌力量/Vue 3 中的组合式 API(Composition API)进阶实战
南宫28NG相信品牌力量【罔丨止:MGTY.PW】 点击此处复制到浏览器打开 随着 Vue 3 的普及,Composition API 已成为现代 Vue 开发的主流。本节我们将深入掌握组合式 API 的进阶用法,涵盖响应式工具、生命周期钩子封装、自定义逻辑抽离等关键技术…...
实战使用 Docker Compose 搭建 Redis Cluster 集群
文章目录 前言技术积累Docker Compose简介Redis Cluster简介Redis Cluster 解决的问题 实战演示部署环境创建目录编写Redis配置文件编写Docker-Compose.yml执行yml文件,启动容器查看容器状态创建集群验证集群集群数据验证 总结 前言 随着互联网技术的发展ÿ…...
Tauri(2.5.1)+Leptos(0.8.2)开发自用桌面小程序--DeepSeek辅助编程(俄罗斯方块)
在之前工作基础上(Tauri(2.5.1)Leptos(0.8.2)开发自用桌面小程序-CSDN博客),继续进行自用桌面小程序的开发,这次完全使用DeepSeek辅助编程做一个俄罗斯方块游戏,大部分代码由DeepSeek自主完成,Bug扔给DeepS…...
flex布局实例:把色子放进盒子里
目录 一、flex布局实例:把色子放进盒子里 1、基础样式 二、justify-content 属性 三、flex-direction 属性 四、align-items 属性 五、flex-wrap 属性 二、flex布局应用到常见场景 非常详细的讲解flex布局,看一看,练一练! …...
【启发式算法】RRT*算法详细介绍(Python)
📢本篇文章是博主人工智能(AI)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
基于R语言的亚组分析与森林图绘制1
亚组分析是临床研究中的重要分析方法,其核心是通过将研究对象按基线特征(如年龄、性别或吸烟状况等)划分为不同亚组,进而评估干预措施或暴露因素在各亚组中对结局影响的差异性。 在亚组分析中,交互作用(P for interaction)是关键指标,用于判断干预措施或暴露因素与亚组…...
idea, CreateProcess error=206, 文件名或扩展名太长
idea, CreateProcess error206, 文件名或扩展名太长 解决 “CreateProcess error206, 文件名或扩展名太长” 错误 CreateProcess error206 是 Windows 系统特有的错误,表示命令行参数超出了 Windows 的 32767 字符限制。这个问题在 Java 开发中尤其常见,…...
aspose.word在IIS后端DLL中高并发运行,线程安全隔离
aspose.word在IIS后端DLL中运行,加载很慢,如何为全部用户加载,再每个用户访问时在各自线程中直接可以打开WORD文件处理 Aspose.Words 在 IIS 中优化加载性能方案 针对 Aspose.Words 在 IIS 后端 DLL 中加载缓慢的问题,我们可以通过单例模式预加载组件并结合线程安…...
day042-负载均衡与web集群搭建
文章目录 0. 老男孩思想-面试官问:你对加班的看法?1. 负载均衡2. 搭建负载均衡的WordPress集群2.1 负载均衡服务器2.2 配置web服务器2.3 测试 踩坑记录1. /var/cache/nginx权限问题 0. 老男孩思想-面试官问:你对加班的看法? 互联网公司没有不加班的&a…...
DuDuTalk | 武汉赛思云科技有限公司通过武汉市人工智能企业认定!
近日,2025年武汉市人工智能企业名单正式公布!武汉赛思云科技有限公司(以下简称赛思云科技)凭借卓越的技术实力与创新成果,成功入选武汉市人工智能企业。这是对公司长期深耕AI语音智能领域、推动数字化转型的高度认可&a…...
Tita CRM飞书协同版:解锁企业销售与交付管理新效能
数字化转型的破局之道 在数字经济加速发展的今天,传统管理模式正面临前所未有的挑战: • 销售过程缺乏可视化管控手段 • 项目执行存在严重的信息孤岛 • 跨部门协作效率持续低下 • 绩效考核缺乏客观数据支撑 Tita CRM作为专业的智能化管理平台&#x…...
web安全之h2注入系统学习
起初是在N1 Junior 2025 上面碰到一题,考点是h2的sql注入。由于之前没有见过,趁此机会系统学习一番 实验代码 public class H2Inject {public static void main(String[] args) throws Exception{JdbcDataSource dataSource new JdbcDataSource();dataS…...
LVS-DR负载均衡群集深度实践:高性能架构设计与排障指南
目录 一、核心原理与理论 二、背景与架构设计 三、全流程部署步骤 1. NFS共享存储配置(192.168.7.100) 2. Real Server节点配置(四台服务器) 3. Director服务器配置 四、常见问题解决方案 五、生产环境总结 拓扑示意图&am…...
Java如何导出word(根据模板生成),通过word转成pdf,放压缩包
<!-- 导出word文档所需依赖--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.0-beta</version></dependency><dependency><groupId>org.apache.poi</gr…...
.NET 7.0 EF Core:一、创建Web API 项目基础框架和用户表的增删改查
demo 地址: https://github.com/iotjin/Jh.Admin.NETCore 代码不定时更新,请前往github查看最新代码 .NET 7.0 EF Core:一、创建Web API项目 官方教程序一、项目目录结构各层职责说明1️⃣ Admin.NETCore.API(接口层)2️⃣ Admin.…...
一篇文章了解XML
一、什么是 XML? XML 是一种结构化数据的标记语言,用来存储、传输和描述数据。 它和 HTML 很像,但它的标签是自定义的,不限定格式和外观,而是强调数据的结构和含义。 XML不是用来展示数据的,HTML是用来展…...
Windows下安装zookeeper
有关Linux安装zk的文章可以参考下我之前写的: Zookeeper 3.8.4 安装和参数解析 Windows下的下载和Linux是一样的,都是同一个包,目前zk稳定版是 3.8.4 下载解压后 在根目录下创建 data 文件夹用来存放数据文件 在 conf 文件夹中,…...
计算机网络 网络层:控制平面
在本章中,包含网络层的控制平面组件。控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。5.2节,传统的计算图中最低开销路径的路由选…...
探索阿里云智能媒体管理IMM:解锁媒体处理新境界
一、引言:开启智能媒体管理新时代 在数字化浪潮的席卷下,媒体行业正经历着前所未有的变革。从传统媒体到新媒体的转型,从内容生产到传播分发,每一个环节都在寻求更高效、更智能的解决方案。而云计算,作为推动这一变革…...
微信点餐小程序—美食物
本项目是基于WAMP Server 和PHP 动态网页技术构建的微信小程序点餐系统,该系统主要分为前端(微信小程序)和后端(基于PHPMySQL服务器端) 整体架构流程 1、前端部分 用户界面:展示菜品、处理用户点餐操作、…...
Python零基础入门到高手8.5节: 实现选择排序算法
目录 8.5.1 排序算法简介 8.5.2 选择排序算法 8.5.3 好好学习,天天向上 8.5.1 排序算法简介 所谓排序,是指将数据集合中的元素按从小到大的顺序进行排列,或按从大到小的顺序进行排列。前者称为升序排序,后者称为降序排序。在数…...