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

【0x0037】HCI_Write_Link_Supervision_Timeout命令详解

目录

一、命令概述

二、命令格式及参数说明

2.2. Handle

三、生成事件及参数

3.1.  HCI_Command_Complete 事件

3.2. Status

3.3. Handle

四、命令执行流程

4.1. 命令准备阶段

4.2. 命令传输阶段

4.3. 命令处理阶段(控制器端)

4.4. 返回结果阶段

4.5. 事件通知阶段(如果未屏蔽)

4.6. 示例代码

五、应用场景

六、注意事项

6.1. 角色限制

6.2. 参数设置

6.3. 事件处理

6.4. 兼容性考虑

6.5. 连接稳定性与节能的平衡

6.6. 安全性考虑


HCI_Write_Link_Supervision_Timeout 命令是用于设置蓝牙基本速率/增强数据速率(BR/EDR)控制器中的链路监督超时(Link Supervision Timeout, LSTO)值的命令。链路监督超时是指在一定时间内如果没有接收到来自对端设备的数据包,则认为链路已经丢失,设备将断开连接。这个命令对于管理蓝牙连接的稳定性和资源非常关键。

一、命令概述

HCI_Write_Link_Supervision_Timeout 命令是蓝牙HCI(Host Controller Interface)协议中用于设置特定ACL(Asynchronous Connection-Less)连接的链路监督超时的命令。它允许主机(Host)为特定的蓝牙连接设置一个链路监督超时值。在蓝牙设备的管理和连接维护中起着重要作用。

  • 当主机(Host)向控制器(Controller)发送此命令时,它指定了一个连接句柄和期望的链路监督超时值
  • 如果控制器作为外设(Peripheral)角色,并且主机尝试修改这个值,控制器将返回错误代码“命令不允许”(Command Disallowed,错误码0x0C
  • 使用的连接句柄应该是指向目标设备的ACL连接。执行此命令后,该设备的其他同步连接句柄(Synchronous Handles)的链路监督超时值也将被设置为相同的值。 

二、命令格式及参数说明

HCI_Write_Link_Supervision_Timeout 命令的格式遵循蓝牙核心规范中定义的HCI命令结构。

该命令的详细格式: 

  • Opcode(操作码):

    • OGF(Operation Group Field): 0x03表示该命令属于链路控制命令组。

    • OCF(Operation Code Field): 0x0037表示该命令是设置链路监督超时命令。

    • 完整的Opcode: 0x03 0x0037 或组合为 0x0C37

  • Parameter Total Length(参数总长度):

    • 长度为1个字节,表示后续参数的总长度。

    • 对于HCI_Write_Link_Supervision_Timeout命令,参数总长度固定为4个字节(2个字节用于连接句柄,2个字节用于链路监督超时值)。

  • Parameters(参数):

    • Connection Handle(连接句柄):

      • 长度:2个字节。

      • 用于唯一标识一个ACL连接。

    • Link Supervision Timeout(链路监督超时值):

      • 长度:2个字节。

      • 表示链路监督超时的值,单位为0.625毫秒的倍数。例如,如果设置为0x0200,则超时时间为0x0200 * 0.625毫秒 = 512毫秒。

2.2. Handle

Handle 是指一个用于标识特定BR/EDR控制器连接的连接句柄(Connection_Handle)。在 HCI_Write_Link_Supervision_Timeout 命令中用于指定哪个连接的链路监督超时值将被写入。

 范围:从 0x0000 到 0x0EFF。这个范围限制了可以标识的连接数量,因为连接句柄只有 12 位有效。

Link_Supervision_Timeout用于定义蓝牙BR/EDR连接在没有收到来自对等设备的任何数据包时可以保持活动状态的最长时间。这个参数在 HCI_Write_Link_Supervision_Timeout 命令中用于设置特定连接的链路监督超时值。

  • 0x0000:表示没有设置链路监督超时,但在实际应用中,通常不是有效的设置,因为蓝牙核心规范为控制器定义了一个强制范围。
  • N = 0xXXXXN 是一个十六进制值,表示以BR/EDR基带时隙为单位的数量。链路监督超时值是通过将 N 乘以 0.625 毫秒来计算的,其中 0.625 毫秒是一个基带时隙的持续时间。
    • 时间范围:从 0.625 毫秒到 40.96 秒
    • 默认值0x7D00表示 20 秒的超时时间
    • 控制器的强制范围0x0190 到 0xFFFF;意味着超时值可以从 1 个基带时隙(即 0.625 毫秒)到 65535 个基带时隙(即约 40.96 秒)不等。另外,0x0000 可以表示无限超时(尽管在实际应用中,可能需要特定的实现或配置)。

三、生成事件及参数

3.1.  HCI_Command_Complete 事件

当 HCI_Write_Link_Supervision_Timeout 命令完成时,将生成一个 HCI_Command_Complete 事件。这个事件是HCI层用来通知主机命令已经执行完毕的标准机制。

  • 事件内容

    • 命令操作码(Opcode):标识触发此事件的HCI命令。
    • 返回参数:包括的StatusHandle(如果适用)。Status字段将指示命令是否成功执行(0x00表示成功,其他值表示失败及相应的错误代码)。如果命令成功,Handle字段将包含被更新链路监督超时值的连接句柄。
  • 事件处理:主机接收到HCI_Command_Complete事件后,将检查Status字段以确定命令是否成功执行。如果命令失败,主机可能会采取适当的错误处理措施,如重试命令、记录错误日志或通知用户。

3.2. Status

Status 参数用于表明 HCI_Write_Link_Supervision_Timeout 命令的执行情况。

  • 当 Status 的值为 0x00 时,代表 HCI_Write_Link_Supervision_Timeout 命令已成功执行。表示系统已成功更新了指定连接的链路监督超时值。
  • 如果 Status 的值介于 0x01 到 0xFF 之间,意味着命令执行失败。此时,具体的错误代码将提供有关失败原因的详细信息。蓝牙Controller错误代码全面概览_蓝牙错误代码-CSDN博客

3.3. Handle

Handle 参数用于指定哪个连接的链路监督超时值被 HCI_Write_Link_Supervision_Timeout 命令所更新。

HCI_Write_Link_Supervision_Timeout 命令参数中的 Handle 格式相同,用于确认操作对应的连接。如果命令执行成功,返回的 Handle 应该与发送命令时使用的 Handle 一致;如果出现错误,返回的 Handle 可能用于帮助定位问题连接。

四、命令执行流程

4.1. 命令准备阶段

  • 确定目标连接句柄:主机确定要设置链路监督超时(LSTO)值的蓝牙连接的唯一标识符(Connection_Handle),该句柄必须在0x0000到0x0EFF的范围内。
  • 设置超时值:主机设置所需的LSTO值,该值以0.625毫秒为单位,范围是0x0001到0xFFFF
  • 构建命令包:主机按照HCI命令格式,使用操作码0x0037,并附加Handle和Link_Supervision_Timeout参数,构建完整的命令数据包。

4.2. 命令传输阶段

  • 发送命令:主机通过HCI接口(如UART、USB等)将构建好的命令数据包发送给蓝牙控制器。

4.3. 命令处理阶段(控制器端)

  • 接收并解析命令:控制器接收命令包,并检查其格式是否正确。
  • 权限和范围检查
    • 控制器验证Handle对应的连接角色,确保不是从设备发出的命令(从设备不允许设置LSTO)。
    • 控制器检查Handle和LSTO参数是否在有效范围内。
  • 更新链路监督超时值:如果所有检查都通过,控制器将更新指定连接的LSTO值,包括可能的同步连接。

4.4. 返回结果阶段

  • 构建返回包:控制器根据命令执行结果构建返回包,包括Status和Handle参数。
  • 发送返回包:控制器通过HCI接口将返回包发送回主机。
  • 接收并处理返回结果
    • 主机接收返回包,检查Status参数以确定命令是否成功。
    • 根据Status值,主机执行相应的后续操作,如记录日志、更新状态或报告错误。

4.5. 事件通知阶段(如果未屏蔽)

  • 生成并发送事件:控制器生成HCI_Command_Complete事件(除非被屏蔽),并通过HCI接口发送给主机。
  • 接收并处理事件:主机接收事件,进一步确认命令已完成,并根据需要进行其他处理。

4.6. 示例代码

以下是一个简化的示例代码框架,用于说明如何在C语言中构建和发送该命令,以及如何处理响应。请注意,这只是一个示例,并不包含实际的硬件接口代码或错误处理细节。

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 假设有一个HCI接口库提供以下函数
// hci_send_command(uint8_t *packet, uint16_t length);
// hci_receive_event(uint8_t *event, uint16_t *length);// 示例:HCI命令包结构
typedef struct {uint16_t opcode;       // 操作码uint8_t  param_len;    // 参数长度uint16_t handle;       // 连接句柄uint16_t lsto;         // 链路监督超时值
} hci_write_lsto_cmd_t;// 示例:HCI事件包结构(简化)
typedef struct {uint8_t  evt_code;     // 事件代码uint8_t  plen;         // 参数长度uint8_t  status;       // 状态码uint16_t handle;       // 连接句柄(可能包含在返回包中)// ... 其他可能的参数
} hci_command_complete_evt_t;// 函数:构建并发送HCI_Write_Link_Supervision_Timeout命令
void send_write_lsto_command(uint16_t handle, uint16_t lsto) {hci_write_lsto_cmd_t cmd;cmd.opcode = 0x0037; // HCI_Write_Link_Supervision_Timeout 操作码cmd.param_len = 4;   // 参数长度(2字节handle + 2字节lsto)cmd.handle = handle;cmd.lsto = lsto;uint8_t packet[HCI_COMMAND_PACKET_MAX_SIZE]; // 假设定义了最大包大小memset(packet, 0, sizeof(packet));// 将命令结构复制到包中(这里需要适当的字节序转换,如果必要)memcpy(packet, &cmd, sizeof(cmd));// 发送命令hci_send_command(packet, sizeof(cmd));
}// 函数:处理HCI_Command_Complete事件
void handle_command_complete_event(uint8_t *event, uint16_t length) {if (length < sizeof(hci_command_complete_evt_t)) {// 事件包太短,无法处理return;}hci_command_complete_evt_t *evt = (hci_command_complete_evt_t *)event;if (evt->evt_code == HCI_EVENT_COMMAND_COMPLETE) {if (evt->status == 0x00) {// 命令成功执行printf("HCI_Write_Link_Supervision_Timeout command succeeded for handle 0x%04X\n", evt->handle);} else {// 命令执行失败printf("HCI_Write_Link_Supervision_Timeout command failed with status 0x%02X for handle 0x%04X\n", evt->status, evt->handle);}} else {// 不是命令完成事件printf("Unexpected event code 0x%02X\n", evt->evt_code);}
}// 主函数:示例使用
int main() {uint16_t handle = 0x0001; // 示例连接句柄uint16_t lsto = 0x0200;   // 示例链路监督超时值(512 * 0.625ms = 320ms)// 发送HCI_Write_Link_Supervision_Timeout命令send_write_lsto_command(handle, lsto);// 等待并处理HCI事件(这里需要实现一个循环来不断检查新事件)// 示例中省略了这部分,因为它通常涉及到异步I/O和事件循环机制// ...// 假设在某个时刻,我们收到了一个HCI_Command_Complete事件// uint8_t event_data[] = { ... }; // 假设这是接收到的事件数据// uint16_t event_length = ...;    // 假设这是接收到的事件长度// handle_command_complete_event(event_data, event_length);return 0;
}

在将命令结构复制到包中时,可能需要进行字节序转换(大端或小端)。这取决于HCI接口和蓝牙控制器的要求。

五、应用场景

HCI_Write_Link_Supervision_Timeout命令允许用户根据具体的应用场景和设备需求,灵活地设置链路监督超时(LSTO)的值。这一特性使得该命令在多个方面都有广泛的应用。

  • 蓝牙连接稳定性维护:在不同环境下,通过调整LSTO的值,可以优化蓝牙连接的稳定性。例如,在干扰较大的环境中缩短超时时间,以便更快地检测到连接问题;在对连接稳定性要求极高的场景中延长超时时间,以减少因短暂数据传输间隔而误判连接中断的情况。

  • 节能管理:对于电池供电的蓝牙设备,合理设置LSTO值可以在一定程度上实现节能。当设备在一段时间内没有数据交互且超时时间到达后,蓝牙控制器可以将设备置于低功耗模式或断开连接,从而减少能耗。

  • 多设备连接协调:在多设备连接到一个主设备的场景中,通过为不同设备设置不同的LSTO值,可以优化资源分配,提高连接效率和用户体验。例如,为正在使用的设备设置较长的超时时间,而为不常使用的设备设置较短的超时时间。

  • 蓝牙协议栈开发与测试:在蓝牙协议栈的开发和测试阶段,使用HCI_Write_Link_Supervision_Timeout命令可以模拟各种连接场景和故障情况,从而发现协议栈实现中的潜在问题,并优化其性能和稳定性。

HCI_Write_Link_Supervision_Timeout命令在蓝牙通信中具有广泛的应用场景和重要的实用价值。通过合理设置LSTO的值,可以优化连接稳定性、实现节能管理、协调多设备连接以及支持蓝牙协议栈的开发与测试。在实际应用中,开发人员和工程师应根据具体需求和场景来合理设置LSTO的值,以实现最佳的蓝牙通信性能和用户体验。

六、注意事项

开发者需要关注以下几个关键方面,以确保蓝牙通信的性能和用户体验得到优化:

6.1. 角色限制

  • 只有在蓝牙设备作为主设备(Master)角色时,才能发送此命令。
  • 从设备(Slave)发送此命令将失败,并返回Command Disallowed错误码。
  • 开发者需要在设计蓝牙应用程序或进行系统集成时,明确设备角色,并在合适的角色下使用此命令。

6.2. 参数设置

  • 正确设置连接句柄(Connection Handle)和LSTO值。
  • 连接句柄需确保在有效范围内(0x0000 - 0x0EFF)。
  • LSTO值需以0.625毫秒为单位进行转换,并设置在允许的范围内(0x0001 - 0xFFFF)。
  • 不恰当的参数设置可能导致命令执行失败或影响蓝牙连接的正常功能。

6.3. 事件处理

  • 应用程序或系统需正确处理HCI_Command_Complete事件。
  • 未及时处理该事件可能导致系统无法得知命令执行结果,影响后续操作。
  • 在实时性要求较高的应用中,需特别注意事件处理的及时性。

6.4. 兼容性考虑

  • 不同蓝牙设备和芯片组对命令的实现细节可能存在差异。
  • 开发者需要进行充分的测试,确保命令在各种目标设备上都能正常工作。
  • 针对老旧设备或特殊设备,可能需要进行兼容性处理。

6.5. 连接稳定性与节能的平衡

  • LSTO值的设置需在连接稳定性和节能之间取得平衡。
  • 较短的LSTO值可快速检测连接问题,但可能增加功耗和连接断开频率。
  • 较长的LSTO值可减少连接断开频率,但可能延迟对连接问题的检测。

6.6. 安全性考虑

  • 在安全性要求较高的应用中,需对LSTO的设置进行严格的控制和验证。
  • 防止恶意设备通过修改LSTO值来干扰蓝牙通信。

通过合理设置LSTO值,并遵循上述注意事项,可以优化蓝牙通信的性能和用户体验。

综上所述,HCI_Write_Link_Supervision_Timeout 命令是蓝牙设备管理中一个重要的命令,它允许主机根据需要调整链路监督超时值,从而优化连接的稳定性和资源使用。在使用此命令时,需要仔细考虑其对设备性能和功耗的影响,并确保符合蓝牙规范和应用需求。

相关文章:

【0x0037】HCI_Write_Link_Supervision_Timeout命令详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Write_Link_Supervision_Timeout 命令格式 2.2. Handle 2.3. Link_Supervision_Timeout 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 3.3. Handle 四、命令执行流程 4.1. 命令准备阶段 4.…...

Linux下如何进行内存泄漏分析

前言 正文 一、环境的安装 1、tar –xf valgrind-3.17.0.tar.bz2 2、cd valgrind-3.17.0 3、./configure // 运行配置脚本生成makefile文件&#xff0c;可以--help查看配置项&#xff0c;自行按需配置&#xff0c;比如修改编译工具、修改安装路径等 4、make 5、make…...

Colyseus Metadata 详解

Colyseus Metadata 详解 Colyseus 是一个专注于实时多人在线游戏和应用的框架&#xff0c;它的 metadata 功能为每个房间提供了一个灵活且有用的机制&#xff0c;用来存储和共享与房间相关的非实时信息。这些信息可以用来描述房间、标记房间状态、或提供额外的房间配置选项。 …...

C语言day5:shell脚本

一、练习题1 定义一个find函数&#xff0c;查找ubuntu和root的gid并使用变量接收结果 二、练习题2 定义一个数组&#xff0c;写一个函数完成对数组的冒泡排序 三、练习题3 使用break求1-100中的质数&#xff08;质数&#xff1a;只能被1和它本身整除&#xff0c;如&#xff1a;…...

微记录-Linux字符设备的write函数如何避免文件系统重复调用?

背景 linux字符设备的fops实现read write的时候&#xff0c;尤其是write&#xff0c;因为会指定写入的总长度&#xff0c;那么如果如果驱动中单次write最大个数小于需求len的时候&#xff0c;文件系统就会多次调用到write。他是根据wirte函数的返回值来判断的。如果返回值不是…...

本地调试自定义Maven Plugin步骤

添加自定义插件到dependencies 找到对应依赖的类&#xff0c;打上断点。 debug运行插件。...

二、github基础

Github基础 备用github.com网站一、用户界面-Overview&#xff08;概览&#xff09;1用户信息2 导航栏3 热门仓库4 贡献设置5贡献活动6搜索和筛选7自定义收藏8贡献统计9最近活动10其他链接 二、用户界面-Repositories&#xff08;仓库&#xff09;1 libusb_stm322 savedata3 Fi…...

如何在 Vue 2 中使用 Swiper 5.4.5 处理静态与后端数据不能切换问题

一、文章大纲 1.前言 介绍 Swiper 作为一款强大的轮播组件,常用于处理图片、文章、商品等内容的滑动展示。 在 Vue.js 项目中集成 Swiper,尤其是在 Vue 2 中使用,常见的两种数据来源:静态数据与后端数据。 在 Vue 2 项目中集成 Swiper 5.4.5 2.如何通过 npm 安装 Swiper…...

request.getSession().getAttribute(Constants.ADMIN_ID)

你提出了一个非常好的问题&#xff01; 确实&#xff0c;使用 request.getSession().getAttribute(Constants.ADMIN_ID) 也能从 Session 中获取属性&#xff0c;那么 SessionAttribute 注解和这种方式到底有什么区别呢&#xff1f; request.getSession().getAttribute(Constan…...

线性回归模型的构建与训练

1.基本的导入与配置 # To support both python 2 and python 3 from __future__ import division, print_function, unicode_literals# Common imports import numpy as np import pandas as pd import os# to make this notebooks output stable across runs np.random.seed(4…...

【JavaWeb后端学习笔记】MySQL的常用函数(字符串函数,数值函数,日期函数,流程函数)

MySQL函数 1、字符串函数2、数值函数3、日期函数4、流程函数 1、字符串函数 函数说明concat(s1, s2, …, sn)字符串拼接&#xff0c;将 s1, s2, …, sn 拼接成一个字符串lower(str)将字符串 str 全部转为小写upper(str)将字符串 str 全部转为大写lpad(str, n, pad)左填充&…...

【推送】主流的服务端推送技术的对比

推送技术的对比 以下是主流的服务端推送技术的对比表格&#xff0c;涵盖WebSocket、Server-Sent Events (SSE)、Long Polling、HTTP/2 Push和Comet&#xff1a; 特性WebSocketServer-Sent Events (SSE)Long PollingHTTP/2 PushComet通信方向双向单向&#xff08;服务器到客户…...

直观解读 JuiceFS 的数据和元数据设计(一)

大家读完觉得有意义和帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 JuiceFS 高层架构与组件2 搭建极简 JuiceFS 集群 2.1 搭建元数据集群2.2 搭建对象存储&#xff08;MinIO&#xff09; 2.2.1 启动 MinIO server2.2.2 创建 bucket2.3 下载 juicefs 客户端2.4 创…...

nginx配置文件没有语法颜色

第一种办法&#xff1a; nginx-1.26.2这个目录是通过解压 nginx-1.26.2.tar.gz&#xff0c;nginx官网下的 将这四个目录复制到/usr/share/vim/vimfiles/目录下 cp -ar ./* /usr/share/vim/vimfiles/ 再次进入nginx配置文件可以看到已经有颜色了 第二种方法&#xff1a; …...

PCB层叠结构设计

PCB层叠结构设计 层叠结构设计不合理完整性相关案例&#xff1a;在构成回流路径时&#xff0c;由于反焊盘的存在&#xff0c;使高速信号回流路径增长&#xff0c;造成信号回流路径阻抗不连续&#xff0c;对信号质量造成影响。 PCB层叠结构实物&#xff1a;由Core 和 Prepreg&a…...

电子应用设计方案83:智能 AI 打印机系统设计

智能 AI 打印机系统设计 一、引言 智能 AI 打印机系统旨在提供更高效、便捷和个性化的打印服务&#xff0c;融合了人工智能技术&#xff0c;以满足不断变化的用户需求。 二、系统概述 1. 系统目标 - 实现自动纸张检测、调整打印参数&#xff0c;适应不同纸张类型和尺寸。 - 具…...

windows安装rsync Shell语句使用rsync

sh脚本里使用 rsync功能&#xff0c;需要提前布置rsync环境 第一步&#xff0c;下载 libxxhash-0.8.2-1-x86_64.pkg.tar 下载压缩包地址 Index of /msys/x86_64/https://repo.msys2.org/msys/x86_64/ 下载对应版本&#xff0c;没特殊需求下载最高版本就行了 解压缩压缩包 …...

Django 模型

Django 模型 Django 模型是 Django 框架的核心组件之一,它用于定义应用程序的数据结构。在 Django 中,模型是 Python 类,通常继承自 django.db.models.Model。每个模型类代表数据库中的一个表,模型类的属性对应表中的字段。 1. 创建模型 创建 Django 模型非常简单。首先…...

CentOS — 压缩解压

文章目录 一、tar二、zip、unzip三、gzip、gunzip四、bzip2、bunzip2 一、tar 文件格式&#xff1a;.tar 压缩格式&#xff1a;tar [-参数] *.tar 目录|文件 解压格式&#xff1a;tar [-参数] *.tar [-C 目标目录] 参数 -c&#xff1a;create&#xff0c;创建&#xff0c;创…...

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画&#xff0c;让我们的角色动了起来&#xff0c;这一切变得比较有意思了起来。不过我们发现&#xff0c;角色虽然说是动了起来&#xff0c;不过只是在不停地原地踏步而已&#xff0c;而且我们也没有办法通过键盘来控制这个角色来进行移动…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...