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

简洁大方网站建设/品牌推广软文案例

简洁大方网站建设,品牌推广软文案例,深圳市建设工程造价管理站,WordPress和微信公众号自动回复一、定时器简介: 1.最大59.65s定时: 因为预分频器和自动重装寄存器的最大存储值都是65536,当预分频器设置为65536时,就是当有65536个波形输入到预分频器时,预分频器才会输出一个波形到计数器,然后跟自动重装…

一、定时器简介:

在这里插入图片描述
1.最大59.65s定时:
因为预分频器和自动重装寄存器的最大存储值都是65536,当预分频器设置为65536时,就是当有65536个波形输入到预分频器时,预分频器才会输出一个波形到计数器,然后跟自动重装寄存器的值进行比对,只有当计数器也计到65536时才会产生一个更新事件,因此最大定时时间 = 72MHz / 65536 / 65536 = 59.65s

2.预分频器的值为0时 = 不分频/1分频

二、定时器类型:

在这里插入图片描述

(1)基本定时器:

在这里插入图片描述

触发信号:

在嵌入式系统、微控制器(如STM32)以及许多其他电子系统中,触发信号(Trigger Signal)通常用于启动某个事件、中断、操作或转换。这些信号可以是内部的,由微控制器自身产生,也可以是外部的,由其他硬件组件(如传感器、开关或其他微控制器)提供。

触发输出TRGO介绍:

**触发输出TRGO是定时器模块中的一个输出信号,当定时器满足特定条件时,这个信号会被激活并输出到微控制器的总线上。其他外设或定时器可以通过监听这个总线来接收TRGO信号,并根据需要执行相应的操作。
**

主模式触发DAC功能:

(1)普通情况:
如果我们需要DAC输出一段波形,那么就需要每隔一段时间触发一次DAC让他输出下一个电压点,那么就是先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换然后DAC输出,这样会频繁进入中断程序,影响主程序的运行和其他中断程序的响应。
(2)主模式触发:
把定时器的更新事件映射到触发输出TRGO的位置,然后TRGO接带DAC的触发转换引脚上,那么就不会产生中断导致频繁进到中断程序。

(2)通用定时器:

在这里插入图片描述

ETRF作为外部时钟(外部时钟模式2):

在这里插入图片描述

在这里插入图片描述
根据引脚定义可以知道,这个TINX_EXT引脚接在PA0处,因此可以在PA0引脚接一个外部方波时钟,然后在配置极性和、边沿检测和预分频器再经过滤波电路就可以兵分两路:

1.上面一路ETRF进入触发控制器然后就可以被选择作为时基单元的时钟了(外部时钟模式2)。

2.下面一路可以作为触发输入的时钟来源,两者可以看作是等价的,只是下面一路会占用触发输入通道而已。

TRGI触发输入作为外部时钟(时钟模式1):

触发输入的信号来源有很多,其中之一就是前面说到的ETR外部时钟。
此外,还有ITR信号,这个信号来自其他定时器,从结构图的右上角部分可以看到,主模式的触发输出TRGO是可以通向其他定时器的,然后作为其他定时器的时钟信号输入,这时候就是将TRGO接到ITR0…1…2…3上。
在这里插入图片描述

主从模式概述:

定义: 主从模式涉及至少两个定时器,其中一个作为主定时器(Master Timer),另一个或多个作为从定时器(Slave Timer)。主定时器在满足特定条件时,会发送信号给从定时器,触发从定时器的某些功能。

应用场景: 适用于需要多个定时器同时或协同工作的场景,如PWM信号的生成、精确的时间间隔控制等。

通过这个模式就可以实现定时器的级联:
1.先初始化TIM3,然后使用主模式把它的更新事件映射到TRGO上(TIM3为主模式)。
在这里插入图片描述

2.然后再初始化TIM2,选择ITR2,从表中可以知道,TIM2的ITR2是接在TIM3上的,那么ITR2对应的就是TIM3的触发输出TRGO,然后再选择外部时钟模式1(模式2对应的是ETR大的信号输入),那么当TIM3产生更新事件通过触发输出TRGO输出一段波形就会经过ITR2作为TIM2的外部时钟信号输入到TIM2(从模式)的时基单元,从而实现定时器的级联,就是定时器3控制定时器2产生更新中断或者更新事件的时间。

在这里插入图片描述

触发控制器:STM32的触发控制器在定时器模块中扮演着关键角色,它主要负责处理触发信号

(1)触发控制器的功能部分
1.输出TRGO信号:
TRGO信号是定时器输出给其它定时器、DAC/ADC等外设的触发信号。
当定时器工作在主模式时,TRGO信号用于触发其他从模式的定时器或外设。

2.从模式控制器:
通过接收到的ETRF(外部触发帧)、TRGI(触发输入)等信号来实现对自身计数器的控制。
控制操作包括复位、使能、向上/向下控制、计数等。
3.编码器接口:
用于实现与增量编码器的接口,接收编码器的信号并据此进行计数或位置检测。

(2)触发控制器的输入
1.内部时钟CK_INT:
最常用的方法,用于计数,通常与系统时钟同步。

2.外部输入ETRF:
可以作为定时器时钟进行计数,用于同步多个定时器。
也可以输出到TRGI对定时器进行复位、门控、触发等控制。

3.外部输入TI1FP1、TI2FP2(CH1和CH2引脚):
可以作为触发输入信号,连接到从模式控制器。
用于对定时器进行复位、门控、触发等控制。
也可以实现与编码器接口。

4.TI1F_ED:(CH1引脚的边沿)
与或门输入,用于实现与霍尔传感器接口。
主要由通道1的输入信号经过上升沿、下降沿双沿检测后生成的脉冲信号。

5.内部输入ITR:
可以作为其他定时器的触发输出信号输入,连接到本定时器的内部触发输入端ITRx(x可能是0~3)。
允许常规定时器内部最多有4路内部输入选择端。

归纳
触发控制器在STM32定时器中起着桥梁和枢纽的作用,它连接着外部信号源和定时器的内部逻辑。通过合理配置触发控制器,可以实现定时器与外部设备的精确同步和协同工作,为各种应用提供强大的定时和触发功能。

(3)高级定时器:

在这里插入图片描述
2部分:
高级定时器的1部分是和通用定时器相同的,而2部分在中断时是能够实现几个技术周期才产生更新中断或者更新事件,而通用定时器是一个计数周期就产生一次更新中断或者更新事件,因此高级定时器的计数时间就有原来的59.65s变为59.65 × 65536s

3部分:
这个部分可以用于产生PWM波形、控制三相电机等等。

三、定时器内部时序:

在这里插入图片描述

(1)预分频器时序图:

在这里插入图片描述

在这里插入图片描述

预分频控制寄存器和预分频缓冲寄存器:

预分频控制寄存器和预分频缓冲寄存器在数字电路和微控制器(如STM32)的定时器系统中扮演着关键角色。以下是关于这两个寄存器的详细解释:

(1)预分频控制寄存器:

  • 功能:
    预分频控制寄存器主要用于读写操作,但它并不直接决定分频系数。它存储的是用户设置或期望的分频值。
  • 特点:
    寄存器的值表示用户期望的分频系数。
    更改寄存器的值并不会立即影响定时器的时钟频率。
    当寄存器的值发生变化时(例如从0变为1),这种变化并不会立即反映到实际的分频操作中。
  • 与预分频缓冲寄存器的关系:
    预分频控制寄存器的值会在特定条件下(如计数周期结束并产生更新事件后)被传递到预分频缓冲寄存器。

(2)预分频缓冲寄存器:

  • 功能:
    预分频缓冲寄存器是真正决定分频系数的寄存器。它根据预分频控制寄存器的值来执行实际的分频操作。

  • 特点:
    寄存器的值直接控制定时器的时钟频率。
    它的值在接收到预分频控制寄存器的更新后才会改变。
    在接收到更新之前,它会继续使用之前的分频系数。
    与预分频控制寄存器的关系:当预分频控制寄存器的值发生变化并满足更新条件时,这个新的值会被传递到预分频缓冲寄存器,从而改变定时器的时钟频率。

  • 总结:

  • 预分频控制寄存器和预分频缓冲寄存器在定时器系统中协同工作,以实现精确的时钟频率控制。

  • 预分频控制寄存器用于存储用户设置的分频值,但并不直接控制定时器的时钟频率。

  • 预分频缓冲寄存器根据预分频控制寄存器的值来执行实际的分频操作,并直接控制定时器的时钟频率。

  • 当预分频控制寄存器的值发生变化时,这种变化并不会立即反映到定时器的时钟频率上,而是需要等待满足更新条件后才会被传递到预分频缓冲寄存器并执行相应的分频操作。

(2)计数器时序图:

在这里插入图片描述

计数器无预装时序:

在这里插入图片描述
如果没有预装的影子寄存器,那么当我们突然更改自动加载寄存器,如果计数器的寄存器还没有达到我更改的数值还好,不会有什么问题,但是如果已经超过我更改的数值,那么计数器就会一直计数到最大值自动清0再从0达到我的更改值才产生更新时间或更新中断。

计数器有预装时序:

在这里插入图片描述
有预装之后,计数器实际上是与自动加载影子寄存器的值进行对比,如果我突然更改自动加载寄存器的值,自动加载影子寄存器的值并不会马上更改,而是在经过原来的一个计数周期之后才更改。

四、时钟树:

左边1部分是时钟产生电路
右边2部分是时钟分配电路

在这里插入图片描述

系统时钟产生:系统时钟由内部RC振荡器和外部高速晶振提供

外部晶振比RC振荡器更稳定。
在这里插入图片描述

  • 1.一开始启动内部时钟,单片机系统时钟SYSCLK暂时由内部时钟RC振荡器提供 = 8MHz
  • 2.之后再配置外部时钟,配置外部时钟走红色通路经过锁相环进行9倍频后得到72MHz,等到锁相环输出稳定后选择锁相环输出为系统时钟 = 72MHz频率

锁相环:

锁相环结构:

在这里插入图片描述
压控振荡器:
在这里插入图片描述

  • 压控振荡器本身就能够产生几十GHZ的频率,输入频率与反馈频率通过鉴相器进行比较,使压控振荡器输出的频率非常大,但是和输入频率的相位是相同的,因此这是锁相环能够实现倍频的关键
    在这里插入图片描述

系统时钟分配:

在这里插入图片描述

  • 通用定时器和基本定时器是接在APB1总线上的,在APB1总线连接其他外设的线路中有一条支路专门用来连接定时器,而这个支路上的电路将APB1总线的信号频率进行了加工,如果APB1总线的频率经过分频后变成了36MHz,这个电路会把输入的频率进行×2 = 72MHz再输出给定时器。

五、内部时钟定时中断程序实现:

总代码:

#include "stm32f10x.h"                  // Device headerextern uint16_t Num;//自己查找一下
void Timer_Init(void)
{//使能定时器2的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//选择内部时钟为TIM2时基单元的时钟源TIM_InternalClockConfig(TIM2);//配置时基单元//初始化定时器2时基单元的结构体TIM_TimeBaseInitTypeDef TIM_TIM2_InitStructure;/*TIM_ClockDivision 是这个结构体中的一个字段,用于设置定时器的时钟分频。具体来说,它决定了定时器时钟(TIMxCLK)的频率与内部时钟(CK_INT)之间的关系。TIM_CKD_DIV1 表示不进行分频,即 CK_INT = TIMxCLK。换句话说,定时器的内部时钟频率与输入的定时器时钟频率相同。*/TIM_TIM2_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//计数器模式:选择向上计数模式TIM_TIM2_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//ARR自动重装器的值TIM_TIM2_InitStructure.TIM_Period = 10000 - 1;//PSC预分频器的值TIM_TIM2_InitStructure.TIM_Prescaler = 7200 - 1;//重复计数器的值,高级计数器才有TIM_TIM2_InitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TIM2_InitStructure);//使能中断,开启了更新中断到NVIC的通路TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//配置NVIC,配置优先级//先选择分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//NVIC_InitTypeDef NVIC_TIM2_InitStructure;NVIC_TIM2_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_TIM2_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_TIM2_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_TIM2_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_TIM2_InitStructure);//启动定时器TIM_Cmd(TIM2,ENABLE);
}void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}
}

需要了解的函数:

在这里插入图片描述

在这里插入图片描述

步骤实现根据下图:

在这里插入图片描述

第一步:RCC打开时钟

示例使用定时器2,它是APB1总线上的外设:
在这里插入图片描述

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

第二步:给时基单元选择时钟源

在这里插入图片描述

//选择内部时钟为TIM2时基单元的时钟源TIM_InternalClockConfig(TIM2);

第三步:配置时基单元

在这里插入图片描述

注意:
基本定时器只有向上计数模式,通用和高级定时器有向上、向下、中央对齐模式

//配置时基单元//初始化定时器2时基单元的结构体TIM_TimeBaseInitTypeDef TIM_TIM2_InitStructure;/*TIM_ClockDivision 是这个结构体中的一个字段,用于设置定时器的时钟分频。具体来说,它决定了定时器时钟(TIMxCLK)的频率与内部时钟(CK_INT)之间的关系。TIM_CKD_DIV1 表示不进行分频,即 CK_INT = TIMxCLK。换句话说,定时器的内部时钟频率与输入的定时器时钟频率相同。*/TIM_TIM2_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//计数器模式:选择向上计数模式TIM_TIM2_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//ARR自动重装器的值TIM_TIM2_InitStructure.TIM_Period = 10000 - 1;//PSC预分频器的值TIM_TIM2_InitStructure.TIM_Prescaler = 7200 - 1;//重复计数器的值,高级计数器才有TIM_TIM2_InitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TIM2_InitStructure);

第四步:配置输出中断控制,允许更新中断输出到NVIC

//使能中断,开启了更新中断到NVIC的通路TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级并启动定时器

//配置NVIC,配置优先级//先选择分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//NVIC_InitTypeDef NVIC_TIM2_InitStructure;NVIC_TIM2_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_TIM2_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_TIM2_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_TIM2_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_TIM2_InitStructure);//启动定时器TIM_Cmd(TIM2,ENABLE);

第六步:到启动文件Startup查找TIM2对应的中断函数名,编写中断程序:

注意检查中断标志位并在最后清除标志位

void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}
}

相关文章:

STM32——定时器

一、定时器简介: 1.最大59.65s定时: 因为预分频器和自动重装寄存器的最大存储值都是65536,当预分频器设置为65536时,就是当有65536个波形输入到预分频器时,预分频器才会输出一个波形到计数器,然后跟自动重装…...

[20] Opencv_CUDA应用之 关键点检测器和描述符

Opencv_CUDA应用之 关键点检测器和描述符 本节中会介绍找到局部特征的各种方法,也被称为关键点检测器关键点(key-point)是表征图像的特征点,可用于准确定义对象 1. 加速段测试特征功能检测器 FAST算法用于检测角点作为图像的关键点,通过对…...

支持离线翻译任意语言的桌面应用程序;单张图像高效生成高质量的 3D 模型;2500种色彩映射的集合,适用于matplotlib和seaborn

✨ 1: Lingo Lingo是一款支持离线翻译任意语言的桌面应用程序 Lingo 是一款支持离线翻译的桌面应用程序,用户可以在不连接互联网的情况下进行多语言翻译。这款软件利用了Meta公司提供的nllb-200-distilled-600M 多语言模型,以实现高效的翻译功能。 没…...

BC-Linux 8.6最小化安装的服务器启用GNOME图形化界面

本文记录了BC-Linux 8.6最小化安装的服务器如何启用GNOME图形化界面的过程。 一、服务器环境 1、系统版本 [rootlocalhost ~]# cat /etc/os-release NAME"BigCloud Enterprise Linux" VERSION"8.6 (Core)" ID"bclinux" ID_LIKE"rhel fe…...

数据库 复习题

有一个关系模式:工程关系(工程号,工程名称,职工号,姓名,聘期,职务,小时工资率,工时),公司按照工时和小时工资率支付工资,小时工资率由…...

web前端——CSS

目录 一、css概述 二、基本语法 1.行内样式表 2.内嵌样式表 3.外部样式表 4.三者对比 三、选择器 1.常用的选择器 2. 选择器优先级 3.由高到低优先级排序 四、文本,背景,列表,伪类,透明 1.文本 2.背景 3.列表 4.伪类 5.透明 五、块级,行级,行级块标签, dis…...

STM32学习-HAL库 串口通信

学完标准库之后,本来想学习freertos的,但是看了很多教程都是移植的HAL库程序,这里再学习一些HAL库的内容,有了基础这里直接学习主要的外设。 HAL库对于串口主要有两个结构体UART_InitTypeDef和UART_HandleTypeDef,前者…...

【Linux】进程信号_1

文章目录 八、进程信号1.信号 未完待续 八、进程信号 1.信号 信号和信号量之间没有任何关系。信号是Linux系统提供的让用户/进程给其他进程发送异步信息的一种方式。 常见信号: 当信号产生时,可选的处理方式有三种:①忽略此信号。②执行该…...

Vue71-嵌套(多级)路由

一、需求 二、开发步骤 2-1、编写路由组件 2-2、编写路由规则 2-3、编写路由标签<router-link>、<router-view> 三、小结...

Elk安装及使用

es安装及使用 单机版安装 集群安装 132 node-01 133 node-02 135 node-03 日志用户权限有问题 看日志 解决方案&#xff1a; 出现错误后&#xff0c;再次重启前&#xff0c;需要删除三个节点/data/下的内容 9300-http 9300-tcp logstasha安装及使用 Ssh错误 Yum安装默认路…...

【代码随想录】【算法训练营】【第50天】 [1143]最长公共子序列 [1035]不相交的线 [53]买卖股票的最佳时机III [392]判断子序列

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 50&#xff0c;周三&#xff0c;无法坚持~ 题目详情 [1143] 最长公共子序列 题目描述 1143 最长公共子序列 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语…...

【摄像头标定】双目摄像头标定及矫正-opencv(python)

双目摄像头标定及矫正 棋盘格标定板标定矫正 棋盘格标定板 本文使用棋盘格标定板&#xff0c;可以到这篇博客中下载&#xff1a;https://blog.csdn.net/qq_39330520/article/details/107864568 标定 要进行标定首先需要双目拍的棋盘格图片&#xff0c;20张左右&#xff0c;…...

PostgreSQL 高可用性与容错性(十三)

1. 备份与恢复策略 1.1 数据备份 1.1.1 基于 pg_dump 的逻辑备份 pg_dump -U username -d dbname -f backup_file.sql 1.1.2 基于 pg_basebackup 的物理备份 pg_basebackup -U username -D /path/to/backup/directory -Ft -Xs -P -R 1.2 恢复数据库 1.2.1 恢复逻辑备份 …...

RabbitMQ的WorkQueues模型

WorkQueues模型 Work queues&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消息的消费速度。长此以往&#xff0c;消息就会堆积越来越多&#xff0c;…...

【LeetCode】每日一题:最大子数组和

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 解题思路 要注意最小值是整个前缀&#xff0c;主要是cumsum然后按照买卖股票的思路做的&a…...

什么是进程?

前言&#x1f440;~ 上一章我们介绍了计算机组成的入门知识&#xff0c;了解这些之后&#xff0c;今天来聊聊进程 进程 PCB pcb中的常见属性 进程调度 进程的状态 进程的优先级 上下文 记账信息 虚拟地址空间 如果各位对文章的内容感兴趣的话&#xff0c;请点点小赞&a…...

后端返回base64文件流下载

后端返回base64文件流: 前端处理&#xff1a; downloadTemplate () {this.$API.downloadTemplate().then(({ data }) > {const binaryString atob(data) // 解码base64字符串const byteArray new Uint8Array(binaryString.length) // 创建一个Uint8Arrayfor (let i 0; i…...

云原生面试

云原生面试 Kubernetes原理Kubernetes 如何保证集群的安全性。简述 Kubernetes 准入机制简述Kubernetes Secret 有哪些使用方式简述Kubernetes PodSecurityPolicy机制简述Kubernetes PodSecurityPolicy机制能实现哪些安全策略简述Kubernetes 网络策略原理简述Kubernetes 数据持…...

深度学习入门2—— 神经网络的组成和3层神经网络的实现

由上一章结尾&#xff0c;我们知道神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数。接下来会介绍神经网络的概要&#xff0c;然后再结合手写数字识别案例进行介绍。 1.神经网络概要 1.1从感知机到神经网 我们可以用图来表示神经网络&#xff0c;我们把最…...

tensorflow学习:错误 InternalError: Dst tensor is not initialized

tensorflow学习&#xff1a;错误 InternalError: Dst tensor is not initialized_dst tensor is not initialized.-CSDN博客https://blog.csdn.net/wanglitao588/article/details/77033659...

Docker环境安装anythingllm

拉镜像 docker pull mintplexlabs/anythingllm建目录 export STORAGE_LOCATION$HOME/anythingllm && \ mkdir -p $STORAGE_LOCATION && \ touch "$STORAGE_LOCATION/.env"检查目录具有写权限 # 为目录anythingllm赋写权限 chmod 777 anythingllm 启…...

FEC 向前纠错编码

随写&#xff0c;看的有点杂&#xff0c;简单记一下。 应该叫ReedSolomon FEC RS算法简单来讲就是&#xff0c;根据已有数据&#xff0c;构造模型&#xff0c;然后根据模型判纠错&#xff1f; 简单来讲&#xff0c;两点确定一条直线&#xff0c;直线直线上的点都会满足 y kx…...

【jupyter notebook】解决打不开以及安装扩展插件的问题

文章目录 问题描述问题 1解决问题 2解决 问题描述 问题 1 在自定义的虚拟环境下&#xff0c;安装 jupyter notebook 6.4.12 版本时&#xff0c;报以下错误&#xff1a; 解决 查了一些 解决方法&#xff0c;执行以下命令即可解决&#xff1a; conda install traitlets5.9.0 …...

Perl文件句柄深度解析:掌握文件操作的核心

Perl中的文件句柄是进行文件输入输出操作的关键。它们提供了一种机制&#xff0c;允许Perl脚本打开文件、读写数据、定位文件指针&#xff0c;以及关闭文件。理解文件句柄的使用对于编写高效的Perl脚本至关重要。本文将深入探讨Perl文件句柄的概念、使用方法和最佳实践。 1. 文…...

Tomcat 下载部署到 idea

一、下载Tomcat Tomcat 是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;下的一个核心项目&#xff0c;免费开源、并支持Servlet 和JSP 规范。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发…...

FutureTask如何使用?

FutureTask是Java中的一个具体类&#xff0c;它实现了RunnableFuture接口&#xff0c;该接口结合了Runnable和Future的功能。FutureTask可以用于表示一个可以取消的异步计算。FutureTask非常适合用于与Executor框架一起使用&#xff0c;但也可以单独使用。 FutureTask的基本用…...

Webpack: 如何借助预处理器、PostCSS 等构建现代 CSS 工程环境

概述 在开发 Web 应用时&#xff0c;我们通常需要编写大量 JavaScript 代码 —— 用于控制页面逻辑&#xff1b;编写大量 CSS 代码 —— 用于调整页面呈现形式。问题在于&#xff0c;CSS 语言在过去若干年中一直在追求样式表现力方面的提升&#xff0c;工程化能力薄弱&#xff…...

一篇文章告诉你如何正确使用chatgpt提示词

在chatgpt大火的时候&#xff0c;出现了一波学习chatgpt提示词的热潮&#xff0c;互联网出现很多了使用的学习提示词的课程。其中我觉得斯坦福大学教授吴恩达博士推出prompt engineer课最全面。接下来总结他课程中正确使用提示词工程的方法。 1. 明确目标 明确你希望ChatGPT完…...

qt基于QGraphicsView的屏幕旋转

一、代码实现 实现代码示例 MainWindow2 w;QGraphicsScene *scene new QGraphicsScene;QGraphicsProxyWidget *gw scene->addWidget(&w);// 旋转角度gw->setRotation(90);QGraphicsView *view new QGraphicsView(scene);//view->resize(1024, 600);//scene-&g…...

一个土木工程专业背景的开发者,讲述开源带给他的力量

在前段时间我们举办的“TDengine Open Day”第一季技术沙龙中&#xff0c;TDengine 应用研发高级工程师谭雪峰进行的“开源之路&#xff1a;程序员的成长与探索”主题分享获得了众多参会者的好评。谭雪峰从自身独特的职业发展经历出发&#xff0c;分享了自己在开源领域的种种收…...