BLE协议栈的解析
目录
概述
1 BLE协议栈层次结构
1.1 控制器(Controller)
1.2 主机(Host)
1.3 应用层(Application)
1.3.1 业务层功能
1.3.2 实现方法
2 重要属性介绍
2.1 GATT属性
2.2 服务(Service)
2.3 特征值(Characteristic)
2.4 描述符(Descriptor)
2.5 数据交互方式
3 蓝牙设备角色
3.1 BLE 广播者(Broadcaster)
3.2 BLE 观察者(Observer)
3.3 BLE 中心设备(Central)
3.4 BLE 外设(Peripheral)
4 应用总结
4.1 组件功能列表
4.2 使用要点
概述
蓝牙低功耗(BLE)协议栈是实现蓝牙无线通信功能的分层架构,本文将从核心组成、各层功能到实际应用进行全面介绍。包括协议的层次结构,主要属性,以及设备角色等内容。
1 BLE协议栈层次结构
BLE协议栈主要分为三个部分:控制器(Controller),主机(Host),应用层(Application)
1.1 控制器(Controller)
控制之包括3个部分:
物理层PHY:
工作在2.4GHz ISM频段(2402-2480MHz)
采用40个信道,信道间隔2MHz
使用高斯频移键控(GFSK)调制
传输速率: 1Mbps(蓝牙5.0后支持2Mbps)
链路层Link Layer:
负责广播、扫描、建立和维护连接
管理5种状态:
待机(Standby)
广播(Advertising)
扫描(Scanning)
发起(Initiating)
连接(Connected)
处理数据包格式、时序和信道跳频
直接测试模式Direct Test Mode:用来测试射频性能,比如发射功率、接收灵敏度。
1.2 主机(Host)
主机(Host)层主要包含4个部分:
主机控制器接口HCI:
控制器与主机之间的标准通信接口
可通过UART、USB或三线协议传输
提供命令、事件和数据三种数据包类型
逻辑链路控制与适配协议L2CAP:
提供逻辑信道复用功能
负责协议/信道多路复用
处理数据包的分割和重组
提供基本L2CAP模式和LE信用流控制模式
安全管理器Security Manager:
负责配对和密钥分发
提供认证和加密功能
支持四种安全模式
实现LE安全连接和传统配对
属性协议ATT:
定义客户端-服务器结构的通信协议
服务器存储数据(属性),客户端请求数据
属性由句柄、UUID和值组成
支持查找、读取和写入等操作
通用访问规范(GAP):
定义设备角色:广播者、观察者、外围设备和中央设备
管理设备发现、连接建立和安全
控制广播和连接参数
通用属性规范(GATT):
建立在ATT之上的服务框架
定义服务(Service)、特征(Characteristic)和描述符(Descriptor)
规范了数据如何组织和交换
支持预定义和自定义服务
1.3 应用层(Application)
1.3.1 业务层功能
BLE应用层是蓝牙低能耗协议栈的最上层,直接面向用户和开发者,负责实现具体的业务逻辑和功能。以下是BLE应用层的详细功能解析:
1)业务逻辑实现
定义设备的具体功能和行为
实现用户需求的实际应用场景
处理来自下层协议栈的数据和事件
2) 数据管理
组织和管理应用数据
定义数据格式和解析规则
实现数据缓存和处理机制
1.3.2 实现方法
1) 应用配置文件(Profile)
预定义的标准功能集合(如心率监测、血压监测等)
由多个服务(Service)组成
确保不同厂商设备的互操作性
2.)自定义服务/特征
开发者根据需求定义的服务和特征
通过自定义UUID实现
灵活满足特定应用场景需求
3) 用户接口
提供与用户交互的接口
包括状态显示、参数配置等
可以是物理按钮、LED指示灯或移动应用界面
4)数据处理模块
数据加密/解密
数据压缩/解压缩
数据格式转换
2 重要属性介绍
2.1 GATT属性
1)GATT 的作用
定义 数据如何组织(服务、特征值、描述符)
规定 数据如何交互(读、写、通知、指示)
确保不同厂商设备之间的 互操作性
2)GATT 角色
角色 | 说明 |
---|---|
GATT 服务器(Server) | 存储数据(如传感器数据、设备状态),并允许客户端访问。例如:心率监测器、智能灯泡。 |
GATT 客户端(Client) | 向服务器发起请求(读/写数据)。例如:手机APP、中央设备。 |
注意:一个设备可以同时是 Client 和 Server(例如:智能手表既可以接收手机数据,也可以向耳机发送数据)。
2.2 服务(Service)
1)服务的定义
服务是 一组相关功能 的集合,例如:
心率服务(Heart Rate Service):包含心率测量、传感器位置等数据。
电池服务(Battery Service):包含电池电量、充电状态等数据。
每个服务由 UUID(通用唯一标识符) 标识:
标准 UUID(16-bit):如
0x180D
(心率服务)。自定义 UUID(128-bit):开发者可自定义,如
0000XXXX-0000-1000-8000-00805F9B34FB
。
2) 服务的层次结构
GATT Server
│
├── Service 1 (UUID: 0x180D) // 心率服务
│ ├── Characteristic 1 (心率测量)
│ └── Characteristic 2 (传感器位置)
│
└── Service 2 (UUID: 0x180F) // 电池服务├── Characteristic 1 (电池电量)└── Descriptor (通知使能)
2.3 特征值(Characteristic)
1)特征值的定义
特征值是 服务中的具体数据项,例如:
心率服务中的 当前心率值(如
72 BPM
)。电池服务中的 剩余电量(如
85%
)。每个特征值包含:
UUID(标识数据类型,如
0x2A37
表示心率测量)。Value(数据值,如
0x48
表示 72 BPM)。Permissions(读/写/通知权限)。
Descriptors(额外配置信息,如通知开关)。
2) 特征值的属性
属性 | 说明 |
---|---|
Read(可读) | 客户端可读取数据(如读取电池电量)。 |
Write(可写) | 客户端可写入数据(如调节灯光亮度)。 |
Notify(通知) | 服务器主动推送数据(无需客户端请求),例如持续发送心率数据。 |
Indicate(指示) | 类似 Notify,但要求客户端确认(更可靠)。 |
2.4 描述符(Descriptor)
1)描述符的作用
其主要作用是提供额外配置信息,例如:
Client Characteristic Configuration Descriptor (CCCD):控制 Notify/Indicate 是否启用。
Characteristic User Description:人类可读的描述(如 "Heart Rate Measurement")。
2)常见描述符
UUID | 名称 | 功能 |
---|---|---|
0x2902 | CCCD | 启用/禁用通知(Notify)或指示(Indicate)。 |
0x2901 | User Description | 提供特征值的文本描述(如 "Battery Level")。 |
2.5 数据交互方式
1)主要操作
操作 | 说明 | 示例 |
---|---|---|
Read(读取) | 客户端读取特征值 | 读取电池电量 |
Write(写入) | 客户端写入特征值 | 调节灯光亮度 |
Notify(通知) | 服务器主动推送数据(无确认) | 持续发送心率数据 |
Indicate(指示) | 服务器主动推送数据(需客户端确认) | 重要警报消息 |
2)典型应用场景
-
心率监测器(HRM)
-
服务:
0x180D
(心率服务) -
特征值:
0x2A37
(心率测量,Notify 模式) -
客户端订阅后,服务器持续发送心率数据。
-
-
智能灯泡
-
服务:自定义 UUID(如
0000AAAA-...
) -
特征值:
-
0xAAAA
(亮度,Write 模式) -
0xAAAB
(颜色,Write 模式)
-
-
3 蓝牙设备角色
3.1 BLE 广播者(Broadcaster)
广播者的核心特点主要如下:
1)工作模式
仅发送数据,不接收响应(单向通信)。
不建立连接(Connectionless),适用于一对多通信。
使用 广播信道(37/38/39) 发送数据包。
2)典型应用场景
信标(Beacon)(如 iBeacon、Eddystone)
传感器数据广播(温度、湿度等)
设备发现(让扫描设备感知广播者的存在)
低功耗标签(资产跟踪、室内定位)
3.2 BLE 观察者(Observer)
观察者(Observer)是 BLE(蓝牙低功耗)中的一种设备角色,专门用于 扫描并接收广播数据,但不主动发起连接。它在 BLE 通信中扮演"监听者"的角色,适用于数据采集、设备发现等场景。
1. 观察者的核心特点
1)工作模式
仅接收广播数据,不发送连接请求(被动监听)
不建立双向连接(Connectionless)
在 3个广播信道(37/38/39) 上扫描数据
2) 典型应用场景
信标(Beacon)接收(如商场导航、室内定位)
环境传感器数据收集(温度、湿度等)
设备发现与监控(如资产跟踪)
广播数据抓包与分析
2. 观察者的工作流程
1) 扫描方式
扫描类型 | 特点 | 功耗 |
---|---|---|
被动扫描(Passive Scanning) | 只接收广播数据,不发送扫描请求 | 更低功耗 |
主动扫描(Active Scanning) | 发送扫描请求(SCAN_REQ)获取更多数据(Scan Response) | 功耗略高 |
2) 数据接收机制
监听广播信道(37/38/39)
解析广播数据(如设备名称、服务UUID、厂商数据等)
可选:发送扫描请求(SCAN_REQ)获取扩展信息(Scan Response)
3. 观察者的关键特性
1)低功耗优化
可调节扫描间隔(Scan Interval)和 扫描窗口(Scan Window)
例:间隔100ms,窗口10ms → 每100ms扫描10ms
支持后台扫描(如手机APP在后台发现Beacon)
2) 数据过滤能力
基于MAC地址过滤
基于广播数据类型过滤(如只接收iBeacon数据)
RSSI阈值过滤(忽略信号过弱的设备)
3)无连接管理
不处理配对、加密等流程
无法直接控制广播设备(仅接收数据)
3.3 BLE 中心设备(Central)
中心设备(Central)是 BLE(蓝牙低功耗)通信中的核心角色,负责 主动扫描、发起连接 并 管理数据通信。它是构建 BLE 系统的"大脑",在大多数 BLE 应用中起主导作用。
1. 中心设备的核心特点
1) 核心功能
扫描发现外围设备(扫描广播数据)
发起和管理连接
作为GATT客户端(读写服务/特征值)
管理多个连接(部分设备支持)
2)典型设备示例
智能手机/平板电脑
笔记本电脑
智能家居网关
医疗监护仪主控端
2. 工作流程
1)设备发现阶段
2) 连接建立阶段
3. 关键技术特性
1)连接管理
参数 | 说明 | 典型值 |
---|---|---|
连接间隔 | 两次数据交互间隔 | 7.5ms-4s |
从机延迟 | 允许从设备跳过的连接事件 | 0-499 |
监控超时 | 判定连接丢失时间 | 100ms-32s |
优化建议:
低功耗场景:增大间隔(如100ms)
实时性要求高:减小间隔(如15ms)
2) 多设备连接
分时复用机制:在不同连接间隔处理不同设备
连接参数协商:为不同设备设置独立参数
资源限制:受芯片RAM/处理能力限制
3 中心设备 vs 外围设备
特性 | 中心设备(Central) | 外围设备(Peripheral) |
---|---|---|
角色 | 主动方/控制端 | 被动方/被控端 |
功耗 | 相对较高 | 优化更好 |
连接能力 | 可连接多个设备 | 通常只连1个中心 |
典型设备 | 智能手机、网关 | 传感器、穿戴设备 |
3.4 BLE 外设(Peripheral)
外设(Peripheral)是 BLE(蓝牙低功耗)通信中的关键角色,作为 数据提供方 和 被控制端,在蓝牙生态系统中承担着终端数据采集和设备控制的重要功能。
1. 外设的核心特点
1)基本特性
广播自身存在(Advertising)
接受中心设备连接请求
作为GATT服务器(存储并提供数据)
低功耗优化设计
2)典型设备示例
智能手环/手表
医疗传感器(心率、血氧)
智能家居设备(灯泡、门锁)
信标(Beacon)设备
2. 工作流程
1)广播阶段
2) 连接建立
3. 关键技术特性
1) 广播配置
参数 | 说明 | 典型值 |
---|---|---|
广播间隔 | 两次广播间隔时间 | 20ms-10.24s |
广播类型 | ADV_IND/ADV_NONCONN_IND等 | 根据需求选择 |
广播数据 | 设备名称/服务UUID等 | 31字节限制 |
2) 连接管理
参数 | 外设控制能力 | 说明 |
---|---|---|
连接参数更新 | 可请求修改 | 协商最佳参数 |
安全请求 | 可发起配对 | 提升安全性 |
断连处理 | 可重新广播 | 恢复可发现状态 |
4. 外设 vs 中心设备
特性 | 外设(Peripheral) | 中心设备(Central) |
---|---|---|
角色 | 数据提供者 | 数据消费者 |
连接能力 | 通常单连接 | 多连接支持 |
功耗优化 | 深度睡眠支持 | 相对较高 |
典型功耗 | μA级待机 | mA级工作 |
4 应用总结
4.1 组件功能列表
组件 | 作用 | 示例 |
---|---|---|
GATT | 定义数据组织方式 | 客户端-服务器架构 |
Service | 功能分组 | 心率服务(0x180D)、电池服务(0x180F) |
Characteristic | 具体数据项 | 心率值(0x2A37)、电池电量(0x2A19) |
Descriptor | 额外配置 | CCCD(0x2902,控制通知开关) |
4.2 使用要点
-
GATT 是数据组织的框架,服务是功能模块,特征值是具体数据。
-
Notify/Indicate 适用于实时数据推送(如传感器数据)。
-
CCCD(0x2902)是 Notify/Indicate 的关键,客户端必须写入
0x01
启用通知。
相关文章:
BLE协议栈的解析
目录 概述 1 BLE协议栈层次结构 1.1 控制器(Controller) 1.2 主机(Host) 1.3 应用层(Application) 1.3.1 业务层功能 1.3.2 实现方法 2 重要属性介绍 2.1 GATT属性 2.2 服务(Service) 2.3 特征值…...
中小企业MES系统需求文档
适用对象:中小型离散制造企业(年产值1-5亿,员工200-800人) 版本:V1.0 日期:2025年5月2日 一、业务背景与目标 1.1 现状痛点 生产黑箱化:车间进度依赖人工汇报,异常响应延迟>2小…...
邹晓辉教授十余年前关于围棋程序与融智学的思考,体现了对复杂系统本质的深刻洞察,其观点在人工智能发展历程中具有前瞻性意义。我们可以从以下三个维度进行深入解析:
邹晓辉教授十余年前关于围棋程序与融智学的思考,体现了对复杂系统本质的深刻洞察,其观点在人工智能发展历程中具有前瞻性意义。我们可以从以下三个维度进行深入解析: 一、围棋程序的二元解构:数据结构与算法的辩证关系 1.1.形式…...
JAVA继承详细总结
看前摇一摇这篇文章:java 继承 补充:子类能继承父类中的哪些内容? - 小澳子 - 博客园 构造方法的继承规则 Java 中构造方法不会被子类继承。JLS 明确指出“构造方法不是类的成员,因此永远不会被继承”docs.oracle.com。博客原文在“继承内存…...
AntSK:基于大模型的一体化AI知识库解决方案深度解析
随着大模型(如GPT、LLM)技术的飞速发展,企业对智能知识管理和专属AI助手的需求日益增长。AntSK 正是在这一背景下诞生的企业级AI一体机解决方案。本文将从技术架构、核心功能、创新点和应用场景等方面,深入解析 AntSK 如何助力企业…...
C++11新特性_标准库_std::array
std::array 是 C11 标准库引入的一个容器,用于表示固定大小的数组。它定义在 <array> 头文件中。下面为你详细介绍其优势和使用方法。 优势 1. 类型安全 与传统的 C 风格数组不同,std::array 是一个模板类,它的类型信息在编译时就已…...
【AI面试准备】数据治理与GDPR脱敏机制构建
介绍数据治理:构建符合GDPR的测试数据脱敏机制。如何快速掌握,以及在实际工作中如何运用。 数据治理是确保数据质量、安全性和合规性的系统性方法,而构建符合GDPR(《通用数据保护条例》)的测试数据脱敏机制是其中的关…...
A2A Python 教程 - 综合指南
目录 • 介绍• 设置环境• 创建项目• 代理技能• 代理卡片• A2A服务器• 与A2A服务器交互• 添加代理功能• 使用本地Ollama模型• 后续步骤 介绍 在本教程中,您将使用Python构建一个简单的echo A2A服务器。这个基础实现将向您展示A2A提供的所有功能。完成本教…...
Linux:信号(一)
1. 信号是什么 信号的概念 Linux中信号(Signal)是进程间通信的一种基本机制,用于通知进程发生了某种事件或异常。信号是异步的,可能由操作系统、其他进程或进程自身触发。 kill -l 指令查看所有的信号 上面的SIGHUP、SIGINT本质就是define宏定义&…...
数据中台笔记01
一、数据中台大纲 1.1、 课程概述 1)数据中台诞生的背景和历史 核心价值:解决企业"重复造轮子"问题,通过统一平台实现多业务数据关联。典型问题:数据质量监控、血缘关系管理等场景的标准化处理。行业需求:阿里等企业实践验证了中台模式在数据治理中的必要性。2…...
[面试]SoC验证工程师面试常见问题(四)
SoC验证工程师面试常见问题(四) 摘要:作为 SoC 验证工程师,面试中可能会被问及与片内互联技术和具体协议(如 PCIe)相关的问题。这些问题通常旨在评估你对 SoC 架构、互联协议的理解以及验证这些技术的实践经验。以下是针对片内互联技术和 PCIe 协议可能提出的问题…...
流水线相关计算【计算机组成与体系结构】
一些概念 流水线周期 (T_cycle) 最长操作阶段耗时,决定整体节奏。若取指2ns,分析3ns,执行1ns,则流水线周期3ns(取最大值)如《笑傲江湖》中“独孤九剑”的九式,最慢一式&a…...
学习笔记:Qlib 量化投资平台框架 — OTHER COMPONENTS/FEATURES/TOPICS
学习笔记:Qlib 量化投资平台框架 — OTHER COMPONENTS/FEATURES/TOPICS Qlib 是微软亚洲研究院开源的一个面向人工智能的量化投资平台,旨在实现人工智能技术在量化投资中的潜力,赋能研究,并创造价值,从探索想法到实施生…...
值此五一劳动节来临之际,
值此五一劳动节来临之际,谨向全体员工致以节日的问候与诚挚的感谢!正是你们的敬业与奋斗,成就了今天的成绩。愿大家节日愉快,阖家幸福,身体健康! #北京先智先行科技有限公司 #先知AI #节日快乐...
深入理解C++构造函数:从入门到实践
1. 默认构造函数:对象的"出厂设置" 什么是默认构造函数? 没有参数的构造函数当你没有定义任何构造函数时,编译器自动生成用于创建对象时不传递参数的情况 class Smartphone { public:// 成员初始化方法一: 函数体内初始化Smartp…...
【安装指南】DevC++的安装和使用(超级详细)
目录 一、DevC 介绍 二、DevC 下载与安装 2.1 DevC 的下载方式 2.2 DevC 的安装 三、代码编写 3.1 新建源文件 3.1.1 步骤演示 3.1.2 快捷键指南 3.2 新建项目 3.3 多文件的效果演示 3.3.1 方式一 3.3.2 方式二 四、项目中的文件介绍 五、调试的使用 5.1 设置断…...
计算机组成原理实验(6) 微程序控制单元实验
实验六 微程序控制单元实验 一、实验目的 1、熟悉微程序控制器的原理 2、掌握微程序编制、写入并观察运行状态 二、实验要求 按照实验步骤完成实验项目,掌握设置微地址、微指令输出的方法 三、实验说明 3.1 微程序控制单元的构成:(…...
从文本到向量:揭秘词向量转换的奥秘与实践
从文本到向量:揭秘词向量转换的奥秘与实践 在自然语言处理(NLP)的世界里,计算机处理的是数字和向量,而人类交流使用的是文本语言。如何让计算机理解文本语义并进行分析处理呢?词向量转换便是其中的关键一环…...
在 Windows 中安装 Pynini 的记录
#工作记录 概述 Pynini 是一个用于加权有限状态文法编译的 Python 库,广泛应用于自然语言处理(NLP)领域。以下记录旨在用于回顾和帮助大家在 Windows 系统中安装 Pynini。 安装思路: 优先用conda虚拟环境 或 在python3.12的vir…...
美丽天天秒链动2+1源码(新零售商城搭建)
什么是链动21模式? 链动21主要是建立团队模式,同时快速提升销量。是目前成员中速度最快的裂变模式。链动21模式合理合规,同时激励用户 公司的利润分享机制,让您在享受购物折扣的同时,也能促进并获得客观收益。 链动21模…...
目标检测中的损失函数(三) | SIoU WIoUv1 WIoUv2 WIoUv3
🚀该系列将会持续整理和更新BBR相关的问题,如有错误和不足恳请大家指正,欢迎讨论!!! SCYLLA-IoU(SIoU)来自挂在2022年arxiv上的文章:《SIoU Loss: More Powerful Learnin…...
51、【OS】【Nuttx】【OSTest】参数解析:参数处理过程
背景 接上两篇 blog: 49、【OS】【Nuttx】【OSTest】参数解析:测试项 50、【OS】【Nuttx】【OSTest】参数解析:函数定义 getopt_common 来看 getopt_common 的实现过程 首先校验输入参数是否为空,如果没有输入参数࿰…...
python实现基于Windows系统计算器程序
Python实现Windows系统计算器程序(含高级功能) 下面我将介绍如何使用Python创建一个功能完整的Windows风格计算器程序,包含基本运算和高级数学功能。 1. 使用Tkinter实现基础计算器 import tkinter as tk from tkinter import ttk import …...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません (~た・~ない)ほうがいいです
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません &(~た・~ない)ほうがいいです 1、前言(1)情况说明(2)工程师…...
AI Rack架构高速互连的挑战:损耗设计与信号完整性的设计框架
在AI驱动的时代,系统设计已经从单一PCB的视角,逐步转向以整个rack为单位来考量。 对于信号完整性而言,焦点以不再局限于单一PCB上的损耗,而是扩展到芯片与芯片之间的端到端互连损耗(end-to-end interconnect loss&…...
React useCallback函数
应用场景:父组件向子组件传递函数类型的props时...
【CTFer成长之路】XSS的魔力
XSS闯关 level1 访问url: http://c884a553-d874-4514-9c32-c19c7d7b6e1c.node3.buuoj.cn/level1?usernamexss 因为是xss,所以对传参进行测试,修改?username1,进行访问 会发现username参数传入什么,welcome之后就…...
多模态RAG演进-MRAG1.0->MRAG2.0->MRAG3.0
MRAG1.0 MRAG1.0是MRAG框架的初始阶段,通常被称为“伪MRAG”。它是对RAG范式的简单扩展,支持多模态数据。MRAG1.0通过利用现有的基于文本的检索和生成机制,实现了从RAG到MRAG的平稳过渡。 MRAG1.0的架构包括三个关键组件: 文档解…...
超预期!淘宝闪购提前开放全国全量,联合饿了么扭转外卖战局
饿了么由守转攻。 作者|景行 编辑|杨舟 淘宝饿了么,终于落子,“淘宝闪购”,横空出世,仅仅2天,业务加速。 4月30日上午,当外卖战场陷入沉寂时,淘宝宣布将即时零售业务“小时达”升级为“淘宝闪…...
Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战
背景: PCIe Passthrough 技术允许虚拟机直接访问物理GPU设备,绕过宿主机系统,从而获得接近原生性能的图形处理能力. 参照:从Proxmox VE开始:安装与配置指南。在R740服务器完成了proxmox的安装,并且安装了一…...
算法技巧——打表
什么是打表? 打表,是一个信息学专用术语,意指对一些题目,通过打表技巧获得一个有序表或常量表,来执行程序某一部分,优化时间复杂度。这种算法也可用于在对某种题目没有最优解法时,用来得到分数的…...
JavaScript基础-逻辑运算符
在JavaScript编程中,逻辑运算符用于判断表达式的真假,并根据结果执行特定的操作。掌握逻辑运算符是理解条件控制结构的关键之一。本文将详细介绍JavaScript中的三种主要逻辑运算符:&&(逻辑与)、||(…...
P20:Inception v3算法实战与解析
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 使用InceptionV3实现天气识别 一、模型结构 Inception v3是Google团队在2015年提出的第三代Inception模型,属于卷积神经网络(CNN&…...
C++ - 数据容器之 list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
一、创建与初始化 引入 <list> 并使用 std 命名空间 #include <list>using namespace std;创建一个空 list list<int> my_list;创建一个包含 5 个元素,每个元素初始化为 0 的 list list<int> my_list(5);创建一个包含 5 个元素…...
deepseek 技巧整理
1、导出word 和excel 功能,在使用以下提示词。 请帮我列出减肥期间可以吃的水果,并分析该水果含有的营养元素,以表格的形式星现。1.要以html的方式输出 2.要可以直接运行 3.页面要提供可以直接下载word和excel功能...
柔性PZT压电薄膜多维力传感器在微创手术机器人的应用
随着医疗技术的迅速发展,微创手术机器人正在成为外科手术的重要助手。与传统开放式手术相比,微创手术创伤小、恢复快、感染率低,对手术器械的精细操控性和感知能力提出了更高要求。多维力传感器作为机器人“触觉”的核心部件,对提…...
Java学习手册:Spring Boot 自动配置与快速开发
一、Spring Boot 自动配置概述 Spring Boot 的自动配置是其核心特性之一,它能够根据项目的依赖和配置自动地进行 Spring 应用程序的配置。自动配置的工作流程如下: SpringBootApplication 注解 :这是自动配置的起点,它是一个组合…...
ValueError: expected sequence of length 8 at dim 2 (got 0)
问题描述 在PyCharm中使用强化学习运行Python代码时报错ValueError: expected sequence of length 8 at dim 2 (got 0)。 问题原因 实际上原因就是gym中的env对象的reset、step等方法的返回值作了改动 解决方法 1、第一步: 将代码块中的(记得改的需…...
AI赋能新媒体运营:效率提升与能力突破实战指南
AI赋能新媒体运营:效率提升与能力突破实战指南 在信息爆炸的新媒体时代,运营人员面临着内容产出压力大、数据分析复杂、用户互动需求高等多重挑战。AI技术的迅猛发展为新媒体运营带来了革命性的变革可能。本文将为您揭示如何利用AI工具提升工作效率、培…...
单词规律(简单)
思路和同构字符串那道题一样。、但是这道题要注意的地方就是,检查 pattern 和 s 的单词数量是否一致以及在进行字符串比较的时候应该用equals来进行比较,而不能用“!”,“!”比较的是对象引用而非内容。 class Soluti…...
QGraphicsView QGraphicsScene QGraphicsItem 的关系
在Qt的图形视图框架中,QGraphicsView、QGraphicsScene和QGraphicsItem 三者协同工作,构成一个分层的结构,用于高效管理和显示复杂的图形界面。以下是它们的关系和职责的详细说明: 1. 核心角色 类名职责类比QGraphicsItem场景中的…...
re题(52)BUUCTF-[FlareOn5]Minesweeper Championship Registration
BUUCTF在线评测 jadx打开if条件就是flag...
c++环境和vscode常用的一些有用插件
环境 WSL需要安装cmake 编译器g14 应该是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件时候自动执行vscode 的cmake吧 error lens 方便每次显示错误和警告的提示懒得每次点击去看错误 Edit Sugge…...
UE自动索敌插件Target System Component
https://www.fab.com/zh-cn/listings/9088334d-3bde-4e10-a937-baeb780f880f 一个完全用 C 编写的 UE插件,添加了对简单相机锁定/瞄准系统的支持。它最初在蓝图中开发和测试,然后转换并重写为 C 模块和插件。 特征: 可通过一组可在…...
从括号匹配看栈:数据结构入门的实战与原理
在计算机科学的世界里,数据结构是程序员的 “瑞士军刀”,不同的数据结构适用于不同的场景,能高效解决各类问题。其中,栈作为一种简单却强大的数据结构,在很多实际应用中发挥着关键作用。今天,我们就通过一个…...
ReLU函数及其Python实现
ReLU函数及其Python实现 文章目录 ReLU函数及其Python实现1. ReLU函数定义2. Python实现3. 在深度学习中的应用总结 1. ReLU函数定义 ReLU(Rectified Linear Unit,修正线性单元)函数是深度学习中常用的激活函数之一。它的定义非常简单&#…...
Rain World 雨世界 [DLC 解锁] [Steam Epic] [Windows SteamOS]
Rain World 雨世界 [DLC 解锁] [Steam & Epic] [Windows & SteamOS] 需要有游戏正版基础本体,安装路径不能带有中文,或其它非常规拉丁字符; DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明…...
n8n 工作流画布上下左右移动的操作方法
n8n 工作流画布上下左右移动的操作方法 1. n8n 工作流画布上下移动2. n8n 工作流画布左右移动3. n8n 工作流画布扩大和缩小4. n8n 工作流画布缩放到适合 1. n8n 工作流画布上下移动 鼠标滚轮向上滚动是向上移动鼠标滚轮向下滚动是向下移动 2. n8n 工作流画布左右移动 按照Shi…...
Linux 常用命令合集
一、用户权限管理 切换管理员身份 sudo su:普通用户临时获取 root 权限,需输入当前用户密码。管理员提示符:root主机名:路径#。退出管理员:exit,返回普通用户状态。 以管理员身份执行命令 sudo 命令 参数:…...
B站Michale_ee——ESP32_IDF SDK——FreeRTOS_7 流数据缓冲区、消息缓冲区
一、Stream Buffer流数据缓冲区 流数据缓冲区用来处理像音频之类的流数据; 1.API简介 (1)创建流数据缓冲区 (2)向流数据缓冲区中发送数据 (3)从流数据缓冲区中接收数据 2.示例代码及运行结果…...