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

[IMX] 04.定时器 - Timer

目录

1.周期中断定时器 - EPIT

1.1.工作模式

1.2.配置寄存器 - EPIT_CR

1.3.状态寄存器 - EPIT_SR

1.4.加载寄存器 - EPIT_LR

1.5.比较寄存器 - EPIT_CMPR

1.6.计数寄存器 - EPIT_CNR

2.通用定时器 - GPT

2.1. 时钟源

2.2.模块结构

2.3.工作模式

2.4.配置寄存器 - GPT_CR

2.5.分频寄存器 - GPT_PR

2.6.状态寄存器 - GPT_SR

2.7.计数寄存器 - GPT_CNT

2.8.比较寄存器 - GPT_OCR

2.9.高精度定时原理


1.周期中断定时器 - EPIT

I.MX6ULL 包含两个 EPIT(Enhanced Periodic Interrupt Timer)定时器,EPIT 是一个 32 位定时器,用于提供精准的定时中断,软件使能后 EPIT 就会开始运行,EPIT 定时器有如下特点:

  • 可选择时钟源:ipg_clk、ipg_clk_32k、ipg_clk_highfreq;

  • 32 位向下计数;

  • 12 位分频,分频值 1~4096;

  • 计数值和比较值相等时产生中断;

其结构如下所示:

图中各模块的功能如下:

  1. 多路选择器:选择 EPIT 定时器的时钟源,EPIT 有 3 个可选时钟源: ipg_clk、ipg_clk_32k、ipg_clk_highfreq;

  2. 12-bit 分频器:对时钟源进行分频,12-bit 对应的值是 0~4095,对应 1~4096 分频;

  3. 经过分频的时钟信号进入 EPIT 内部,EPIT 内部有三个重要的寄存器:

    1. 32-bit 计数寄存器 EPIT_CNR;

    2. 32-bit 加载寄存器 EPIT_LR;

    3. 32-bit 比较寄存器 EPIT_CMPR;

    4. EPIT 为向下计数器,初始值设置后开始向下递减直至为 0,EPIT_CNR 寄存器保存当前的计数值,在 Set-and-Forget 模式下,计数寄存器的值减少为 0 时,EPIT 会重新从加载寄存器读取数值到计数寄存器,重新开 始向下计数;

  4. 比较器:比较寄存器中的值用于和计数寄存器的计数值比较,如果相等会产生一个比较事件;

  5. EPIT 可以设置引脚输出,设置后通过指定的引脚输出信号;

  6. 中断信号输出;

1.1.工作模式

EPIT 定时器有两种工作模式:set-and-forget 和 free-running,这两个工作模式的区别如下:

  • set-and-forget 模式:EPITx_CR (x = 1~2) 寄存器的 RLD 位为 1 时 EPIT 工作在该模式,该模式下 EPIT 计数寄存器从加载寄存器 EPITx_LR (x = 1~2) 中获取初始值,无法直接向计数寄存器写入数据,当计数器计数到 0 时,会从加载寄存器 EPITx_LR (x = 1~2) 中重新加载计数值到计数寄存器,并开始新一轮计时;

  • free-running 模式:EPITx_CR (x = 1~2) 寄存器的 RLD 位为 0 时 EPIT 工作在该模式,计数器计数到 0 后,会重新从 0xFFFF,FFFF 开始计数,而非从加载寄存器 EPITx_LR (x = 1~2) 中获取数据;

1.2.配置寄存器 - EPIT_CR

其中,重点关注如下位域:

  • CLKSRC[25:24]:EPIT 时钟源选择:

    • 0:禁用时钟源;

    • 1:选择 Peripheral 时钟 (ipg_clk);

    • 2:选择 High-frequency 参考时钟 (ipg_clk_highfreq);

    • 3:选择 Low-frequency 参考时钟 (ipg_clk_32k);

    • 例程中设置为 1,即选择 ipg_clk 作为 EPIT 的时钟源,ipg_clk = 66MHz;

  • PRESCALAR[15:4]:EPIT 时钟源分频值,可设置范围 0~4095,对应 1~4096 分频;

  • RLD[3]:EPIT 工作模式:

    • 0:free-running 模式;

    • 1:set-and-forget 模式;

    • 例程中设置为 1,即工作模式为 set-and-forget;

  • OCIEN[2]:比较中断使能位:

    • 0:禁用比较中断;

    • 1:使能比较中断;

    • 例程中需要使能比较中断;

  • ENMOD[1]:计数器初始值设置:

    • 0:计数器初始值等于上次关闭 EPIT 定时器后计数寄存器中的值;

    • 1:计数器初始值从加载寄存器中读取;

  • EN[0]:EPIT 使能位:

    • 0:禁用 EPIT;

    • 1:启用 EPIT;

1.3.状态寄存器 - EPIT_SR

EPIT_SR 寄存器只有一个有效位 OCIF[0],该位是比较中断标志位:

  • 为 0 时表示没有比较事件发生;

  • 为 1 时表示有比较事件发生;

1.4.加载寄存器 - EPIT_LR

LOAD[31:0] 保存计数值,当 EPIT_CR.RLD 为 1 时,计数器从该寄存器中加载计数值

1.5.比较寄存器 - EPIT_CMPR

COMPARE[31:0] 保存比较值,当计数值与其相等时触发一次比较事件

1.6.计数寄存器 - EPIT_CNR

COUNT[31:0] 保存当前的计数值,软件可以读取当前计数值而不影响计数

2.通用定时器 - GPT

GPT(General Purpose Timer)是一个 32-bit 向上定时器(即从 0x0000,0000 开始向上递增计数)

GPT 定时器可以设置比较值,当计数器中的值和比较值相等时产生比较事件,并输出中断信号

GPT 定时器有一个 12 位的分频器,可以对 GPT 定时器的时钟源进行分频

GPT 定时器的特性如 下:

  • 时钟源可选;

  • 32-bit 向上计数;

  • 12-bit 分频(1~4096 分频);

  • 2 个输入捕获通道,可以设置触发方式;

  • 3 个输出比较通道,可以设置输出模式;

  • 可以生成捕获中断、比较中断和溢出中断;

  • 计数器可以运行在 Restart 或 Free-Run 模式;

2.1. 时钟源

GPT 可选择的时钟源如下所示:

GPT 可选的时钟源有五个:

  • ipg_clk_24M;

  • GPT_CLK (外部时钟);

  • ipg_clk;

  • ipg_clk_32k;

  • ipg_clk_highfreq;

  • 例程选择 ipg_clk 为 GPT 的时钟源:ipg_clk = 66MHz;

2.2.模块结构

GPT 定时器的结构如下所示:

其中各部分的作用如下:

  1. 时钟源:例程选择 ipg_clk 作为 GPT 定时器的时钟源;

  2. 12-bit 分频器:对时钟源进行分频,可设置 0~4095,分别对应 1~4096 分频;

  3. 经过分频的时钟信号:输入至 GPT 定时器内部的 32 位计数器;

  4. 输入捕获通道 1;

  5. 输入捕获通道 2;

  6. 输出比较寄存器:共有三路输出比较,因此有三个输出比较寄存器,输出比较寄存器为 32-bit;

  7. 输出比较中断:共三路输出比较中断,当计数器中的值和输出比较寄存器中的值相等时触发比较中断;

2.3.工作模式

GPT 有 Restart 和 Free-Run 两种工作模式,其特点如下:

  • Restart:GPTx_CR(x=1~2) 寄存器的 FRR 位为 0 时 GPT 工作在该模式,该模式下,当计数值和比较寄存器中的值相等时计数值会清零,然后重新从 0x00000000 开始向上计数,仅比较通道 1 才可以使用该模式,向比较通道 1 的比较寄存器写入任何数据都会复位 GPT 计数器,对于其他两路比较通道(通道 2 和 3),发生比较事件后不会复位计数器。

  • Free-Run:GPTx_CR(x=1~2) 寄存器的 FRR 位为 1 时 GPT 工作在该模式,该模式适用于所有三个比较通道,比较事件发生后不会复位计数器,而是继续计数,直到计数值为 0xFFFFFFFF,然后重新回滚到 0x00000000;

2.4.配置寄存器 - GPT_CR

该寄存器用于配置 GPT 定时器:

其中,主要关注如下几个位域:

  • OM3[28:26]:输出比较通道 3 的运行模式:

    • 0b000:输出断开,引脚无响应;

    • 0b001:翻转输出引脚的电平;

    • 0b010:清空输出引脚(引脚低电平);

    • 0b011:设置输出引脚(引脚高电平);

    • 0b1xx:在输出引脚上产生一个低电平有效脉冲(一个输入时钟宽度);

  • OM2[25:23]:输出比较通道 2 的运行模式:

    • 同上;

  • OM1[22:20]:输出比较通道 1 的运行模式:

    • 同上;

  • SWR[15]:复位 GPT 定时器,向该位写 1 可以复位 GPT 定时器,GPT 复位完成后该位会自动清零;

  • FRR[9]:运行模式选择,该位为 0 时比较通道 1 工作在 Restart 模式,该位为 1 时所有的三个比较通道均工作在 Free-Run 模式;

  • CLKSRC[8:6]:GPT 定时器的时钟源选择:

    • 为 0 时关闭时钟源;

    • 为 1 时选择 ipg_clk 作为时钟源;

    • 为 2 时选择 ipg_clk_highfreq 作为时钟源;

    • 为 3 时选择外部时钟为时钟源;

    • 为 4 时选择 ipg_clk_32k 作为时钟源;

    • 为 5 时选择 ip_clk_24M 作为时钟源;

    • 例程中选择 ipg_clk 作为 GPT 定时器的时钟源,因此该位设置为 1 (0b001);

  • ENMOD[1]:GPT 使能模式,该位为 0 时,如果关闭 GPT 定时器,计数寄存器中会保存 GPT 定时器关闭时的计数值,该位为 1 时,如果关闭 GPT 定时器,计数器寄存器就会清零;

  • EN[0]:模块使能,为 1 时使能 GPT 定时器,为 0 时关闭 GPT 定时器;

2.5.分频寄存器 - GPT_PR

该寄存器用于保存 GPT 定时器的分频系数:

  • PRESCALER24M[15:12]:24MHz 晶振分频系数,若时钟源未选择 24MHz 晶振,该位无效,该位可设置为 0x0~0xF,分别对应 1~16 分频;

  • PRESCALER[11:0]:分频系数,选择非 24MHz 晶振的其他时钟源时该位有效,其为 12-bit 分频器,可设置 0~4095,分别对应 1~4096 分频;

2.6.状态寄存器 - GPT_SR

其中,主要关注以下位域:

  • ROV[5]:回滚(溢出)标志位,当计数值从 0xFFFFFFFF 回滚到 0x00000000 的时候此位置 1;

  • IF2[4]:输入捕获通道 2 的输入捕获标志位,输入捕获事件发生以后该位置 1,共有两路输入捕获通道,如果使用输入捕获中断,则需要在中断处理函数中清除此位;

  • IF1[3]:输入捕获通道 1 的输入捕获标志位,输入捕获事件发生以后该位置 1,共有两路输入捕获通道,如果使用输入捕获中断,则需要在中断处理函数中清除此位;

  • OF3[2]:输出比较中断标志位,输出比较事件发生后此位置 1,共有三路输出比较通道;如果使用输出比较中断,则需要在中断处理函数中清除此位;

  • OF2[1]:输出比较中断标志位,输出比较事件发生后此位置 1,共有三路输出比较通道;如果使用输出比较中断,则需要在中断处理函数中清除此位;

  • OF1[0]:输出比较中断标志位,输出比较事件发生后此位置 1,共有三路输出比较通道;如果使用输出比较中断,则需要在中断处理函数中清除此位;

2.7.计数寄存器 - GPT_CNT

32-bit 的 COUNT 字段保存计数值:

2.8.比较寄存器 - GPT_OCR

每个 GPT 模块包含三路输出中断,每路输出均有对应的输出比较寄存器,32-bit 的 COMP 保存用户设置的比较值:

当计数器值和寄存器 GPT_OCR 中的值相等时会产生比较事件,如果比较中断使能则会触发相应的中断

2.9.高精度定时原理

高精度定时函数的实现需要借助硬件定时器,例程使用 GPT 定时器实现高精度延时

如果设置 GPT 定时器的时钟源为 ipg_clk = 66MHz,设置 66 分频,则进入 GPT 定时器的最终时钟频率为 66 / 66 = 1MHz,周期为 1us

GPT 计数器每计一个数就表示 “过去” 了 1us,如果计 10 个数就表示 “过去” 了 10us,通过读取寄存器 GPT_CNT 中的值就知道计了多少个数(即时间过去了多少),比如现在要延时 100us,进入延时函数后纪录下寄存器 GPT_CNT 中的值为 200,当 GPT_CNT 中的值为 300 时就表示 100us 过去了,表示延时结束

GPT_CNT 为 32-bit 寄存器,如果时钟为 1MHz,则 GPT_CNT 最多可以实现 0xFFFFFFFFus = 4294967295us ≈ 4294s ≈ 72min,也就是说 72 分钟以后 GPT_CNT 寄存器就会回滚到 0x00000000,也就是出现溢出,所以需要在延时函数中要处理溢出的情况

相关文章:

[IMX] 04.定时器 - Timer

目录 1.周期中断定时器 - EPIT 1.1.工作模式 1.2.配置寄存器 - EPIT_CR 1.3.状态寄存器 - EPIT_SR 1.4.加载寄存器 - EPIT_LR 1.5.比较寄存器 - EPIT_CMPR 1.6.计数寄存器 - EPIT_CNR 2.通用定时器 - GPT 2.1. 时钟源 2.2.模块结构 2.3.工作模式 2.4.配置寄存器 - …...

前端 vue + element-ui 框架从 0 - 1 搭建

1. 安装node 地址: Node.js — 在任何地方运行 JavaScript 2. 安装 vue 2.1 执行安装命令 npm uninstall -g vue-cli npm install -g vue/cli 安装最新的vue3版本 2.2 使用vue 脚手架 搭建项目 vue create project_name 2.2.1 注意 项目名称不能包…...

【IDEA】删除/替换文件中所有包含某个字符串的行

目录 前言 正则表达式 示例 使用方法 前言 在日常开发中,频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式,避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

算法刷题(Java与Python)2.数组、列表

目录 Java的数组 数组介绍 注意事项 Python的列表 列表介绍 Python 的列表和 Java 的 ArrayList 一样吗? 例题1 代码分析 Java代码 Python代码 对比代码 例题2 代码分析 Java代码 Python代码 对比代码 例题三 Java代码 Python代码 代码对比 Jav…...

uniapp打包H5,输入网址空白情况

由于客户预算有限,最近写了两个uniapp打包成H5的案例,总结下面注意事项 1. 发行–网站-PCWeb或手机H5按钮,输入名称,网址 点击【发行】,生成文件 把这个给后端,就可以了 为什么空白呢 最重要一点&#xf…...

JavaScript 中使用 Elasticsearch 的正确方式,第一部分

作者:来自 Elastic Jeffrey Rengifo 讲解如何用 JavaScript 创建一个可用于生产环境的 Elasticsearch 后端。 想获得 Elastic 认证?看看下一期 Elasticsearch 工程师培训什么时候开始吧! Elasticsearch 拥有大量新功能,能帮助你…...

每日一道leetcode(增加版)

901. 股票价格跨度 - 力扣(LeetCode) 题目 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今…...

排序复习/下(C语言版)

目录 1.快速排序(hoare法) 单趟: 整体: 代码优化: ​编辑三数取中代码: 小区间优化代码: hoare法疑问解答: 2.快速排序(挖坑法) 3.快速排序&#x…...

Vue百日学习计划Day33-35天详细计划-Gemini版

总目标: 在 Day 33-35 理解 Vue 组件从创建到销毁的完整生命周期,熟练掌握 Composition API 中主要的生命周期钩子,并知道在不同阶段执行哪些操作。 所需资源: Vue 3 官方文档 (生命周期钩子): https://cn.vuejs.org/guide/essentials/lifecycle.html你…...

Apidog MCP服务器,连接API规范和AI编码助手的桥梁

#作者:曹付江 文章目录 1.了解 MCP2.什么是 Apidog MCP 服务器?3.Apidog MCP 服务器如何工作4.利用人工智能改变开发工作流程5.设置 Apidog MCP 服务器: 分步指南5.高级功能和提示5.1 使用 OpenAPI 规范5.2.多个项目配置5.3.安全最佳实践5.4…...

统计客户端使用情况,使用es存储数据,实现去重以及计数

这篇文件的重点在tshark、filebeat、和logstash。 需求:统计客户使用的客户端版本 实现工具:tshark 1.10.14,filebeat 8.17.0,logstash 8.17.0,elasticsearch 8.17.0,kibana 8.17.0 总体设计&#xff1a…...

Git基础面试题

git的rm命令与系统的rm命令有什么区别 git rm 和系统的 rm (在 Windows 上是 del) 命令都用于删除文件,但它们在 Git 仓库的上下文中作用有所不同: 系统 rm (或 del) 命令: 作用: 直接从文件系统中删除文件。Git 的感知&#xff…...

conda 的常用命令

好的,下面为你介绍conda的常用命令: 环境管理 # 创建新环境 conda create -n env_name python3.8# 激活环境 conda activate env_name# 查看所有环境 conda env list# 复制环境 conda create -n new_env --clone old_env# 删除环境 conda remove -n en…...

PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲

PLC双人舞:ethernet ip转profinet网关奏响施耐德与AB的协奏曲 案例分析:施耐德PLC与AB PLC的互联互通 在现代工业自动化中,设备之间的互联互通至关重要。本案例旨在展示如何通过北京倍讯科技的EtherNet/IP转Modbus网关,将施耐德P…...

百度OCR:证件识别

目录 一、编写目的 二、准备工作 2.1 OCR密钥 三、代码实现 3.1 配置文件 3.2 请求接收封装 3.3 请求响应封装 3.4 服务类参数初始化 3.5 服务类实现 3.6 解析结果 3.7 定义Web接口 四 测试效果 五、总结 欢迎来到盹猫🐱的博客 本篇文章主要介绍了 [百…...

纯前端实现图文识别 OCR

Tesseract.js Tesseract.js 是一个基于 Google Tesseract OCR 引擎的 JavaScript 库,利用 WebAssembly 技术将的 OCR 引擎带到了浏览器中。它完全运行在客户端,无需依赖服务器,适合处理中小型图片的文字识别。 基本使用 以下示例展示了如何…...

2025.05.01【Barplot】柱状图的多样性绘制

Custom color A few examples showing how to custom barplot color. Horizontal barchart It makes sense to make your barchart horizontal: group labels are now much easier to read 文章目录 Custom colorHorizontal barchart 探索Barplot的奥秘Barplot基础什么是Barp…...

在资源受限环境下,移动端如何实现流畅动画?如何在内存、CPU、GPU、网络等多种限制条件下,依然保持动画高帧率、低延迟、不卡顿?

在日常生活中,移动设备已经成为不可或缺的工具。从社交、购物到游戏、教育,几乎所有的应用场景都依赖于移动终端的计算和显示能力。然而,随着用户体验的不断提升需求,动画成为了界面交互中不可忽视的一环。动画不仅提升了视觉吸引…...

HJ10 字符个数统计【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ10 字符个数统计 一、题目描述 二、测试用例 三、解题思路 基本思路:   建立字符串的散列表,然后统计不同字符个数具体思路:   遍历字符串的字…...

关键点检测算法-RTMPose

一、网络框架(top-down模式) 二、各部分内容 1、骨干网络 对于网络而言,CXPset太大,可以换成starnet 2、一个卷积层 7x7的卷积核对性能提升最大 3、一个全连接层 将一维关键点表示扩展到由超参数控制的所需维度。 4、一个用…...

云原生安全:错误策略S3存储桶ACL设置为Everyone:FullControl

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从基础到实践的深度解析 1. 基础概念 S3存储桶与ACL Amazon S3(Simple Storage Service)是AWS提供的对象存储服务,支持存储和检索任意规模的数据。ACL(访问控制列表…...

Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…...

图漾相机错误码解析(待补充)

文章目录 1.相机错误码汇总2.常见报错码2.1 -1001报错2.1.1 没有找到相机2.1.2 SDK没有进行初始化 2.2 -1005报错2.2.1 跨网段打开相机2.2.2 旧版本SDK在软触发失败后提示的报错2.2.3 相机初始化上电时报错2.2.4 USB相机被占用 2.3 -1009报错2.3.1 相机本身不支持改属性 2.4 -1…...

SpringBoot 中文转拼音 Pinyin4j库 拼音转换 单据管理 客户管理

介绍 在客户管理系统中部分客户的名字会有生僻字为了沟通时候不叫错客户的名称,因此决定将客户名称的拼音一起返回给前端,也可以直接交给前端去处理。这里介绍后端的做法 Pinyin4j 是一个用于将汉字转换为拼音的 Java 库。在需要对中文文本进行拼音转换…...

使用 Whisper 生成视频字幕:从提取音频到批量处理

生成视频字幕是许多视频处理任务的核心需求。本文将指导你使用 OpenAI 的 Whisper 模型为视频文件(如电视剧《Normal People》或电影《花样年华》)生成字幕(SRT 格式)。我们将从提取音频开始,逐步实现字幕生成&#xf…...

Kotlin Compose Button 实现长按监听并实现动画效果

想要实现长按按钮开始录音,松开发送的功能。发现 Button 这个控件如果去监听这些按下,松开,长按等事件,发现是不会触发的,究其原因是 Button 已经提前消耗了这些事件所以导致,这些监听无法被触发。因此为了…...

SQL练习——(15/81)

目录 1.计算次日留存率 2.多条件查询 方法1:子查询 方法2:窗口函数实现 3.条件查询——自连接相关 1.计算次日留存率 550. 游戏玩法分析 IV - 力扣(LeetCode) 错误查询1:(没有考虑从首次登录日期开始…...

数据中心 智慧机房解决方案

该文档介绍数据中心智慧机房解决方案,涵盖模块化数据中心(机柜式、微模块),具备低成本快速部署、标准化建设等特点;监控管理系统(DCIM)可实现设施、资产、容量、能效管理;节能解决方案含精密空调节能控制柜,节能率高达 30%;还有7X24 小时云值守运维服务。方案亮点包括…...

网络-MOXA设备基本操作

修改本机IP和网络设备同网段,输入设备IP地址进入登录界面,交换机没有密码,路由器密码为moxa 修改设备IP地址 交换机 路由器 环网 启用Turbo Ring协议:在设备的网络管理界面中,找到环网配置选项,启用Turb…...

Docker构建 Dify 应用定时任务助手

概述 Dify 定时任务管理工具是一个基于 GitHub Actions 的自动化解决方案,用于实现 Dify Workflow 的定时执行和状态监控。无需再为缺乏定时任务支持而感到困扰,本工具可以帮助设置自动执行任务并获取实时通知,优化你的工作效率。 注意&…...

前端测试策略:单元测试到 E2E 测试

引言 在现代前端开发中,测试已成为确保应用质量和可靠性的关键环节。随着前端应用复杂度的不断提高,仅依靠手动测试已经远远不够。一个全面的前端测试策略应该包含多个层次的测试,从最小粒度的单元测试到模拟真实用户行为的端到端(E2E)测试。…...

Web漏洞扫描服务的特点与优势:守护数字时代的安全防线

在数字化浪潮中,Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级,Web漏洞扫描服务作为一种主动防御工具,逐渐成为企业安全体系的标配。本文将从特点与优势两方面,解析其价值与应用场景…...

大中型水闸安全监测系统解决方案

一、系统概述 水闸是重要的水利基础设施,具有防洪、挡潮、排涝、灌溉、供水、生态、航运和水力发电等综合功能,在国家水网构建、支撑经济社会高质量发展等方面具有十分重要的作用。我国水闸工程面广量大,据2021年统计数据,我国已建…...

紫光同创FPGA实现AD9238数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐我这里已有的以太网方案本方案在Xilinx系列FPGA的应用方案 3、设计思路框架工程设计原理框图AD输入源AD9238数据采集AD9238数据缓存控制模块…...

ffmpeg 把一个视频复制3次

1. 起因, 目的: 前面我写过,使用 python 把一个视频复制3次但是速度太慢了,我想试试看能否改进。而且我想换一种新的视频处理思路,并试试看速度如何。 2. 先看效果 效果就是能行,而且速度也快。 3. 过程: 代码 1…...

仿腾讯会议——添加音频

1、实现开启或关闭音频 2、 定义信号 3、实现开始暂停音频 4、实现信号槽连接 5、回收资源 6、初始化音频视频 7、 完成为每个人创建播放音频的对象 8、发送音频 使用的是对象ba,这样跨线程不会立刻回收,如果使用引用,跨线程会被直接回收掉&a…...

从零训练一个大模型:DeepSeek 的技术路线与实践

从零训练一个大模型:DeepSeek 的技术路线与实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 从零训练一个大模型:DeepSeek 的技术路线与实践摘要引言技术路线对比1. 模型架构&#xff1a…...

interface接口和defer场景分析

接口 接口这里主要两点: 设计业务结构时采用依赖倒转:业务层向下依赖抽象层,实现层向上依赖抽象层。 相比于之前: 之后: 注意struct中嵌套interface和不嵌套interface的区别: type Myinterface interfac…...

【数据结构篇】排序1(插入排序与选择排序)

注:本文以排升序为例 常见的排序算法: 目录: 一 直接插入排序: 1.1 基本思想: 1.2 代码: 1.3 复杂度: 二 希尔排序(直接插入排序的优化): 2.1 基本思想…...

FastAPI自定义异常处理:优雅转换Pydantic校验错误

FastAPI自定义异常处理:优雅转换Pydantic校验错误 背景需求 当使用FastAPI开发API服务时,Pydantic的自动校验异常默认会返回如下格式的422响应: {"detail": [{"type": "missing","loc": ["body", "user", &…...

C++--内存管理

内存管理 1. C/C内存分布 在C语言阶段,常说局部变量存储在栈区,动态内存中的数据存储在堆区,静态变量存储在静态区(数据段),常量存储在常量区(代码段),其实这里所说的栈…...

YOLOV3 深度解析:目标检测的高效利器

在计算机视觉领域,目标检测一直是一个重要且热门的研究方向,广泛应用于安防监控、自动驾驶、机器人视觉等诸多场景。YOLO(You Only Look Once)系列算法凭借其出色的实时性和较高的检测精度,在目标检测领域占据着重要地…...

select * from 按时间倒序排序

在SQL中,如果你想要根据时间字段来倒序排序查询结果,你可以使用ORDER BY子句,并结合DESC关键字来实现这个目的。这里有几个常见的场景和示例,假设我们有一个表events,里面包含一个时间戳字段event_time。 示例1&#…...

数据结构-DAY06

一、树的概念 1.链表是数的一部分(斜树) 2.树的查找速度很快 3.层序:前序:根左右 中序:左根右 后序: 左右根 4.树的存储:顺序结构,链式结构 5.特点: 1&#xf…...

JavaWeb:SpringBoot处理全局异常(RestControllerAdvice)

问题 GlobalExceptionHandler 小结...

免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了

1. 概览 1.1 快速了解 PawSQL PawSQL是专注于数据库性能优化的企业级工具,解决方案覆盖SQL开发、测试、运维的整个流程,提供智能SQL审核、查询重写优化及自动化巡检功能,支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库及达梦、金仓…...

buuctf RSA之旅

BUUCTF-RSA的成长之路 rsarsaRSA1RSA3RSA2RSARSAROLLDangerous RSA[GUET-CTF2019]BabyRSArsa2RSA5[NCTF2019]childRSA[HDCTF2019]bbbbbbrsaRSA4[BJDCTF2020]rsa_output[BJDCTF2020]RSA[WUSTCTF2020]babyrsa[ACTF新生赛2020]crypto-rsa0[ACTF新生赛2020]crypto-rsa3[GWCTF 2019]…...

javascript 编程基础(2)javascript与Node.js

文章目录 一、Node.js 与 JavaScript1、基本概念1.1、JavaScript:动态脚本语言1.2、Node.js:JavaScript 运行时环境 2、核心区别3、执行环境差异3.1、浏览器中的JavaScript3.2、Node.js中的JavaScript 4、共同点5、为什么需要Node.js? 一、No…...

IDEA+AI 深度融合:重构高效开发的未来模式

在 Java 开发领域,IntelliJ IDEA(以下简称 IDEA)作为最受欢迎的集成开发环境之一,一直是开发者的得力工具。而飞算 JavaAI 凭借强大的人工智能技术,为 Java 开发带来了全新的效率提升可能。当 IDEA 与飞算 JavaAI 深度…...

深度学习中常见损失函数激活函数

损失函数 一、分类任务损失函数 二、回归任务损失函数 三、生成对抗网络(GAN)损失函数 四、其他专用损失函数 五、损失函数选择原则 任务类型:分类用交叉熵,回归用MSE/MAE。 数据分布:类别不平衡时选择Focal Loss或…...