GPT(General Purpose Timer)定时器
基本概念:
在嵌入式系统中,General Purpose Timer(GPT)是一种非常重要的硬件组件,用于提供定时功能。
- 定义:通用定时器是一种能够提供精确时间测量和控制功能的电子设备或电路模块。它可以产生周期性的时钟信号,通常可提供从微秒级到毫秒级的定时时钟功能。也可以对事件进行计时和计数,广泛应用于各种需要时间控制和测量的场景。
- 工作原理:通常基于振荡器产生基准时钟信号,然后通过分频、计数等操作来实现特定的时间间隔和定时功能。例如,一个简单的通用定时器可以由一个晶体振荡器和一个计数器组成,晶体振荡器产生稳定的振荡频率,计数器对振荡周期进行计数,当计数值达到预设值时,产生一个定时中断或输出信号
与其他定时器的比较
-
与RTC(实时时钟)的区别:
- 功能侧重点不同:RTC主要用于提供准确的日期和时间信息,它能够持续运行,即使在设备断电的情况下,也能通过备用电池保持时间的连续性,常用于需要长期准确计时的场景,如电子手表、计算机主板等。而通用定时器更侧重于产生精确的时间间隔和进行事件计数,用于控制和测量设备的运行状态和事件的发生。
- 精度和范围不同:RTC的精度通常在秒级,能够提供年、月、日、时、分、秒等完整的时间信息。通用定时器的精度可以更高,能够达到微秒甚至纳秒级别,但它的计时范围相对较小,一般用于较短时间间隔的测量和控制。
-
与看门狗定时器的区别:
- 作用目的不同:看门狗定时器主要用于系统监控和故障恢复。当系统出现异常或死机时,看门狗定时器会在超时后触发复位信号,使系统重新启动,以保证系统的可靠运行。通用定时器则主要用于实现设备的正常功能和时间控制,不具有自动复位系统的作用。
- 工作方式不同:看门狗定时器需要定期被“喂狗”,即在正常运行时,系统需要在定时器超时前对其进行清零或重置操作,以防止复位信号的产生。通用定时器则根据预设的时间参数和事件触发条件进行工作,不需要外部的定期干预。
RTC(实时时钟)与看门狗定时器在后续博客中会做出重点论述,这里只简单概述与GPT定时器的区别
以I.MX6ULL开发板为例,介绍GPT定时器在嵌入式中的应用
I.MX6ULL GPT介绍
The GPT has a 32-bit up-counter. The timer counter value can be captured in a register using an event on an external pin. The capture trigger can be programmed to be a rising or/and falling edge. The GPT can also generate an event on the output compare pins and an interrupt when the timer reaches a programmed value. The GPT has a 12-bit prescaler, which provides a programmable clock frequency derived from multiple clock sources.
GPT具有一个32位向上计数器。通过外部引脚上的事件,可以将定时器计数器的值捕获到寄存器中。捕获触发条件可以编程设置为上升沿或/和下降沿。当定时器达到预设值时,GPT还可以在输出比较引脚上生成事件并产生中断。GPT具有一个12位预分频器,可从多个时钟源派生出可编程的时钟频率。
I.MX6ULL GPT框图
时钟输入与预分频:
外部时钟信号从时钟选择模块输入。
预分频器(Prescaler)是一个12位可编程的分频器,可以将输入时钟信号分频,范围从1到4096。预分频器的输出作为定时器计数器的时钟源。
定时器计数器:
定时器计数器是一个32位向上计数器,它会根据预分频器输出的时钟信号进行计数。计数器的值可以通过处理器数据总线(Processor Data Bus)进行读取和写入。
输入捕获:
GPT模块有两个输入捕获通道(GPT_CAPTURE1和GPT_CAPTURE2),它们可以同步外部事件。当外部引脚上的信号变化(如上升沿或下降沿)时,可以通过输入捕获寄存器(Timer Input Reg 1和Timer Input Reg 2)捕获当前计数器的值。输入捕获通道可以配置触发条件,如上升沿(IF1)、下降沿(IF2)或双边沿(IF1IE和IF2IE)。
输出比较:
GPT模块有三个输出比较通道(GPT_COMPARE1、GPT_COMPARE2和GPT_COMPARE3),它们可以用于生成事件或中断。输出比较寄存器(Timer Output Reg1、Timer Output Reg2和Timer Output Reg3)存储预设的比较值。当计数器的值与任一输出比较寄存器的值相匹配时,可以通过比较器(cmp)触发输出比较事件(OF1、OF2、OF3)。
输出模式:
输出比较事件可以配置不同的输出模式(OM1、OM2、OM3),这些模式定义了输出引脚在比较事件发生时的行为。
中断:
当输入捕获或输出比较事件发生时,可以生成相应的中断(IF1IE、IF2IE、OF1IE、OF2IE、OF3IE)。中断通过GPT中断总线(GPT Interrupt Bus)传递给处理器。
溢出和回卷:
当计数器达到最大值(0xFFFFFFFF)时,会发生溢出(ROV),并触发溢出中断(ROVIE)。计数器可以配置为在溢出后回卷(FRR),即从0重新开始计数。
自由运行和重新启动:
GPT可以配置为自由运行模式,即计数器在溢出后继续计数。也可以配置为重新启动模式,即在溢出后从预设的初始值重新开始计数。
计数器时钟配置图
Crystal Oscillator (ipg_clk_24M):24MHz的晶体振荡器时钟源,它可以输入到预分频器24M(Prescaler 24M)。
External Clock (GPT_CLK):外部提供的GPT时钟信号,它可以直接输入到多路复用器,也可以通过预分频器24M后输入。
Peripheral Clock (ipg_clk):系统周钟,通常是一个较低频率的时钟信号,它可以直接输入到多路复用器。
Low Frequency Reference Clock (ipg_clk_32k):32kHz的低频参考时钟,它可以直接输入到多路复用器,适用于低功耗模式。
High Frequency Reference Clock (ipg_clk_highfreq):高频参考时钟,它可以直接输入到多路复用器,适用于需要高精度计时的应用。
Prescaler 24M:预分频器24M是一个可编程的分频器,它接收24MHz的晶体振荡器时钟信号,并将其分频后输出。
Sync:同步器(Sync)用于同步来自不同时钟源的信号,确保时钟信号的稳定性和一致性。
To Prescaler:多路复用器的输出可以被选择性地路由到预分频器,以进一步降低时钟频率,适应定时器计数的需求。
Clock off:允许关闭时钟信号,用于省电或在不需要定时器工作时关闭时钟。
I.MX6ULL GPT 特性
• One 32-bit up-counter with clock source selection, including external clock.• Two input capture channels with a programmable trigger edge.• Three output compare channels with a programmable output mode. A "forcedcompare" feature is also available.• Can be programmed to be active in low power and debug modes.• Interrupt generation at capture, compare, and rollover events.• Restart or free-run modes for counter operations.
- 一个带有时钟源选择的32位向上计数器,包括外部时钟。
- 两个输入捕获通道,具有可编程的触发边缘。
- 三个输出比较通道,具有可编程的输出模式。还提供“强制比较”功能。
- 可编程在低功耗模式和调试模式下保持活动状态。
- 在捕获、比较和回卷事件时生成中断。
- 计数器操作的重启或自由运行模式。
预分频器值变更时序图
The clock input source is configured using the clock source field (CLKSRC, in the
GPT_CR control register). The clock input to the prescaler can be disabled by
programming the CLKSRC bits (of the GPT_CR control register) to 000. The CLKSRC
field value should be changed only after disabling the GPT (by setting the EN bit in the GPT_CR to 0).The PRESCALER field selects the divide ratio of the input clock that drives the main counter. The prescaler can divide the input clock by a value (from 1 to 4096) and can be changed at any time. A change in the value of the PRESCALER field immediately affects the output clock frequency.时钟输入源是通过时钟源字段(CLKSRC,在GPT_CR控制寄存器中)进行配置的。可以通过将GPT_CR控制寄存器中的CLKSRC位编程为000来禁用输入到预分频器的时钟。只有在将GPT_CR中的EN位设置为0禁用GPT后,才应该更改CLKSRC字段的值。
PRESCALER字段选择驱动主计数器的输入时钟的分频比。预分频器可以将输入时钟分频,分频值可以从1到4096,并且可以随时更改。对PRESCALER字段值的更改会立即影响输出时钟频率。
在通用定时器(GPT)中如何改变预分频器的值以及这种改变如何影响时钟信号:
钟信号(Clk):图中最上方的波形代表输入到预分频器的原始时钟信号,通常是一个高频的方波信号。
预分频器值(Prescaler Value):中间的水平线代表预分频器的值。在图中,预分频器值从0x004变为0x002。这个值决定了输入时钟信号被分频的程度。
预分频后的时钟信号(Prescaled Clk):
图中最下方的波形代表经过预分频器处理后的时钟信号。这个信号的频率是原始时钟信号频率除以预分频器的值。
预分频器值的改变:
在图中,预分频器的值在某个时刻从0x004改变为0x002。这个改变通过一个斜线箭头表示,箭头指向预分频器值从0x004到0x002的变化。
即时生效:
一旦预分频器的值被改变,预分频后的时钟信号(Prescaled Clk)会立即反映出这种变化。在图中,这表现为时钟信号的周期在预分频器值改变后变得更短,因为分频值减小了。
时序关系:
图中展示了预分频器值改变与时钟信号之间的时序关系。可以看到,预分频器值的改变是在时钟信号的上升沿或下降沿进行的,这确保了改变的同步性。
通用定时器(GPT)工作模式(Operating Modes)
定时器可以执行的基本功能和配置。在工作模式下,GPT可以被设置为不同的时钟源,并且可以通过预分频器来调整计数速率。此外,还可以设置定时器的中断生成,以及在捕获、比较和回卷事件时的行为。GPT计数器可以被编程为在两种模式下工作:重启模式或自由运行模式
重启模式(Restart Mode):
在重启模式下(可通过GPT控制寄存器GPT_CR选择),当计数器达到比较值时,计数器会重置并从0x00000000开始重新计数。此重启功能仅与比较通道1相关联。对通道1的比较寄存器进行任何写操作都将重置GPT计数器。这是为了避免在计数过程中,如果比较值从较高的值更改为较低的值时可能错过比较事件。
自由运行模式(Free-Run Mode):
在自由运行模式下,当所有三个通道的比较事件发生时,计数器不会重置;相反,计数器会继续计数直到达到0xFFFFFFFF,然后回卷到0x00000000。这种模式允许计数器在达到最大值后继续运行,而不是在每个比较事件后重置模式适用于需要持续计时或测量的应用场景,其中计数器的值需要保持连续,而不是周期性重置。
通用定时器(GPT)的输入捕获 (Input Capture)
GPT定时器的输入捕获通道的工作原理和特性:
有两个输入捕获通道,每个输入捕获通道都有专用的捕获引脚、捕获寄存器和输入边缘检测/选择逻辑。每个输入捕获功能都有一个关联的状态标志,并且能够导致处理器发出中断服务请求。
当在输入捕获引脚上发生选定的边缘转换时,GPT_CNT的内容将被捕获到相应的捕获寄存器中,并且设置相应的中断状态标志。如果在中断寄存器中设置了相应的使能位,那么在检测到转换时可以生成中断请求。捕获可以被编程为发生在输入引脚的上升沿、下降沿、上升沿和下降沿,或者可以禁用捕获。这些事件与被选择来运行计数器的时钟同步。只有那些在先前记录的转换之后至少一个时钟周期(被选择来运行计数器的时钟)发生的转换才能保证触发捕获事件。在输入转换的锁定中最多可以有一个时钟周期的不确定性。输入捕获寄存器可以在任何时候读取,而不会影响它们的值。
边缘检测:
- 上升沿:从低电平到高电平的转换。
- 下降沿:从高电平到低电平的转换。
- 双边沿:同时检测上升沿和下降沿。
输入捕获事件的时序图
时钟信号(Clk):
图中最上方的波形代表从CLKSRC位字段设置中选择的时钟信号。这个时钟信号用于驱动GPT计数器。
捕获通道1的引脚信号(ipp_ind_capin1):
中间的波形代表捕获通道1的引脚信号。这个信号是从外部输入到GPT模块的,用于捕获事件。
捕获信号(Sig):
图中最下方的波形代表模块感知到的捕获信号。这个信号是经过GPT模块处理后的信号,用于触发捕获事件。
捕获事件:
当ipp_ind_capin1信号的边缘转换(如上升沿或下降沿)与Sig信号同步时,GPT计数器的当前值将被捕获到相应的捕获寄存器中。图中用箭头标出了捕获事件发生的时刻。
同步性:
捕获事件与选择运行计数器的时钟同步。这意味着,只有在先前记录的转换之后至少一个时钟周期发生的转换才能保证触发捕获事件。
不确定性:
在输入转换的锁定中可能存在最多一个时钟周期的不确定性。这可能是由于信号传播延迟或模块处理延迟造成的。
捕获寄存器:
捕获到的GPT计数器值将被存储在捕获寄存器中,这个值代表了从定时器启动到捕获事件发生的时间。
通用定时器(GPT)的输出比较 (Output Compare )
GPT定时器的输出比较通道的工作原理和特性:
三个输出比较通道使用的是与输入捕获通道相同的计数器(GPT_CNT)。当输出比较寄存器中预设的值与GPT_CNT中的值匹配时,将设置一个输出比较状态标志,并生成一个中断(如果中断寄存器中的相应位已被设置)。因此,输出比较定时器引脚将被置位、清零、切换、完全不受影响,或者提供一个低电平脉冲,持续时间为一个输入时钟周期(受限于引脚上允许的最大频率),这取决于已编程的模式位。
此外,还有一个“强制比较”功能,允许软件在需要时生成一个比较事件,而不需要计数器值等于比较值的条件。由于强制比较而采取的行动与输出比较匹配时相同,除了不会设置状态标志且不能生成中断。在向强制比较位写入后,强制通道会立即采取编程的行动。这些位是自清零的,并且总是读取为零
输出比较和中断时序图
时钟信号(Clk):
图中最上方的波形代表定时器的时钟信号,用于驱动GPT计数器。
计数器(Counter):
紧随Clk下方的波形代表GPT计数器的值,它是一个向上计数的32位计数器。计数器的值在每个时钟周期内递增。
比较值(Compare Value):
比较值是预设在输出比较寄存器中的值,当计数器的值与这个值相匹配时,将触发输出比较事件。
输出模式(Output Mode):
输出模式决定了当计数器值与比较值相匹配时,输出信号的行为。
图中显示了三种不同的输出模式:
011
:设置(set),输出信号在比较事件时被设置为高电平。
010
:清除(clear),输出信号在比较事件时被设置为低电平。
001
:切换(toggle),输出信号在每个比较事件时翻转。输出信号(Output Signal):
输出信号是根据输出模式在比较事件发生时改变的信号。
图中展示了不同输出模式下输出信号的变化:
在
011
模式下,输出信号在计数器值达到比较值时被设置为高电平。在
010
模式下,输出信号在计数器值达到比较值时产生一个低电平脉冲。在
001
模式下,输出信号在计数器值达到比较值时翻转。中断(Interrupt):
如果中断使能位被设置,那么在输出比较事件发生时,可以生成一个中断请求。图中没有明确显示中断请求,但它会在输出比较事件发生时根据配置生成。
低脉冲(low pulse):
在
010
模式下,当计数器值与比较值相匹配时,输出信号会产生一个短暂的低电平脉冲。
I.MX6ULL 通用定时器(GPT)的基本编程步骤:
时钟配置:确保使能GPT模块的时钟,设置时钟控制器模块(CCM)的相应位。
定时器初始化:重置GPT模块,将所有寄存器恢复到默认状态。
时钟源选择:配置GPT的时钟源,选择合适的时钟源并设置预分频器,以得到所需的计数频率。
计数模式选择:选择计数模式,重启模式(Restart Mode)或自由运行模式(Free-Run Mode)。
输入捕获配置:配置输入捕获通道,设置触发边缘(上升沿、下降沿或双边沿),使能输入捕获中断(如果需要)。
输出比较配置:配置输出比较寄存器,配置输出比较通道,设置比较值和输出模式(如切换、清除、设置或脉冲),使能输出比较中断(如果需要)。
中断配置(如果需要):配置和使能GPT的中断,包括输入捕获和输出比较中断。在中断服务程序(ISR)中实现相应的处理逻辑。
计数器启动:设置GPT控制寄存器中的EN位来启动定时器,开始计数。
结语:
无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力
相关文章:
GPT(General Purpose Timer)定时器
基本概念: 在嵌入式系统中,General Purpose Timer(GPT)是一种非常重要的硬件组件,用于提供定时功能。 定义:通用定时器是一种能够提供精确时间测量和控制功能的电子设备或电路模块。它可以产生周期性的时…...
Node.js - HTTP
1. HTTP请求 HTTP(Hypertext Transfer Protocol,超文本传输协议)是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端(通常是浏览器、手机应用或其他网络工具)发送给服务器的消息,用来请求资源或执行…...
Vue数据响应式,reaction,ref的使用
目录 数据响应式 如何使用 reactionyu区别 数据响应式 什么是数据响应式 简单来说就是当数据变了的时候,页面的展示也会跟着发生变化。 在Vue当中我们有两个函数可以实现这个功能reaction,ref 如何使用 首先这两个函数在是在Vue对象中我们可以先对…...
【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading
目录 1. 效果图 2. 思路分析 2.1 实现思路 2.2 可能存在的问题 2.2.1 并发请求管理 2.2.2 请求快速响应和缓存带来的问题 3. 代码实现 4. 总结 1. 效果图 如下图所示,当路由变化或发起请求时,出现 Loading 等待效果,此时页面不可见。…...
JVM:ZGC详解(染色指针,内存管理,算法流程,分代ZGC)
1,ZGC(JDK21之前) ZGC 的核心是一个并发垃圾收集器,所有繁重的工作都在Java 线程继续执行的同时完成。这极大地降低了垃圾收集对应用程序响应时间的影响。 ZGC为了支持太字节(TB)级内存,设计了基…...
在 Ubuntu 上安装和配置 Redis
在 Ubuntu 上安装和配置 Redis,并使用发布-订阅(Pub/Sub)功能,可以按照以下步骤进行: 一、安装 Redis 1. 更新包列表 首先,更新本地的包列表以确保获取到最新的软件包信息: sudo apt update…...
【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
1. 代码规范方面 添加 Option Explicit:强制要求显式声明所有变量,这样可以避免因变量名拼写错误等情况而出现难以排查的逻辑错误,提高代码的健壮性。使用 On Error GoTo 进行错误处理:通过设置错误处理机制,当代码执行…...
相机SD卡照片数据不小心全部删除了怎么办?有什么方法恢复吗?
前几天,小编在后台友收到网友反馈说他在整理相机里的SD卡,原本是想把那些记录着美好瞬间的照片导出来慢慢欣赏。结果手一抖,不小心点了“删除所有照片”,等他反应过来,屏幕上已经显示“删除成功”。那一刻,…...
【机器学习:十四、TensorFlow与PyTorch的对比分析】
1. 发展背景与社区支持 1.1 TensorFlow的背景与发展 TensorFlow是Google于2015年发布的开源深度学习框架,基于其前身DistBelief系统。作为Google大规模深度学习研究成果的延续,TensorFlow从一开始就定位为生产级框架,强调跨平台部署能力和性…...
从零搭建一个Vue3 + Typescript的脚手架——day1
1.开发环境搭建 (1).配置vite vite简介 Vite 是一个由尤雨溪开发的现代化前端构建工具,它利用了浏览器对 ES 模块的原生支持,极大地提升了开发服务器的启动速度和热更新效率。Vite 不仅适用于 Vue.js,还支持 React、Svelte 等多种框架&…...
unity打包sdk热更新笔记
基础打包需要知识: 安装包大小不要超过2G,AB包数量过多会影响加载和构建,多次IO,用Gradle打包,要支持64位系统,不同的渠道包:让做sdk的人支持,提供渠道包的打包工具 配置系统环境变量…...
算法-贪心算法简单介绍
下面是贪心算法视频课的导学内容. 目录 1. 什么是贪心算法?2. 贪心算法简单的三个例子:1. 找零问题2. 最小路径和问题3. 背包问题 3. 贪心算法的特点4. 贪心算法学习的方式? 1. 什么是贪心算法? 简单来说, 我们称以局部最优进而使得全局最优的一种思想实现出来的算法为贪心…...
1Hive概览
1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…...
Linux SUID提权
文章目录 1. SUID/SGID2. 查找SUID文件3. SUID/SGID提权3.1 SUID配置不当3.2 SUID systemctl提权3.3 $PATH变量劫持 参考 1. SUID/SGID SUID(Set User ID)意味着如果某个用户对属于自己的文件设置了这种权限,那么其他用户在执行这一脚本时也…...
RabbitMQ确保消息可靠性
消息丢失的可能性 支付服务先扣减余额和更新支付状态(这俩是同步调用),然后通过RabbitMq异步调用支付服务更新订单状态。但是有些情况下,可能订单已经支付 ,但是更新订单状态却失败了,这就出现了消息丢失。…...
用plotly制作一条带颜色的时间轴,显示学习情况
前一篇文章我写到用matplotlib制作一条带颜色的时间轴,显示学习情况-CSDN博客,这是我在工作地方写的程序,我回家后发现家里的笔记本用不了matplotlib,所以我尝试用plotly这另外的模块也写一段程序,让我的程序能够回家使…...
MySQL:索引
目录 1.MySQL索引是干什么的 2.铺垫知识 3.单个page的理解 4.页目录 单页情况 多页情况 1.MySQL索引是干什么的 MySQL的索引是提高查询效率,主要提高海量数据的检索速度。 2.铺垫知识 操作系统与磁盘之间IO的基本单位是4kb。 数据库是一个应用层软件&#…...
Kylin: `GLIBC_2.34‘ not found
需要查看服务器GLIBC版本 strings /lib64/libc.so.6 |grep GLIBC_如果没有,有两种办法,一种是libc.so.6降级,但是这样很容易将服务器搞崩溃 所以可以尝试下载对应版本 glibc 打包编译,重新建立软连,下列是RPM资源可以…...
ASP.NET Core - 依赖注入(四)
ASP.NET Core - 依赖注入(四) 4. ASP.NET Core默认服务5. 依赖注入配置变形 4. ASP.NET Core默认服务 之前讲了中间件,实际上一个中间件要正常进行工作,通常需要许多的服务配合进行,而中间件中的服务自然也是通过 Ioc…...
【全套】基于分类算法的学业警示预测信息管理系统
【全套】基于分类算法的学业警示预测信息管理系统 【摘 要】 随着网络技术的发展基于分类算法的学业警示预测信息管理系统是一种新的管理方式,同时也是现代学业预测信息管理的基础,利用互联网的时代与实际情况相结合来改变过去传统的学业预测信息管理中…...
《零基础Go语言算法实战》【题目 2-25】goroutine 的执行权问题
《零基础Go语言算法实战》 【题目 2-25】goroutine 的执行权问题 请说明以下这段代码为什么会卡死。 package main import ( "fmt" "runtime" ) func main() { var i byte go func() { for i 0; i < 255; i { } }() fmt.Println("start&quo…...
回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测
回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法,用于处理…...
【OJ刷题】同向双指针问题3
这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:OJ刷题入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1…...
数据挖掘实训:天气数据分析与机器学习模型构建
随着气候变化对各行各业的影响日益加剧,精准的天气预测已经变得尤为重要。降雨预测在日常生活中尤其关键,例如农业、交通和灾害预警等领域。本文将通过机器学习方法,利用历史天气数据预测明天是否会下雨,具体内容包括数据预处理、…...
RAG 带来的一些问题
RAG (Retrieval-Augmented Generation) 提高了查询的准确性,但也引入了一些新的问题。主要问题集中在信息检索和生成模型的结合方式上,这些问题影响了系统的性能、效率和输出质量。以下是 RAG 带来的主要问题以及相应的解决方法。 1. 依赖外部检索系统的…...
大疆上云API基于源码部署
文章目录 大疆上云API基于源码部署注意事项1、学习官网2、环境准备注意事项3、注册成为DJI开发者4、下载前后端运行所需要的包/依赖前端依赖下载后端所需要的Maven依赖包 用到的软件可以在这里下载5、MySQL数据库安装安装MySQL启动MySQL服务在IDEA中配置MySQL的连接信息 6、Red…...
【Python系列】Python 中使用 pymysql 连接 MySQL 数据库进行数据查询
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【数据结构学习笔记】19:跳表(Skip List)
介绍 跳表是一个能在 O ( n l o g n ) O(nlogn) O(nlogn)时间完成查找、插入、删除的数据结构,相比于树形结构优点就是很好写(所以也用于实现Redis ZSet)。其核心思想就是维护一个元素有序的,能随机提升索引层数的链表。最下面一…...
《计算机网络》课后探研题书面报告_网际校验和算法
网际校验和算法 摘 要 本文旨在研究和实现网际校验和(Internet Checksum)算法。通过阅读《RFC 1071》文档理解该算法的工作原理,并使用编程语言实现网际校验和的计算过程。本项目将对不同类型的网络报文(包括ICMP、TCP、UDP等&a…...
【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
以人物为中心的主体到图像的高保真合成,CVPR2024 code:CodeGoat24/Face-diffuser: [CVPR2024] Official implementation of High-fidelity Person-centric Subject-to-Image Synthesis. paper:2311.10329 背景 研究问题:这篇文…...
Flink集成TDEngine来批处理或流式读取数据进行流批一体化计算(Flink SQL)拿来即用的案例
Flink 以其流批一体化的编程模型而备受青睐。它支持高吞吐、低延迟的实时流计算,同时在批处理方面也表现出色。Flink 提供了丰富的 API,如 DataStream API 和 DataSet API,方便开发者进行数据处理操作,包括转换、聚合、连接等,使得开发者能够轻松构建复杂的数据处理逻辑。…...
Zookeeper特性与节点数据类型详解
1、 Zookeeper介绍 ZooKeeper 是一个开源的分布式协调框架,是Apache Hadoop 的一个子项目,主要用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集…...
C# HslCommunication库
C# HslCommunication库是一个用于建立TCP连接并进行Modbus通讯的库。下面将详细介绍如何使用该库进行TCP通讯。 首先,需要在C#项目中引用HslCommunication库。 创建一个TCP连接对象,可以使用HslCommunication.ModBus.ModbusTcpNet类,例如&am…...
springMVC实现文件上传
目录 一、创建项目 二、引入依赖 三、web.xml 四、编写上传文件的jsp页面 五、spring-mvc.xml 六、controller 七、运行 一、创建项目 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…...
【深度学习】Windows系统Anaconda + CUDA + cuDNN + Pytorch环境配置
在做深度学习内容之前,为GPU配置anaconda CUDA cuDNN pytorch环境,在网络上参考了很多帖子,但pytorch的安装部分都有些问题或者比较复杂繁琐,这里总结了相对简单快速的配置方式 文章目录 AnacondaCUDAcuDNNpytorchtorchtorchau…...
springboot整合rabbitmq
1. 添加依赖 首先,在你的 pom.xml 文件中添加 RabbitMQ 的依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2. 配置 RabbitMQ …...
【React】脚手架进阶
目录 暴露webpack配置package.json的变化修改webpack.config.js配置less修改域名、端口号浏览器兼容处理处理跨域 暴露webpack配置 react-scripts对脚手架中的打包命令进行封装,如何暴露这些打包配置呢?上篇写到在package.json中的scripts配置项中有eje…...
Unreal Engine 5 (UE5) Metahuman 的头部材质
在图中,你展示了 Unreal Engine 5 (UE5) Metahuman 的头部材质部分,列出了头部材质的多个元素。以下是对每个部分的解释: 材质解释 Element 0 - MI_HeadSynthesized_Baked 作用: 这是 Metahuman 的主要头部材质,控制整…...
当自动包布机遇上Profinet转ModbusTCP网关,“妙啊”,工业智能“前景无限
在自动化控制技术日新月异的当下,Profinet与ModbusTCP这两种协议在工业通信领域占据着举足轻重的地位。ModbusTCP是基于以太网的串行通信协议,而Profinet则是依托工业以太网的现场总线协议。它们在数据传输速度、实时性表现以及兼容性等方面各具特色。不…...
Elasticsearch 批量导入数据(_bluk方法)
官方API:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html 建议先看API POST /<索引名>/_bulk 格式要求: POST _bulk { "index" : { "_index" : "test", "_id" : &q…...
lammps应用于热电材料
文章目录 1.热传导理论1.热导率2.晶格振动3.晶体热容4.声子平均自由程5.傅里叶定律 2.lammps计算Ar热导率3.lammps模拟SiGe热电材料4.平衡分子动力学(EMD) 1.热传导理论 1.热导率 热传递机制随介质材料相的不同而改变:固体(热传导)、液体(热对流)、气体(对流和辐射…...
SAP资产盘盈盘亏的过账处理、入账价值错误调整、资产减值准备
文章目录 一、SAP资产盘盈盘亏处理1、ABNAN盘盈 (往年资产) ABZON (当年资产)2、ABAVN盘亏 二、资产价值入账错了(价值多了或少了),怎么调账1、价值少了2、价值多了 三、资产减值准备1、启用重估2、指定间隔…...
Adobe与MIT推出自回归实时视频生成技术CausVid。AI可以边生成视频边实时播放!
传统的双向扩散模型(顶部)可提供高质量的输出,但存在显著的延迟,需要 219 秒才能生成 128 帧的视频。用户必须等待整个序列完成才能查看任何结果。相比之下CausVid将双向扩散模型提炼为几步自回归生成器(底部ÿ…...
MYSQL学习笔记(一):准备数据和数据库的最基本命令
前言: 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇,涵盖入门、进阶、高级(一些原理分析);这一篇是入门准备数据和一些关于数据库的操作命令;虽然MYSQL命令很多&…...
求矩阵不靠边元素之和(PTA)C语言
求矩阵的所有不靠边元素之和,矩阵行的值m从键盘读入(2<m<10),调用自定义函数Input实现矩阵元素从键盘输入,调用Sum函数实现求和。(只考虑float型,且不需考虑求和的结果可能超出float型能表示的范围)。 函数接口定义&#x…...
仿infobip模板功能-可通过占位符配置模板内容
模仿infobip制作的模板功能,正文可在任意位置加参数的功能。如下图所示:在正文中通过{{\d}}进行占位,在使用模板时,可在此位置自定制内容,并预览效果。 代码: <template><div class"templa…...
STM32第6章、WWDG
一、简介 WWDG:全称Window watchdog,即窗口看门狗,本质上是一个能产生系统复位信号和提前唤醒中断的计数器。 特性: 是一个递减计数器。 看门狗被激活后, 当递减计数器值从 0x40减到0x3F时会产生复位(即T6位…...
没有正确使用HTTP Range Request,导致访问Azure Blob存储的视频没有实现流式播放
引文: 组里的小伙伴在修改视频播放相关的代码,修改之前的方案使用CDN转发,可以实现流式播放,修改之后的代码因为没有正确的使用Http Range Request, 导致画面访问Azure Blob存储的视频没有实现流式播放,整理下线索在这…...
React中Fiber树构建过程详解——react中render一个App组件(包含子组件)的流程详解
在 React 中,渲染一个包含子组件的组件涉及一系列底层流程,包括构建虚拟 DOM(React Element)、协调(Reconciliation)、Fiber 树管理和最终的 DOM 操作。以下是一个从底层解析的详细流程: 1. 初始…...
机器学习赋能的智能光子学器件系统研究与应用
在人工智能与光子学设计融合的背景下,科研的边界持续扩展,创新成果不断涌现。从理论模型的整合到光学现象的复杂模拟,从数据驱动的探索到光场的智能分析,机器学习正以前所未有的动力推动光子学领域的革新。据调查,目前…...