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

STM32外设AD-定时器触发 + DMA读取模板

STM32外设AD-定时器触发 + DMA读取模板

  • 一,方法思路
  • 二,定时器基础与配置
    • 1,定时器时钟源 (Clock Source)
    • 2,预分频器 (Prescaler - PSC)
    • 3,自动重装载寄存器 (Auto-Reload Register - ARR) / 周期 (Period)
    • 4,触发输出 (Trigger Output - TRGO)
  • 三,CubeMX配置
  • 四,代码实现
  • 五,关键优势与注意事项
    • 1,主要优势:
    • 2,注意事项:

一,方法思路

前面两种方法各有优劣。轮询法效率低,DMA+定时处理法数据处理不够实时。当我们需要以较为固定的频率进行 ADC 采样,并在采集完一批数据块后进行集中处理时,可以结合定时器、DMA 和中断。

这种方法的思路是:

  1. 定时器 (Timer) 作为"启动信号" (可选,或由软件触发): 可以配置一个定时器以固定频率产生触发信号(TRGO),启动 ADC 转换序列。或者,转换序列由软件直接启动。ADC 配置为外部触发模式(如果使用定时器)或软件触发。
  2. DMA “搬运工”: 配置 DMA 通道,在每次 ADC 转换完成后(或根据触发信号),自动将结果从 ADC 数据寄存器搬运到内存缓冲区 (DMA Buffer)。DMA 通常设置为普通模式 (Normal Mode) 或一次传输后停止。
  3. DMA 中断报告"整批送达": 配置 DMA,使其在完成一次完整的缓冲区传输(填满整个 DMA Buffer)时产生一个传输完成中断 (Transfer Complete Interrupt - TC)。
  4. 中断服务程序 (ISR) “标记完成”: 在 DMA 的 TC 中断服务程序中(通常在 HAL_ADC_ConvCpltCallback 回调中体现):
    4.1 停止 DMA 传输 (HAL_ADC_Stop_DMA)。
    4.2 设置一个标志位 (Flag),通知主循环或后台任务:“一个数据块已采集完成!”
  5. 后台任务处理并重启: 主循环或后台任务检测到标志位后:
    5.1 清空标志位。
    5.2 处理 DMA 缓冲区中的数据(例如,提取、计算、滤波等)。
    5.3 处理完成后,重新启动 ADC 的 DMA 传输 (HAL_ADC_Start_DMA),准备采集下一个数据块。

类比: 你命令一个机器人 (DMA+ADC) 去收集指定数量 (BUFFER_SIZE) 的样本。机器人收集完毕后,会举起一个牌子 (设置 Flag) 并停下工作 (HAL_ADC_Stop_DMA)。你 (CPU) 看到牌子后,走过去取走机器人收集的所有样本进行处理。处理完后,你再次命令机器人开始新一轮的收集 (HAL_ADC_Start_DMA)。

这种方式允许在采集间隙处理数据,但处理和重启 DMA 期间可能会丢失连续信号。适用于对数据块进行分析处理,而非严格连续实时处理的场景。

二,定时器基础与配置

上面的方法需要定时器精确控制每次数据块采集的启动频率,你需要根据期望的数据块采集间隔来设置定时器的触发频率。如何设置呢?

1,定时器时钟源 (Clock Source)

定时器需要一个稳定的时钟源来计数。通常选择内部时钟 (Internal Clock),其频率与 APB 总线时钟相关(例如,如果 APB1 时钟是 72MHz,那么 TIM3 的时钟基频通常也是 72MHz 或其倍频)。

2,预分频器 (Prescaler - PSC)

定时器的输入时钟频率可能很高(如 72MHz)。预分频器允许你对输入时钟进行分频,得到一个较低的计数频率 (Counter Clock)。

Counter Clock = Timer Clock / (Prescaler + 1)

例如,Timer Clock = 72MHz,Prescaler = 71,则 Counter Clock = 72,000,000 / (71 + 1) = 1,000,000 Hz = 1MHz。这意味着计数器每 1 微秒 (µs) 计一次数。

3,自动重装载寄存器 (Auto-Reload Register - ARR) / 周期 (Period)

ARR 决定了计数器从 0 计数到多少时产生一个"溢出"或"更新"事件 (Update Event - UEV),并自动重新从 0 开始计数。这个值决定了更新事件的频率:

Update Event Frequency = Counter Clock / (ARR + 1)

继续上面的例子,Counter Clock = 1MHz。如果我们想每 10ms (即 100Hz) 触发一次 ADC 块采集,那么:

100 Hz = 1,000,000 Hz / (ARR + 1)

解得 ARR + 1 = 10000,所以 ARR = 9999。

通过组合 PSC 和 ARR,我们可以精确地配置出所需的触发频率。

4,触发输出 (Trigger Output - TRGO)

定时器可以将内部的多种事件(如更新事件 UEV、比较匹配事件等)作为触发信号输出给其他外设(如 ADC、DAC)。我们需要将 TRGO 设置配置为"Update Event",这样每次计数器溢出时,就会产生一个触发信号。

说明: 此处输入的应为定时器的实际输入时钟频率,通常是经过 APB 总线分频后的频率(例如,若 APB1 时钟为 72MHz 且定时器时钟未被进一步分频,则输入 72),而不是 CPU 的主频(如 180MHz)。请查阅您的 MCU 数据手册和 CubeMX 配置确定正确的定时器时钟源频率。

三,CubeMX配置

定时器配置
在这里插入图片描述
基础参数配置
在这里插入图片描述
在这里插入图片描述
DMA设置改为自然模式
在这里插入图片描述
开启中断
在这里插入图片描述

总结:
1,配置 ADC:
如果使用定时器触发,设置 “External Trigger Conversion Source” 和 “Edge”。
如果采样多个通道,配置 Scan Conversion Mode 和通道顺序。根据代码 adc_val_buffer[i * 2 + 1] 的用法,似乎配置了至少两个通道进行扫描转换。
“Continuous Conversion Mode” 应设置为 Disabled。
配置 DMA (在 ADC 的 DMA Settings 页):
2,添加 DMA 请求,选择通道。
设置 Mode 为 Normal。DMA 完成 BUFFER_SIZE 次传输后会自动停止,直到被软件重新启动。
Peripheral 和 Memory 的 Data Width 通常设置为 Word (32-bit)。
Memory 地址递增 (Increment Address: Memory)。
3,启用中断 (在 NVIC Settings 页):
启用与 ADC 关联的 DMA 通道的中断 (例如 DMA1 Channel1)。
启用 ADC 全局中断。

四,代码实现

// --- 宏定义和外部变量 ---
#define BUFFER_SIZE 1000        // DMA 缓冲区大小 (总点数)extern DMA_HandleTypeDef hdma_adc1; // 假设这是 ADC1 对应的 DMA 句柄
extern ADC_HandleTypeDef hadc1;    // ADC1 句柄
extern UART_HandleTypeDef huart1; // 用于 my_printf 的 UART 句柄// --- 全局变量 ---
uint32_t dac_val_buffer[BUFFER_SIZE / 2]; // 用于存储处理后的 ADC 数据
__IO uint32_t adc_val_buffer[BUFFER_SIZE]; // DMA 目标缓冲区 (存储原始 ADC 数据)__IO uint8_t AdcConvEnd = 0;             // ADC 转换完成标志 (一个块完成)// --- 初始化函数 (在 main 或外设初始化后调用) ---
void adc_tim_dma_init(void)
{// 启动 ADC 的 DMA 传输,请求 BUFFER_SIZE 个数据点// 注意:这里假设 hadc1 已经配置为合适的触发模式 (定时器或软件)//       且 DMA 配置为 Normal 模式HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_val_buffer, BUFFER_SIZE);// 显式禁用 DMA 半传输中断 (如果不需要处理半满事件)__HAL_DMA_DISABLE_IT(&hdma_adc1, DMA_IT_HT);// 注意:如果使用定时器触发,需要在此处或之前启动定时器HAL_TIM_Base_Start(&htimX); // 替换 htimX 为实际定时器句柄
}// --- ADC 转换完成回调函数 (由 DMA TC 中断触发) ---
// 当 DMA 完成整个缓冲区的传输 (Normal 模式下传输 BUFFER_SIZE 个点) 时触发
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{// 检查是否是由我们关心的 ADC (hadc1) 触发的if (hadc->Instance == ADC1) // 或 if(hadc == &hadc1){HAL_ADC_Stop_DMA(hadc);// 设置转换完成标志,通知后台任务数据已准备好AdcConvEnd = 1;}
}// --- 后台处理任务 (在主循环或低优先级任务中调用) ---
void adc_task(void)
{// 检查转换完成标志if (AdcConvEnd){// 处理数据: 从原始 ADC 缓冲区提取数据到 dac_val_buffer// 示例逻辑:提取扫描转换中第二个通道的数据 (?)for(uint16_t i = 0; i < BUFFER_SIZE / 2; i++){// 假设 adc_val_buffer[0] 是通道1, adc_val_buffer[1] 是通道2, ...dac_val_buffer[i] = adc_val_buffer[i * 2 + 1];}// 打印处理后的数据 (示例)for(uint16_t i = 0; i < BUFFER_SIZE / 2; i++){// 注意: my_printf 是自定义函数, 需确保其存在且可用my_printf(&huart1, "{dac}%d
", (int)dac_val_buffer[i]);}// 清理处理后的缓冲区 (可选)memset(dac_val_buffer, 0, sizeof(uint32_t) * (BUFFER_SIZE / 2));// 清除转换完成标志,准备下一次采集AdcConvEnd = 0;// 重新启动 ADC 的 DMA 传输,采集下一个数据块// 注意: 需要确保 ADC 状态适合重启 (例如没有错误)HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_val_buffer, BUFFER_SIZE);// 再次禁用半传输中断 (如果 Start_DMA 会重新启用它)__HAL_DMA_DISABLE_IT(&hdma_adc1, DMA_IT_HT);}
}

逻辑分解:
1,缓冲区定义: adc_val_buffer 用于 DMA 直接写入原始 ADC 数据,dac_val_buffer 用于存储处理后的数据。AdcConvEnd 作为块传输完成的标志。
2,初始化 (adc_tim_dma_init): 启动 ADC 的 DMA 传输,请求采集 BUFFER_SIZE 个点。禁用半传输中断。注意: 触发 ADC 的定时器(如果使用)也需在此或之前启动。
3,中断回调 (HAL_ADC_ConvCpltCallback):
当 DMA 完成 BUFFER_SIZE 次传输后触发。
设置 AdcConvEnd = 1; 通知后台任务。
4,后台任务 (adc_task):
4.1 检查 AdcConvEnd 标志。
4.2 如果标志为 1:
处理数据:示例中将 adc_val_buffer 中索引为奇数的元素复制到 dac_val_buffer(这通常意味着提取多通道扫描中的某个特定通道的数据)。
打印处理结果。
(可选)清空 dac_val_buffer
清除 AdcConvEnd 标志。
重新启动 HAL_ADC_Start_DMA,开始采集下一个数据块。
再次禁用 HT 中断。

五,关键优势与注意事项

1,主要优势:

1,实现相对简单: 相比 Ping-Pong 缓冲或复杂的环形缓冲区,回调和任务逻辑更直接。
2,块处理: 适合需要对固定大小数据块进行整体分析或处理的应用(如 FFT 前的数据准备、特定事件后的快照采集)。
3,低 CPU 占用(采集期间): 数据采集过程由 DMA 完成。

2,注意事项:

1,数据丢失: 在 adc_task 处理数据和重新启动 DMA 的期间,ADC 没有在采集数据,会造成数据的不连续性。不适用于需要无缝、连续数据流的应用。
2,处理时间限制: 后台任务 (adc_task) 处理数据的时间必须小于期望的数据块采集间隔,否则会延迟下一次采集的启动。
3,DMA 模式: 必须确保 DMA 配置为 Normal 模式,以便在传输完指定数量的点后停止并触发 TC 中断。
4,多通道数据交错: 如果 ADC 配置为多通道扫描模式,DMA 缓冲区 adc_val_buffer 中将包含所有通道交错的数据。处理时需要根据通道顺序正确提取所需数据(如此示例中提取奇数索引元素)。
5,重启条件: 在 adc_task 中重新调用 HAL_ADC_Start_DMA 前,应确保 ADC 和 DMA 处于合适的状态(例如,没有发生错误)。

相关文章:

STM32外设AD-定时器触发 + DMA读取模板

STM32外设AD-定时器触发 DMA读取模板 一&#xff0c;方法思路二&#xff0c;定时器基础与配置1&#xff0c;定时器时钟源 (Clock Source)2&#xff0c;预分频器 (Prescaler - PSC)3&#xff0c;自动重装载寄存器 (Auto-Reload Register - ARR) / 周期 (Period)4&#xff0c;触…...

数据库故障排查指南:从入门到精通

1. 常见数据库故障类型 1.1 连接故障 数据库连接超时连接池耗尽网络连接中断认证失败1.2 性能故障 查询执行缓慢内存使用过高CPU使用率异常磁盘I/O瓶颈1.3 数据故障 数据不一致数据丢失数据损坏事务失败2. 故障排查流程 2.1 初步诊断 -- 检查数据库状态SHOW STATUS;SHOW PRO…...

【AT32】 AT32 移植 Freemodbus 主站

基于野火开发板 at32f437zgt6芯片 和at32 官方开发工具 移植了网上一套开源的freemodbus 主站 这里对modbus 协议不做过多的讲解 主要已实现代码为主 AT32 Work Bench 参考之前我之前的配置 与stm32cubemx软件差不多 注意485芯片的收发脚配置即可 AT32 IDE 说实话这软件太垃…...

内网环境下如何使用ntpdate实时同步时间

背景介绍 NTP&#xff08;Network Time Protocol&#xff09;是一种网络协议&#xff0c;用于同步计算机系统的时间。ntpdate是一个用于手动同步时间的命令行工具&#xff0c;它可以从指定的NTP服务器获取当前时间并更新本地系统时间。 ntpdate 服务介绍 功能&#xff1a;ntp…...

python版本管理工具-pyenv轻松切换多个Python版本

在使用python环境开发时&#xff0c;相信肯定被使用版本所烦恼&#xff0c;在用第三方库时依赖兼容的python版本不一样&#xff0c;有没有一个能同时安装多个python并能自由切换的工具呢&#xff0c;那就是pyenv&#xff0c;让你可以轻松切换多个Python 版本。 pyenv是什么 p…...

工商总局可视化模版 – 基于ECharts的大数据可视化HTML源码

概述 在大数据时代&#xff0c;数据可视化已成为各行各业进行数据分析和决策的重要工具。幽络源今天为大家带来一款基于ECharts的工商总局数据可视化HTML模版&#xff0c;帮助开发者快速搭建专业级工商广告数据展示平台。这款模版设计规范&#xff0c;功能完善&#xff0c;适合…...

计算机网络 : 网络基础

计算机网络 &#xff1a; 网络基础 目录 计算机网络 &#xff1a; 网络基础引言1. 网络发展背景2. 初始协议2.1 初始协议2.2 协议分层2.2.1 软件分层的好处2.2.2 OSI七层模型2.2.3 TCP/IP五层&#xff08;四层&#xff09;模型 2.3 TCP/IP协议2.3.1TCP/IP协议与操作系统的关系&…...

eSwitch manager 简介

eSwitch manager 的定义和作用 eSwitch manager 通常指的是能够配置和管理 eSwitch&#xff08;嵌入式交换机&#xff09;的实体或接口。在 NVIDIA/Mellanox 的网络架构中&#xff0c;Physical Function&#xff08;PF&#xff09;在 switchdev 模式下充当 eSwitch manager&am…...

物联网技术在银行安全用电系统中的应用与实践研究

摘要 随着金融科技的快速发展&#xff0c;银行业电子设备数量激增&#xff0c;用电安全管理问题日益突出。本文基于2019年农业银行与2020年中国邮政储蓄银行发布的安全用电相关政策&#xff0c;分析了银行场景下存在的五大用电安全隐患&#xff0c;提出以物联网技术为核心的安…...

589. N叉树的前序遍历迭代法:null指针与栈的巧妙配合

一、题目描述 给定一个N叉树的根节点&#xff0c;返回其节点值的前序遍历结果。前序遍历的定义是&#xff1a;先访问根节点&#xff0c;再依次遍历每个子节点&#xff08;从左到右&#xff09;。例如&#xff0c;对于如下N叉树&#xff1a; 1/ | \3 2 4 / \ 5 6前序遍历结果…...

【洗车店专用软件】佳易王洗车店多项目会员管理系统:一卡多用扣次软件系统实操教程 #扣次洗车管理软件

一、软件试用版资源文件下载说明 &#xff08;一&#xff09;若您想体验软件功能&#xff0c;可通过以下方式获取软件试用版资源文件&#xff1a; 访问头像主页&#xff1a;进入作者头像主页&#xff0c;找到第一篇文章&#xff0c;点击文章最后的卡片按钮&#xff0c;即可了解…...

小红书笔记详情接口如何调用?实操讲解。

调用小红书笔记详情接口通常需要经过申请权限、构建请求、发送请求并处理响应等步骤&#xff0c;以下是详细的实操讲解&#xff1a; 一、申请接口权限 注册小红书开放平台账号 访问小红书开放平台官网/第三方开放平台&#xff0c;按照提示完成注册流程&#xff0c;提供必要的…...

leetcode 57. Insert Interval

题目描述 代码&#xff1a;由于intervals已经按照左端点排序&#xff0c;并且intervals中的区间全部不重叠&#xff0c;那么可以断定intervals中所有区间的右端点也已经是有序的。先二分查找intervals中第一个其右端点>newInterval左端点的区间。然后按照类似于56. Merge In…...

杰理ac696配置mic

省电容mic有概率不出声解决办法如下...

COMSOL随机参数化表面流体流动模拟

基于粗糙度表面的裂隙流研究对于理解地下水的流动、污染物传输以及与之相关的地质灾害&#xff08;如滑坡&#xff09;等方面具有重要意义。本研究通过蒙特卡洛方法生成随机表面形貌&#xff0c;并利用COMSOL Multiphysics对随机参数化表面的微尺度流体流动进行模拟。 参数化…...

Linux远程连接服务

远程连接服务器简介 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系统前面一样。 远程连接服务器的功能 分享主机的运算能力 远…...

用Python绘制梦幻星空

用Python绘制梦幻星空 在这篇教程中&#xff0c;我们将学习如何使用Python创建一个美丽的星空场景。我们将使用Python的图形库Pygame和随机库来创建闪烁的星星、流星和月亮&#xff0c;打造一个动态的夜空效果。 项目概述 我们将实现以下功能&#xff1a; 创建深蓝色的夜…...

EWOMAIL

1、错误 Problem: problem with installed package selinux-policy-targeted-3.14.3-41.el8.noarch package fail2ban-server-1.0.2-3.el8.noarch requires (fail2ban-selinux if selinux-policy-targeted), but none of the providers can be installed - package fail2ban-…...

网安面试经(1)

1.说说IPsec VPN 答&#xff1a;IPsec VPN是利用IPsec协议构建的安全虚拟网络。它通过加密技术&#xff0c;在公共网络中创建加密隧道&#xff0c;确保数据传输的保密性、完整性和真实性。常用于企业分支互联和远程办公&#xff0c;能有效防范数据泄露与篡改&#xff0c;但部署…...

【每天一个知识点】意图传播(Intent Propagation)

在人工智能(AI)快速发展的背景下,自然语言处理(NLP)已成为推动智能系统理解与生成自然语言的核心技术。其中,“意图识别”作为人机交互的关键步骤,已被广泛应用于智能客服、对话系统、语音助手等场景。而“意图传播”(Intent Propagation)作为更深层的机制,逐渐成为当…...

【串流VR手势】Pico 4 Ultra Enterprise 在 SteamVR 企业串流中无法识别手势的问题排查与解决过程(Pico4UE串流手势问题)

写在前面的话 此前&#xff08;用Pico 4U&#xff09;接入了MRTK3&#xff0c;现项目落地需要部署&#xff0c;发现串流场景中&#xff0c;Pico4UE的企业串流无法正常识别手势。&#xff08;一体机方式部署使用无问题&#xff09; 花了半小时解决&#xff0c;怕忘&#xff0c;…...

工具:shell命令提示符自定义之显示GIT当前分支

1 背景 在命令行操作&#xff0c;每次想查看当前分支都要手动执行命令&#xff08;git branch&#xff09;太麻烦了&#xff0c;想着在命令提示符上面显示当前分支&#xff0c;很直观也很方便 2 实现 编辑 vim ~/.bashrc 文件&#xff0c;添加如下内容 function update_prom…...

现代计算机图形学Games101入门笔记(十四)

Irradiance 微小的能量/微小的面积 用Irradiance解释能量大小解释冬夏 Intensity没变&#xff0c;但是Irradiance是衰减的&#xff0c;外圈面积变大&#xff0c;单位面积上接受的能量就变小了。 入射进来 离开 这里就是从某个方向来了一个能量&#xff0c;经过反射&#xff0c…...

前端开发笔记与实践

一、Vue 开发规范与响应式机制 1. 组件命名规范 自定义组件使用大驼峰命名法&#xff08;如 MyComponent&#xff09;&#xff0c;符合 Vue 官方推荐&#xff0c;便于与原生 HTML 元素区分。 2. Proxy vs defineProperty 特性Proxy&#xff08;Vue3&#xff09;Object.defi…...

机器学习知识自然语言处理入门

一、引言&#xff1a;当文字遇上数学 —— 自然语言的数字化革命 在自然语言处理&#xff08;NLP&#xff09;的世界里&#xff0c;计算机要理解人类语言&#xff0c;首先需要将文字转化为数学向量。早期的 One-Hot 编码如同给每个词语分配一个唯一的 “房间号”&#xff0c;例…...

泰迪杯特等奖案例深度解析:基于多级二值化与CNN回归的车牌识别系统设计

(第八届泰迪杯数据挖掘挑战赛特等奖案例全流程拆解) 一、案例背景与核心挑战 1.1 行业痛点与场景需求 在智慧交通与无感支付场景中,车牌识别是核心环节。传统车牌识别系统在复杂光照、污损车牌、多角度倾斜等场景下存在显著缺陷。根据某智慧油站2024年运营数据显示,高峰期…...

ai agent(智能体)开发 python高级应用5:crawl4ai 如何建立一个全面的知识库 第一步找分类

让我们充分利用爬虫功能建立自己丰富的知识库&#xff0c; 第一步找分类 以下是一个层次分明、覆盖全面的知识库分类体系&#xff0c;分为9大主类、43个子类&#xff0c;并融入交叉学科和新兴领域设计&#xff1a; 一、经济与商业 宏观经济&#xff08;全球经济/国家政策&a…...

Solon Ai Flow 编排开发框架发布预告(效果预览)

Solon Ai 在推出 Solon Ai Mcp 后&#xff0c;又将推出 Solon Ai Flow。 1、Solon Ai Flow 是个啥&#xff1f; Solon Ai Flow 是一个智能体编排开发框架。它是框架&#xff01;不是工具&#xff0c;不是产品&#xff08;这与市面上流行的工具和产品&#xff0c;有较大差别&a…...

【言语】刷题5(填空)

front&#xff1a;刷题5 第一个词排除人迹罕至 人迹罕至&#xff1a;很少有人去的地方。指偏僻荒涼的地方。&#xff08;荒郊野岭既视感的一个词&#xff09; 第二个空锁定B&#xff0c;太贴合语义了 第三个空排除一文不值&#xff0c;百无一用&#xff0c;现在这题已经可以过了…...

技术解码 | 腾讯云SRT弱网优化

随着互联网基础设施和硬件设备的不断发展。广大直播观众对于直播观看的清晰度&#xff0c;延时等方面的体验要求越来越高&#xff0c;直播也随之进入了低延迟高码率的时代&#xff0c;直播传输技术也面临着越来越高的要求和挑战。 腾讯视频云为此在全链路上针对流媒体传输不断深…...

“分布形态“

一、分布形态的基础分类 1、正态分布(对称分布) (1)特征:钟型曲线,均值=中位数=众数;约68%数据在μσ范围内,95%在μ2σ内。 (2)应用:身高、体重、测量误差等自然现象。 (3)重要性:多数统计方法(如T检验、方差分析)假设数据正态性。 2、偏态分布 (1)左偏(负…...

Android minSdk从21升级24后SO库异常

问题 minSdk从21调整到24后&#xff1a; java.nio.file.NoSuchFileException: /data/app/~~Z9s2NfuDdclOUwUBLKnk0A/com.rs.unity- Bg31QvFwF4qsCwv2XCqT-w/split_config.arm64_v8a.apkjava.nio.file.NoSuchFileException: /data/app/~~Z9s2NfuDdclOUwUBLKnk0A/com.rs.unity-…...

C#进阶(2)stack(栈)

前言 我们前面介绍了ArrayList,今天就介绍另一种数据结构——栈。 这是栈的基本形式,博主简单画了一下,你看个意思就行,很明显,这种数据有一种特征:先进后出。因为先进来的数据会在下面,下面是密闭的,所以只能取后面进来的。 C#为我们封好了这种数据结构,我们不用担…...

Linux du 命令终极指南:从基础到精通

文章目录 Linux du 命令终极指南&#xff1a;从基础到精通du 命令简介常用参数详解常见用法示例查看当前目录总大小查看当前目录及其子目录占用空间只显示当前目录总占用空间查看目录下每个文件和子目录的大小查看某目录深度为 1 的大小分布查看某目录并排除日志文件查看多个目…...

【Linux网络】数据链路层

数据链路层 用于两个设备&#xff08;同一种数据链路节点&#xff09;之间进行传递。 认识以太网 “以太网” 不是一种具体的网络&#xff0c;而是一种技术标准&#xff1b;既包含了数据链路层的内容&#xff0c;也包含了一些物理层的内容。例如&#xff1a;规定了网络拓扑结…...

水库雨水情测报与安全监测系统解决方案

一、方案概述 本水库雨水情测报与安全监测解决方案的核心目标在于利用尖端的技术手段&#xff0c;确保对水库雨水情势以及大坝安全状况的持续监控和及时预警&#xff0c;从而为水库的稳定运行提供坚实的支持和保障。该方案严格遵循“统筹协调、因库制宜、实用有效、信息共享”的…...

Shotcut:免费开源的视频编辑利器

Shotcut是一款功能强大且完全免费的开源视频编辑软件&#xff0c;专为需要高效、灵活视频编辑的用户设计。它支持多种常见视频格式&#xff0c;如MP4、AVI、MOV等&#xff0c;并提供了丰富的视频编辑功能&#xff0c;满足用户在不同场景下的需求。无论是初学者还是专业人士&…...

学习海康VisionMaster之直方图工具

一&#xff1a;进一步学习了 今天学习下VisionMaster中的直方图工具&#xff1a;就是统计在ROI范围内进行灰度级分布的统计 二&#xff1a;开始学习 1&#xff1a;什么是直方图工具&#xff1f; 直方图工具针对输入灰度图像的指定ROI区域&#xff0c;输出该区域的图像灰度直方…...

AI 笔记 -基于retinaface的FPN上采样替换为CARAFE

上采样替换为CARAFE 引言内容感知特征重组&#xff08;CARAFE&#xff09;公式化核预测模块 引言 简介&#xff1a;CARAFE&#xff08;Content-Aware ReAssembly of FEatures&#xff09;&#xff0c;是用于增强卷积神经网络特征图的上采样方法&#xff0c;论文被 ICCV 2019 接…...

Visual Studio 2022 中添加“高级保存选项”及解决编码问题

文章目录 一、背景二、方法方法一&#xff1a;通过菜单栏手动添加&#xff08;推荐&#xff09;方法二&#xff1a;通过拖拽快速添加&#xff08;替代方案&#xff09; 三、验证与使用四、补充说明五、所能解决的问题 一、背景 VS 在开发cmake项目的过程中&#xff0c;可能会遇…...

SQLMesh 增量模型从入门到精通:5步实现高效数据处理

本文深入解析 SQLMesh 中的增量时间范围模型&#xff0c;介绍其核心原理、配置方法及高级特性。通过实际案例说明如何利用该模型提升数据加载效率&#xff0c;降低计算资源消耗&#xff0c;并提供配置示例与最佳实践建议&#xff0c;帮助读者在实际项目中有效应用这一强大功能。…...

嵌入式开发书籍推荐

嵌入式开发是将计算机技术、微电子技术与各行业应用相结合的综合技术&#xff0c;学习过程中需要多方面知识储备。以下精选书籍&#xff0c;从基础到进阶&#xff0c;助你系统掌握嵌入式开发知识。 基础理论类 《计算机组成原理》&#xff08;唐朔飞版&#xff09;&#xff1…...

实变函数 第二章 点集

2 点集 2.1 欧式空间 2.1.1 度量空间、欧式空间 Definition \textbf{Definition} Definition 度量空间 (距离空间) 若 ∀ x , y ∈ X : ∃ d : ( x , y ) → R \forall x,y\in X:\exists d:(x,y)\to\mathbb{R} ∀x,y∈X:∃d:(x,y)→R&#xff0c;满足&#xff1a; d ( x , y…...

国芯思辰| 轮速传感器AH741对标TLE7471应用于汽车车轮速度感应

在汽车应用中&#xff0c;轮速传感器可用于车轮速度感应&#xff0c;为 ABS、ESC 等安全系统提供精确的轮速信息&#xff0c;帮助这些系统更好地发挥作用&#xff0c;在紧急制动或车辆出现不稳定状态时&#xff0c;及时调整车轮的制动力或动力分配。 国芯思辰两线制差分式轮速…...

MySQL中innodb的ACID

一、什么ACID A&#xff1a;原子性&#xff0c;事务是一个不可分割的工作单位&#xff0c;事务中的操作要么全部成功&#xff0c;要么全部失败回滚&#xff1b;C&#xff1a;一致性&#xff0c;事务必须保证数据库从一个一致性的状态变换成另一个一致性的状态&#xff0c;如A给…...

基于对抗性后训练的快速文本到音频生成:stable-audio-open-small 模型论文速读

Fast Text-to-Audio Generation with Adversarial Post-Training 论文解析 一、引言与背景 文本到音频系统的局限性&#xff1a;当前文本到音频生成系统性能虽佳&#xff0c;但推理速度慢&#xff08;需数秒至数分钟&#xff09;&#xff0c;限制了其在创意领域的应用。 研究…...

java 使用zxing生成条形码(可自定义文字位置、边框样式)

最新工作中遇到生成条形码的需求&#xff0c;经过一番摸索之后找到了zxing这个工具类&#xff0c;实现效果如下&#xff1a; 首先引入依赖&#xff1a; <!-- 条形码生成器 --><dependency><groupId>com.google.zxing</groupId><artifactId&g…...

4.3/Q1,Charls最新文章解读

文章题目&#xff1a;Longitudinal trajectories of disability index and associated factors in Chinese older adults DOI&#xff1a;10.1016/j.jnha.2025.100530 中文标题&#xff1a;中国老年人残疾指数纵向轨迹及相关因素 发表杂志&#xff1a;J Nutr Health Aging 影响…...

CSS- 2.1 实战之图文混排、表格、表单、学校官网一级导航栏

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 系…...

Android studio 实现弹出表单编辑界面

方法 1&#xff1a;使用 AlertDialog&#xff08;简单表单&#xff09; 适用于简单的表单场景。 1. 创建表单布局&#xff08;XML&#xff09; 在 res/layout 中新建 dialog_form.xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <L…...