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

【物联网】GPT延时

文章目录

  • 前言
  • 一、GPT实现延时
    • 1. 定时器介绍
    • 2. I.MX6ull GPT定时器介绍
      • 1)GPT定时器工作原理
      • 2)GPT的输入捕获
      • 3)GPT的输出比较
    • 3. 高精度延时实现
      • 1)实现思路


前言

使用 GPT 实现延时控制以及基于 PWM 实现蜂鸣器发声与频率调节这两个场景,分析它们在嵌入式系统中的使用方法、底层原理与调试技巧。无论是你正在开发 STM32、ESP32,还是 RISC-V 架构下的 IoT 模块

实例一:GPT 精确延时控制按钮去抖
场景:物联网按钮频繁被用户点击,出现抖动误触,需要消抖处理。
解决方案:使用 GPT 实现精确的延时判断,忽略高频波动。

实例二:PWM 控制蜂鸣器发出“滴滴”提示音
场景:用户打开设备或操作成功时,需要蜂鸣器提示音。
解决方案:用 PWM 输出固定频率(如 2KHz)控制无源蜂鸣器工作一小段时间。

实例三:实现不同频率蜂鸣提示代表不同事件
场景:警报、完成提示、错误提示等不同事件用不同频率蜂鸣音区分。
解决方案:定义不同的 PWM 频率与播放时长组合,对应不同事件。

实例四:蜂鸣器“滴滴滴”重复发声
场景:某些错误或找设备功能需要连续蜂鸣。
解决方案:循环开启关闭 PWM,同时使用 GPT 控制节奏。

实例五:低功耗设计中使用 GPT 进入延时唤醒模式
场景:IoT 设备在某些操作后进入低功耗状态,需要延时唤醒继续任务。
解决方案:GPT 进入 sleep 模式前设置延时中断,作为轻量唤醒机制。

一、GPT实现延时

1. 定时器介绍

在软件中我们也经常使用定时器,如:Qt中的定时器,当定时时间到达的时候,会发送一个timeOut()信号通知外界定时时间到达。软件中使用的定时器最终是由硬件来实现的,接下来我们来看看定时器在硬件上是如何工作的。

这个图描述的是一个定时器(Timer)模块的基本工作原理,结合了分频器、计数器(递增/递减)和中断机制,常用于嵌入式开发中实现精确延时或定时触发事件。

图中路径:100Hz 输入信号 → 分频器 DIV:10 → 输出 10Hz(每0.1秒)→ 计数器 ±1 → 满足条件触发中断 → ARM核心响应
举个例子:你是一个定时喝水的程序员
你办公室的秒表(频率 100Hz,相当于 100次/秒)在疯狂滴滴滴叫。
你觉得太吵了,就设置了一个“分频器”,把 100Hz 降到 10Hz(相当于 0.1秒一个滴答)。
你拿出一个计数器(设置成 100),每听到一次“滴”,你就把计数器减 1。
当计数器减到 0,你就触发一个动作:“起身喝水”。

在这里插入图片描述

2. I.MX6ull GPT定时器介绍

GPT有一个32位向上计数器。定时器计数器值可以使用外部引脚上的事件捕获到寄存器中。捕获触发器可以被编程为上升沿或/和下降沿。GPT还可以在输出比较引脚上生成事件,并在定时器达到编程值时产生中断。GPT有一个12位预分频器,它提供从多个时钟源获得的可编程时钟频率

有时钟源的选择、2路的输入捕获、3路的输出比较
在这里插入图片描述
Features
• One 32-bit up-counter with clock source selection, including external clock.
一个带时钟源选择的32位向上计数器,包括外部时钟

• Two input capture channels with a programmable trigger edge.
具有可编程触发边缘的两个输入捕获通道

• Three output compare channels with a programmable output mode. A “forced compare” feature is also available.
三个输出比较通道,具有可编程输出模式。还提供“强制比较”功能

• Can be programmed to be active in low power and debug modes.
可编程为在低功耗和调试模式下处于活动状态。

• Interrupt generation at capture, compare, and rollover(计数器的值计数到最大值,然后从0开始) events.
在捕获、比较和翻转事件时中断生成

• Restart or free-run modes for counter operations.
为计数器操作重新启动或自由运行模式。

1)GPT定时器工作原理

在这里插入图片描述

输入到预定标器的时钟可以从4个时钟源中选择。下表描述了GPT的时钟源。有关时钟设置、配置和门控信息,请参阅时钟控制器模块(CCM)

在这里插入图片描述

在这里插入图片描述

可以从 4 个时钟源中选择输入到预分频器的时钟,分别为:
• 高频参考时钟(ipg_clk_highfreq),
• 低频参考时钟(ipg_clk_32k),
外围时钟(ipg_clk)
• 外部时钟(GPT_CLK)或者晶体振荡器时钟(ipg_clk_24M)

外部时钟(GPT_CLK)或者晶体振荡器时钟(ipg_clk_24M)只能选择一个。

这里我们选择ipg_clk=66MHZ作为GPT定时器的输入时钟源,芯片在启动的时候,芯片内部的程序已经做了系统时钟初始化,初始化的时钟频率如下:

把板子启动一下 复位 输入clocks 可以查看时钟信号频率 也可以在u_boot中输入clocks
IPG的频率是66mhz
在这里插入图片描述
具体怎么选择 需要看寄存器 GPTx_CR
在这里插入图片描述
把寄存器CR的第6-8位设置1就是外围时钟(ipg_clk)66mhz

选择完时钟信号之后 再经过预分频器 设置寄存器GPTx_PR:

在这里插入图片描述

A.ipg_clk : 66000kHZ
B.Prescaler: 65
最终GPT定时器的输入时钟源: 66000kHZ/(65 + 1) = 1000KHZ,周期为 1us。
也就是说每隔1us,GPT内部的计数器值+1,GPTx_CNT 是个32位寄存器,
GPTx_CNT最大的值是0XFFFFFFFF,也就是0XFFFFFFFFus=4294967295us≈4294s≈72min。
也就是说72分钟以后GPTx_CNT寄存器就会回滚到0X00000000

GPT计数器可以编程为以两种模式之一工作:重新启动模式或自由运行模式

在重新启动模式下(可通过GPT控制寄存器GPT_CR选择),当计数器达到比较值时,计数器复位并从0x00000000再次启动。
重新启动功能仅与比较通道1相关联。对通道1的比较寄存器的任何写访问都将重置GPT计数器。这样做是为了避免在计数进行时比较值从较高值更改为较低值时可能丢失比较事件。对于其他两个比较通道,当比较事件发生时,计数器不会重置。

在自由运行模式下,当所有3个通道发生比较事件时,计数器不会重置;相反,计数器继续计数,直到0xffffffff,然后滚动(到0x00000000)

用人话讲:重新启动模式就是 使用当前值和比较值(通道1)作比较 如果一样就复位 如果被强制改动也复位
自由模式就是 不会因为比较值命中而复位,它是溢出(到 0xFFFFFFFF)才回绕,与比较值无关

如何操作定时器:
直接总结就是 设置1工作 设置0不工作
这里有一个CNT寄存器 是用来读取当前计数器的值是多少

通用计时器(GPT)有一个计数器(GPT_CNT),它是一个32位自由运行的向上计数器,它在软件启用后开始计数(EN=1)。
在这里插入图片描述
如果禁用GPT计时器(EN=0),则主计数器和预分频计数器将冻结其当前计数值。ENMOD位确定设置EN位并再次启用计数器时GPT计数器的值。

如果设置了ENMOD位(=1),则启用GPT时,主计数器和预分频器计数器值将重置为0(EN=1)。
在这里插入图片描述
如果想全部复位 就在GPT_CR的第15位写个1

硬件重置将所有GPT寄存器重置为各自的重置值。除了输出比较寄存器(OCR1、OCR2、OCR3)之外的所有寄存器都获得0x0的值。比较寄存器重置为0xFFFF_FFFF。

软件复位(GPT_CR控制寄存器中的SWR位)复位除EN、ENMOD、STOPEN、WAITEN和DBGEN位之外的所有寄存器位。这些位的状态不受软件复位的影响。请注意,*在禁用GPT时,*可以进行软件复位。
在这里插入图片描述

2)GPT的输入捕获

(1)输入捕获的使用场景

在嵌入式开发中,我们常需要捕获传感器的高电平(或低电平)信号的持续时间,如红外解码信号、编码器输入信号等。
在这里插入图片描述
从直观上理解,就是要不断的检测这个信号,当信号从0变到1时,记录一个时间,再从1变到0时,记录另一个时间,两个时间差就是高电平的持续时间了。

(2)输入捕获工作原理
在这里插入图片描述
• 启动定时器,让CNT计数器在不停的计数
• 首先配置定时器的输入通道为上升沿捕获,这样当检测到从0到1的跳变时,ICR就会先保存当前的CNT值
• 然后将定时器的输入通道为下降沿捕获,当检测从1到0的跳变时,ICR就会先保存当前的CNT值
• 最终我们根据两次捕获的值,就可以计算出高电平持续的时间

(3)GPT的输入捕获操作
当使能打开 捕获产生 这时候就会发生中断
可以在上升沿或下降沿捕获

在这里插入图片描述

有两个输入捕获通道,每个输入捕获通道都有一个专用的捕获引脚、捕获寄存器和输入边缘检测/选择逻辑。每个输入捕获功能都有一个关联的状态标志,可以导致处理器发出中断服务请求。

在这里插入图片描述
当输入捕获引脚上发生选定的边缘转换时,GPT_CNT的内容将在相应的捕获寄存器上捕获,并设置适当的中断状态标志。如果设置了相应的使能位(在中断寄存器中),则可以在检测到转换时生成中断请求。捕获可以编程为发生在输入引脚的上升沿、下降沿、上升沿和下降沿上,或者可以禁用捕获。事件与选择运行计数器的时钟同步。只有在先前记录的转换之后至少一个时钟周期(选择运行计数器的时钟)发生的转换才能保证触发捕获事件。输入转换的锁定中最多可以有一个时钟周期的不确定性。输入捕获寄存器可以在任何时候读取,而不会影响它们的值。
总结:捕获事件产生的时候 有一些状态标志会被设置。捕获的时机可以在下降沿、上升沿和下降沿上的时候。捕获的值可以在任何时间读取
在这里插入图片描述
设置下降沿、上升沿和下降沿上
在这里插入图片描述
设置捕获事件有没有产生
在这里插入图片描述
捕获的值是多少
在这里插入图片描述

3)GPT的输出比较

在这里插入图片描述
设置3个比较值 如果计数器和比较值相等 则会产生输出比较事件
三个输出比较通道使用相同的计数器(GPT_CNT)作为输入捕获通道。当输出比较寄存器的编程内容与GPT_CNT中的值匹配时,设置输出比较状态标志并生成中断(如果在中断寄存器中设置了相应的位)。因此,输出比较定时器引脚将被设置、清除、切换、完全不受影响或输出一个低脉冲(脉冲持续时间为定时器的时钟源的周期)

每一个GPT计时器管3个通道
在这里插入图片描述
当产生事件后 可以通过高低电平的切换、脉冲信号等等来通知
在这里插入图片描述
这里可以设置需要产生什么样的动作
在这里插入图片描述
状态标志
在这里插入图片描述
还有一个“强制比较(forced-compare)”功能,一旦设置,就会马上产生比较事件;不管当前计数器值是 否等于比较值。强制比较的产生的事件,跟正常的输出事件相同,只是它不会设置状态标记位并且不会产生中断。 一旦设置 force-compare 位,该事件会即刻产生,这个位是自动清除的,读的话一直零。
通过软件 强制产生一个比较事件(中断标志和状态标志不会改变)
在这里写个1 产生强制比较
在这里插入图片描述
在这里插入图片描述

3. 高精度延时实现

1)实现思路

• 软件复位GPT定时器
• 确定GPT定时器的时钟源
• 确定比较寄存器的值( 根据延时时间来确定 )
• 开启GPT定时器
等待输出比较事件产生
• 关闭GPT定时器

#include "imx6ull.h"// 初始化GPT定时器 时钟源
void gpt_init(void)
{/* 重置GPT定时器 */GPT1->CR |= (1 << 15); // 设置控制寄存器的第15位为1,开始重置// 等待重置完成,检查第15位是否变回0while(GPT1->CR & (1 << 15)){// 啥也不干,就等着}/*选择时钟源:用IPG时钟(66MHz)把第6到8位清零,然后设第6位为1,选择IPG时钟*/GPT1->CR &= ~(0x7 << 6); // 先清零第6-8位GPT1->CR |= (0x1 << 6);  // 再把第6位置1/*设置GPT预分频器为65GPT时钟 = 66MHz / (65+1) = 1MHz,也就是1微秒(1us)一个tick*/GPT1->PR = 65; // 预分频器设为65return; // 初始化完成,返回
}// 等待比较事件发生
void wait_cmp_event(void)
{int flag; // 定义一个标志变量// 循环检查状态寄存器的第0位,直到它变成1,表示比较事件发生了do{flag = GPT1->SR & (1 << 0); // 读取状态寄存器的第0位}while(!flag); // 如果flag是0,就继续等return; // 事件发生后返回
}// 启动GPT定时器
void gpt_start(void)
{// 设置控制寄存器:// 第9位设1:使能比较输出1// 第1位设1:使能自由运行模式// 第0位设1:启动定时器GPT1->CR |= (1 << 9) | (1 << 1) | (1 << 0);return; // 启动完成,返回
}// 停止GPT定时器
void gpt_stop(void)
{// 把控制寄存器的第0位清零,停止定时器GPT1->CR &= ~(1 << 0);return; // 停止完成,返回
}// 延时指定微秒(us)
void gpt_delay_us(uint32_t us)
{gpt_init();          // 先初始化GPT定时器GPT1->OCR1 = us;     // 设置比较寄存器的值为延时的微秒数gpt_start();         // 启动定时器wait_cmp_event();    // 等待延时时间到达gpt_stop();          // 停下定时器return; // 延时完成,返回
}// 延时指定毫秒(ms)
void gpt_delay_ms(uint32_t ms)
{gpt_init();          // 初始化GPT定时器GPT1->OCR1 = 1000 * ms; // 设置比较值,1ms=1000us,所以乘以1000gpt_start();         // 启动定时器wait_cmp_event();    // 等待延时时间到达gpt_stop();          // 停下定时器return; // 延时完成,返回
}// 延时指定秒(sec)
void gpt_delay_sec(uint32_t sec)
{gpt_delay_ms(sec * 1000); // 1秒=1000毫秒,直接调用毫秒延时函数return; // 延时完成,返回
}// GPT测试函数:让LED灯每隔500毫秒亮灭一次
void gpt_test(void)
{led_init(); // 初始化LED// 死循环,让LED不停闪烁while(1){led_on();          // 点亮LEDgpt_delay_ms(500); // 延时500毫秒led_off();         // 熄灭LEDgpt_delay_ms(500); // 再延时500毫秒}
}

相关文章:

【物联网】GPT延时

文章目录 前言一、GPT实现延时1. 定时器介绍2. I.MX6ull GPT定时器介绍1&#xff09;GPT定时器工作原理2&#xff09;GPT的输入捕获3&#xff09;GPT的输出比较 3. 高精度延时实现1&#xff09;实现思路 前言 使用 GPT 实现延时控制以及基于 PWM 实现蜂鸣器发声与频率调节这两…...

【套题】大沥2019年真题——第4题

04.数字圈 题目描述 当我们写数字时会发现有些数字有封闭区域&#xff0c;有的数字没有封闭区域。 数字 0 有一个封闭区域&#xff0c;数字 1、2、 3 都没有封闭区域&#xff0c;数字 4 有一个封闭区域&#xff0c;数字 5 没有封闭区域&#xff0c;数字 6 有一个封闭区域&#…...

idea 安装 proxyai 后的使用方法

1. 可以默认使用ProxyAi 安装后使用如下配置可以进行代码提示 配置 使用示例 2. 这里有必要说一下&#xff0c;这里要选择提供服务的ai 选择后才可以使用ProxyAI或者Custom openAI 3. 可以使用custom openAi, 要自行配置 1&#xff09;配置 code completions 这是header …...

构建实时、融合的湖仓一体数据分析平台:基于 Delta Lake 与 Apache Iceberg

1. 执行摘要 挑战&#xff1a; 传统数据仓库在处理现代数据需求时面临诸多限制&#xff0c;包括高昂的存储和计算成本、处理海量多样化数据的能力不足、以及数据从产生到可供分析的端到端延迟过高。同时&#xff0c;虽然数据湖提供了低成本、灵活的存储&#xff0c;但往往缺乏…...

数据库的MVCC机制详解

MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是数据库系统中常用的并发控制机制&#xff0c;它允许数据库在同一时间点保存数据的多个版本&#xff0c;从而实现非阻塞的读操作&#xff0c;提高并发性能。 MVCC的核心思想是&…...

未来与自然的交响:蓉城生态诗篇

故事背景 故事发生在中国四川成都&#xff0c;描绘了未来城市中科技与自然共生的奇迹。通过六个极具创意的生态场景&#xff0c;展现人类如何以诗意的方式重构与自然的连接&#xff0c;在竹海保育、文化传承、能源循环等维度编织出震撼心灵的未来图景。 故事内容 当晨雾在竹纤维…...

【愚公系列】《高效使用DeepSeek》062-图书库存管理

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

汽车软件开发常用的建模工具汇总

目录 往期推荐 1.Enterprise Architect&#xff08;EA&#xff09; 2.MATLAB/Simulink 3.TargetLink 4.Rational Rhapsody 5.AUTOSAR Builder 6.PREEvision 总结 往期推荐 2025汽车行业新宠&#xff1a;欧企都在用的工具软件ETAS工具链自动化实战指南&#xff1c;一&am…...

六、继承(二)

1 继承与友元 如果一个基类中存在友元关系&#xff0c;那么这个友元关系能不能继承呢&#xff1f; 例&#xff1a; #include <iostream> using namespace std; class Student; class Person { public:friend void Display(const Person& p, const Student& s)…...

flink部署使用(flink-connector-jdbc)连接达梦数据库并写入读取数据

flink介绍 1&#xff09;Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行&#xff0c;以内存执行速度和任意规模来执行计算。 2&#xff09;在实时计算或离线任务中&#xff0c;往往需要…...

【Rust开发】Rust快速入门,开发出Rust的第一个Hello World

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

Flink框架:批处理和流式处理与有界数据和无界数据之间的关系

本文重点 从数据集的类型来看&#xff0c;数据集可以分为有界数据和无界数据两种&#xff0c;从处理方式来看&#xff0c;有批处理和流处理两种。一般而言有界数据常常使用批处理方式&#xff0c;无界数据往往使用流处理方式。 有界数据和无界数据 有界数据有一个明确的开始和…...

基于 Spring Boot 瑞吉外卖系统开发(四)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;四&#xff09; 新增分类 新增分类UI界面&#xff0c;两个按钮分别对应两个UI界面 两个页面所需的接口都一样&#xff0c;请求参数type值不一样&#xff0c;type1为菜品分类&#xff0c;type2为套餐分类。 请求方法都为POST。…...

患者根据医生编号完成绑定和解绑接口

医疗系统接口文档 一、Controller 层 1. InstitutionDoctorController 医疗机构和医生相关的控制器&#xff0c;提供机构查询、医生查询、绑定解绑医生等功能。 RestController RequestMapping("/institution-doctor") public class InstitutionDoctorController…...

Flutter性能优化终极指南:从JIT到AOT的深度调优

一、Impeller渲染引擎调优策略 1.1 JIT预热智能预编译 // 配置Impeller预编译策略 void configureImpeller() {ImpellerEngine.precacheShaders(shaders: [lib/shaders/skinned_mesh.vert,lib/shaders/particle_system.frag],warmupFrames: 30, // 首屏渲染前预编译帧数cach…...

(1)英特尔 RealSense T265(三)

文章目录 前言 4.4 地面测试 4.5 飞行测试 4.6 室内外实验 4.7 数据闪存记录 4.8 启动时自动运行 4.9 使用 OpticalFlow 进行 EKF3 光源转换 前言 Realsense T265 通过 librealsense 支持 Windows 和 Linux 系统。不同系统的安装过程差异很大&#xff0c;因此请参阅 gi…...

【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、列表初始化 1. 大括号初始化 2. initializer_list 二、右值引用和移动语义 1. 左值和右值 2. 左值引用和右值引用 引用延长生命周期 左…...

ArcGIS 给大面内小面字段赋值

文章目录 引言:地理数据处理中的自动化赋值为何重要?实现思路模型实现关键点效果实现步骤1、准备数据2、执行3、完成4、效果引言:地理数据处理中的自动化赋值为何重要? 在地理信息系统(GIS)的日常工作中,空间数据的属性字段赋值是高频且关键的操作,例如在土地利用规划…...

计算机网络——传输层(Udp)

udp UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议 &#xff09;是一种无连接的传输层协议&#xff0c;它在IP协议&#xff08;互联网协议&#xff09;之上工作&#xff0c;为应用程序提供了一种发送和接收数据报的基本方式。以下是UDP原理的详细解释&…...

【操作系统(Linux)】——生产者消费者同步互斥模型

✅ 一、程序功能概述 我们将做的&#xff1a;实现一个经典的「生产者-消费者问题」多线程同步模型的案例&#xff0c;主要用到 循环缓冲区 POSIX 信号量 sem_t pthread 多线程库&#xff0c;非常适合理解并发控制、线程通信和缓冲区管理。 案例目标&#xff1a;通过多个生产…...

从数据到洞察:探索数据分析与可视化的高级方法

从数据到洞察:探索数据分析与可视化的高级方法 引言 在今天这个数据驱动的时代,海量的数据只有通过科学分析和清晰可视化,才能转化为商业价值和决策依据。然而,数据分析与可视化远不只是制作几个图表,它需要高级技术、深度洞察力以及良好的工具支持。随着大数据领域的快…...

计算机视觉中的数学:几何变换与矩阵运算详解

计算机视觉中的数学&#xff1a;几何变换与矩阵运算详解 一、前言二、基础数学概念回顾​2.1 向量与向量运算​2.1.1 向量的定义​2.1.2 向量运算​ 2.2 矩阵基础​2.2.1 矩阵的定义与表示​2.2.2 矩阵运算​ 三、几何变换基础​3.1 平移变换​3.1.1 原理​3.1.2 代码示例&…...

华为数字芯片机考2025合集3已校正

1. 题目内容 下列说法正确的是&#xff08;&#xff09;。 1. 解题步骤 1.1 选项分析 选项描述正误依据A异步 FIFO 采用格雷码是为了省功耗✗格雷码用于消除多比特信号跨时钟域的位跳变风险&#xff0c;与功耗无关B单比特信号打两拍可以完全避免亚稳态✗双触发器同步仅降低…...

启山智软的营销方法有哪些优势?

启山智软作为一家科技或软件企业&#xff0c;其营销方法的优势可能体现在以下几个方面&#xff0c;这些优势结合了行业特点与创新策略&#xff0c;帮助其在竞争激烈的市场中占据有利位置&#xff1a; ​​1. 技术驱动的精准营销​​ ​​数据挖掘与AI应用​​&#xff1a; 通…...

openpyxl合并连续相同元素的单元格

文章目录 前言一、openpyxl是什么&#xff1f;二、基础用法1.读取和写入文件2.合并单元格 三、合并单元格实战1.连续相同元素的索引范围2.转换3.获取列合并索引4.整体 总结 前言 python可以很方便的操作各种文档&#xff0c;比如docx&#xff0c;xlsx等。本文主要介绍在xlsx文…...

从零开始学java--泛型(二)

泛型 目录 泛型 泛型与多态 泛型方法 泛型的界限 泛型与多态 不只是类&#xff0c;包括接口、抽象类都可以支持泛型&#xff1a; public static void main(String[] args) {Score<String> scorenew Score<>("数学","aa","优秀"…...

设计模式 Day 6:深入讲透观察者模式(真实场景 + 回调机制 + 高级理解)

观察者模式&#xff08;Observer Pattern&#xff09;是一种设计结构中最实用、最常见的行为模式之一。它的魅力不仅在于简洁的“一对多”事件推送能力&#xff0c;更在于它的解耦能力、模块协作设计、实时响应能力。 本篇作为 Day 6&#xff0c;将带你从理论、底层机制到真实…...

深入理解 Shell:从原理到实战的全方位解析

1. 引言&#xff1a;什么是 Shell&#xff1f; Shell 是操作系统中最基础却最强大的工具之一。它是用户与操作系统之间的接口&#xff0c;一个命令行解释器&#xff0c;它接收用户输入的命令并调用操作系统内核完成相应的操作。 Shell 的含义包括两层&#xff1a; 交互式命令…...

图灵逆向——题六-倚天剑

从第六题开始就要有个先看看请求头的习惯了[doge]。 别问博主为什么要你养成这个习惯&#xff0c;问就是博主被坑过。。。 headers里面有一个加密参数S&#xff0c;然后你就去逆向这个S对吧。 然后一看响应&#xff1a; 好家伙返回的还是个密文&#xff0c;所以要两次逆向咯。…...

【WRF理论第十七期】单向/双向嵌套机制(含namelist.input详细介绍)

WRF运行的单向/双向嵌套机制 准备工作&#xff1a;WRF运行的基本流程namelist.input的详细设置&time_control 设置&domain 嵌套结构&bdy_control 配置部分 namelist 其他注意事项 嵌套说明双向嵌套&#xff08;two-way nesting&#xff09;单向嵌套&#xff08;one…...

【Springboot知识】Springboot进阶-Micrometer指标监控深入解析

文章目录 ​​Micrometer 核心概念与标准指标详解**Micrometer 核心概念与标准指标详解****一、Micrometer 核心概念****二、Micrometer 标准指标****1. JVM 监控指标****2. 系统资源监控****3. HTTP 请求监控****4. 数据库监控****5. 缓存监控** **三、配置与自定义指标****1.…...

Linux 的准备工作

1.root用户登录 首先讲一下root账户怎么登陆 直接 ssh root 公ip地址就可以了 比如我的是腾讯云的 这个就是公ip 下面所有普通用户的操作都是在root账户下进行的 2.普通用户创建 创建用户指令 adduser 用户名 比如说这个指令 我创建了一个ly_centos的普通用户 3.普通用…...

LLM实现模型并行训练:deepspeed 是什么; transformers` 怎么实现模型并行训练吗?

LLM实现模型并行训练:deepspeed 是什么 DeepSpeed是一个由微软开发的深度学习优化库,旨在帮助研究人员和工程师更高效地训练大规模神经网络。它提供了一系列的优化技术,包括混合精度训练、模型并行、数据并行、ZeRO优化等,以提高训练速度、减少内存占用,并支持在多个GPU或…...

STM32 HAL库之EXTI示例代码

外部中断按键控制LED灯 在main.c中 HAL_Init(); 初始化Flash&#xff0c;中断优先级以及HAL_MspInit函数&#xff0c;也就是 stm32f1xx_hal.c 中 HAL_StatusTypeDef HAL_Init(void) {/* Configure Flash prefetch */ #if (PREFETCH_ENABLE ! 0) #if defined(STM32F101x6) || …...

数字人情感表达突破:微表情自动生成的算法革新

——从量子化建模到联邦学习的全链路技术革命 一、行业痛点&#xff1a;传统数字人微表情的“三重困境” 2025年数据显示&#xff0c;83%的虚拟角色因微表情失真导致用户留存率下降&#xff08;头部游戏公司实测数据&#xff09;。传统方案面临核心矛盾&#xff1a; 制作成本…...

Django软删除功能完整指南:构建图书馆项目

Django软删除功能完整指南:构建图书馆项目 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django软删除功能完整指南:构建图书馆项目第 1 步:安装所需包第 2 步:设置您的 Django…...

联邦学习:AI 与大数据融合的创新力量

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;和大数据无疑是推动各行业发展的两大核心技术。AI 凭借其强大的数据分析和预测能力&#xff0c;为企业提供了智能化决策支持&#xff1b;大数据则通过海量数据的收集与存储&#xff0c;为 AI 模型的训练提供了丰…...

idea解决tomcat项目页面中文乱码

概述 解决tomcat项目页面中文乱码问题-Dfile.encodingUTF-8 设置...

Android Coil 3 Fetcher大批量Bitmap拼接成1张扁平宽图,Kotlin

Android Coil 3 Fetcher大批量Bitmap拼接成1张扁平宽图&#xff0c;Kotlin <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><u…...

解锁Midjourney创作潜能:超详细提示词(Prompts)分类指南

AI生图自由&#xff01;就来 ChatTools (https://chat.chattools.cn)&#xff0c;畅享Midjourney免费无限绘画。同时体验GPT-4o、Claude 3.7 Sonnet、DeepSeek等强大模型。 为了帮助大家更好地驾驭Midjourney&#xff0c;我们精心整理并分类了大量常用且效果出众的提示词。无论…...

HBuilder运行uni-app程序报错【Error: listen EACCES: permission denied 0.0.0.0:5173】

一、错误提示&#xff1a; 当使用HBuilder运行uni-app项目的时候提示了如下错误❌ 15:11:03.089 项目 project 开始编译 15:11:04.404 请注意运行模式下&#xff0c;因日志输出、sourcemap 以及未压缩源码等原因&#xff0c;性能和包体积&#xff0c;均不及发行模式。 15:11:04…...

k8s node inode被耗尽如何处理?

当 Kubernetes 节点因 inode 被耗尽导致 Pod 无法调度或运行异常时&#xff0c;需结合 Kubernetes 特性和 Linux 系统管理方法处理。以下是详细步骤&#xff1a; 1. 确认 inode 耗尽 首先登录问题节点&#xff0c;检查 inode 使用率&#xff1a; # 查看全局 inode 使用情况 …...

机器学习之PCA主成分分析详解

文章目录 引言一、PCA的概念二、PCA的基本数学原理2.1 内积与投影2.2 基2.3 基变换2.4 关键问题及优化目标2.5 方差2.6 协方差2.7 协方差矩阵2.8 协方差矩阵对角化 三、PCA执行步骤总结四、PCA参数解释五、代码实现六、PCA的优缺点七、总结 引言 在机器学习领域&#xff0c;我…...

leetcode797图论-对邻接矩阵和邻接表不同形式进行dfs与bfs遍历方法

给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i 到节点 graph[i][j]存在一条有向…...

Spark核心架构与RDD:大数据处理的基石

Apache Spark作为新一代分布式计算引擎&#xff0c;其高效性和灵活性源于独特的运行架构与核心数据结构RDD。本文简要解析Spark的核心组件及RDD的核心特性&#xff0c;帮助开发者快速理解其设计思想。 一、Spark运行架构 Spark采用标准的**Master-Slave架构&#xff0c;核心组…...

Python Orange:托拉拽玩转机器学习、数据挖掘!

相比写代码做数据挖掘&#xff0c;Python Orange简直是懒人和新手的救星&#xff01;传统编程得敲一行行代码&#xff0c;调库、debug 累得要死&#xff0c;而Orange靠拖拽就能搞定数据导入、清洗、可视化、建模、评估和无监督学习&#xff0c;支持跨Windows、Mac、Linux平台随…...

K8S学习之基础七十七:istio实现超时功能

istio实现超时功能 模拟客户端调用 nginx&#xff0c;nginx 将请求转发给 tomcat。nginx 服务设置了超时时间为2秒&#xff0c;如果超出这个时间就不在等待&#xff0c;返回超时错误。tomcat服务设置了响应时间延迟10秒&#xff0c;任何请求都需要等待10秒后才能返回。client …...

EFA-YOLO:一种高效轻量的火焰检测模型解析

论文地址:https://arxiv.org/pdf/2409.12635 目录 论文地址:https://arxiv.org/pdf/2409.12635 一、论文结构解析 二、核心创新点解读 1. EAConv(高效注意力卷积) 2. EADown(高效下采样) 三、实验结果对比 1. 精度指标对比 2. 实际检测效果 四、应用场景展望 …...

PyQt6实例_A股财报数据维护工具_解说并数据与完整代码分享

目录 1 20250403之前的财报数据 2 整个项目代码 3 工具使用方法 3.1 通过akshare下载 3.2 增量更新 3.3 查看当前数据情况 3.4 从数据库中下载数据 视频 1 20250403之前的财报数据 通过网盘分享的文件&#xff1a;财报三表数据20250403之前.7z 链接: https://pan.ba…...

【AAOS】【源码分析】CarAudioService(二)-- 功能介绍

汽车音频是 Android 汽车操作系统 (AAOS) 的一项功能,允许车辆播放信息娱乐声音,例如媒体、导航和通信。AAOS 不负责具有严格可用性和时间要求的铃声和警告,因为这些声音通常由车辆的硬件处理。将汽车音频服务集成在汽车中,彻底改变了驾驶体验,为驾驶员和乘客提供了音乐、…...