中颖51芯片学习3. 定时器
中颖51芯片学习3. 定时器
- 一、SH79F9476定时器简介
- 1. 简介
- 2. 定时器运行模式
- 二、定时器2
- 1. 说明
- (1)时钟
- (2)工作模式
- 2. 寄存器
- (1)控制寄存器 T2CON
- (2)定时器2模式控制寄存器 T2MOD
- 3. 工作方式0
- (1)16位捕获说明
- (2)代码实现
- 4. 工作方式1
- (1)16位自动重载定时器说明
- 当DCEN = 0,通过在T2CON中的EXEN2位选择两个选项。
- 设置DCEN位允许定时器2递增计数或递减计数。当DCEN = 1时,T2EX引脚控制计数的方向,而EXEN2控制无效。
- (2)代码实现
- 5. 工作方式2 可编程时钟输出
- (1)功能介绍
- (2)软件实现
- 三、其它定时器介绍
- 1. 定时器3
- 2. 定时器4
- 启用 TIMER4_OUT
- 启用 TIMER4_EDGETRIG
- 3. 定时器5
一、SH79F9476定时器简介
1. 简介
SH79F9476芯片具有多个定时器模块,包括定时器/计数器、PWM(脉冲宽度调制)定时器等,定时器可以配置为在计时达到特定值时触发中断,以便处理紧急事件或执行特定的任务。
2. 定时器运行模式
- MODE0 16位捕捉模式;
- MODE1 16位重载方式;
- MODE2 可编程时钟输出模式
- 上升沿多次触发模式
具体地看,SH79F9476 有定时器 2,定时器 3,定时器 4 和定时器 5 四个定时器,其中:
- 定时器 2 可配置为 16 位捕捉功能、16 位重载方式或可编程时钟输出方式;
- 定时器 3 可配置为 16 位自动重载定时/计数器,且可以工作在掉电模式;
- 定时器 4 可配置为 16 位自动重载定时器或带边沿触发的 16 位自动重载定时器;两个数据寄存器TH4和TL4可作为一个16位寄存器来访问;
- 定时器 5 可配置为 16 位的自动重载定时器。
二、定时器2
1. 说明
定时器2有两个数据寄存器TH2和TL2,可以作为一个16位寄存器来使用,由寄存器T2CON和T2MOD控制;
定时器2的中断使能位是: IEN0寄存器中的ET2位。
(1)时钟
C/T2选择系统时钟(定时器)或外部引脚 T2 (计数器)作为定时器时钟输入。通过所选的引脚设置TR2允许定时器2/计数器2数据寄存器计数。
可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。
(2)工作模式
定时器2支持3种工作方式:
- 捕获/重载
- 带递增或递减计数器的自动重载方式
- 可编程时钟输出
可以通过寄存器配置定时器2的工作方式:
| C/T2 | T2OE | DCEN | TR2 | CP/RL2 | 方式 | 描述 |
|---|---|---|---|---|---|---|
| X | 0 | X | 1 | 1 | 0 | 16位捕获 |
| X | 0 | 0 | 1 | 0 | 1 | 16位自动重载定时器 |
| X | 0 | 1 | 1 | 0 | 1 | 16位自动重载定时器 |
| 0 | 1 | X | 1 | X | 2 | 可编程时钟 |
| 1 | 1 | X | 1 | X | 不推荐使用 | |
| X | X | X | 0 | X | X | 定时器2停止,T2EX通路仍旧允许 |
2. 寄存器
(1)控制寄存器 T2CON
| C8H | 第7 位 | 第6 位 | 第5 位 | 第4 位 | 第3 位 | 第2 位 | 第1 位 | 第0 位 |
|---|---|---|---|---|---|---|---|---|
| T2CON | TF2 | EXF2 | - | - | EXEN2 | TR2 | C/T2 | CP/RL2 |
| 读/ 写 | 读/写 | 读/写 | - | - | 读/写 | 读/写 | 读/写 | 读/写 |
| 复位值(POR/WDT/LVR/PIN) | 0 | 0 | - | - | 0 | 0 | 0 | 0 |
位功能:
| 位编号 | 位符号 | 说明 |
|---|---|---|
| 7 | TF2 | 定时器2 溢出标志位 0:无溢出(必须由软件清0) 1:溢出(由硬件设1) |
| 6 | EXF2 | T2EX 引脚外部事件输入(下降沿)被检测到的标志位 0:无外部事件输入(必须由软件清0) 1:检测到外部输入(如果EXEN2 = 1,由硬件设1) |
| 3 | EXEN2 | T2EX 引脚上的外部事件输入(下降沿)用作重载/ 捕获触发器允许/ 禁止控制位 0:忽略T2EX引脚上的事件 1:检测到T2EX引脚上一个下降沿,产生一个捕获或重载 |
| 2 | TR2 | 定时器2 开始/ 停止控制位 0:停止定时器2 1:开始定时器2 |
| 1 | C/T2 | 定时器2 定时器/ 计数器方式选定位 0:定时器方式,T2引脚用作I/O端口 1:计数器方式,内部上拉电阻被打开 |
| 0 | CP/RL2 | 捕获/ 重载方式选定位 0:16位带重载功能的定时器/计数器 1:16位带捕获功能的定时器/计数器 |
(2)定时器2模式控制寄存器 T2MOD
| C9H | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| T2MOD | TCLKP2 | - | - | - | - | T2OE | DCEN | |
| 读/写 | 读/写 | 读/写 | - | - | - | - | 读/写 | 读/写 |
| 复位值(POR/WDT/LVR/PIN) | 0 | - | - | - | - | - | 0 | 0 |
位定义:
| 位编号 | 位符号 | 说明 |
|---|---|---|
| 7 | TCLKP2 | 分频选择控制位 0:选择系统时钟的1/12作为定时器2的时钟源 1:系统时钟作为定时器2的时钟源 |
| 1 | T2OE | 定时器2 输出允许位 0:设置P1.3/T2作为时钟输入或I/O端口 1:设置P1.3/T2作为时钟输出 |
| 0 | DCEN | 递减计数允许位 0:禁止定时器2作为递增/递减计数器,定时器2仅作为递增计数器 1:允许定时器2作为递增/递减计数器 |
3. 工作方式0
(1)16位捕获说明
16位的捕获模式下,T2CON按制寄存器的EXEN2位有两个选项:
- 0:定时器2作为16位定时器或计数器,如果ET2被允许,定时器2能设置TF2溢出产生一个中断;
- 1:定时器操作与上相同,另外在外部输入T2EX上的下降沿也能引起在TH2和TL2中的当前值分别被捕获到RCAP2H和RCAP2L中;此外,在T2EX上的下降沿也能引起在T2CON中的EXF2被设置; 如果ET2被允许,EXF2位也像TF2一样产生一个中断。
流程框图:

(2)代码实现
下面的测试让TIMER2工作在16位捕获模式,系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”,如图所示:

测试代码:
#include "SH79F9476.h"
#include "cpu.h"
#include "intrins.h"
#include "api_ext.h"void main()
{// 时钟设置高速模式CLKCON = 0x08;Delay();CLKCON |= 0x04;// P0.0,P0.1设置为输出P0CR = 0x03;P0 = 0x00;// TIMER2 16位捕获模式// 允许所有中断IEN0 |= 0x80;// 打开定时器2中断IEN1 |= 0x04;// 检测到T2EX 引脚上一个下降沿,产生一个捕获或重载T2CON = 0x08;// 设置定时器2工作在捕获模式T2CON |= 0x01;// 设置系统时钟12分频作为定时器时钟源T2MOD = 0x00;TL2 = 0x00;TH2 = 0x00;// BIT2 启动定时器T2CON |= 0x04; while(1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9{_push_(INSCON);Select_Bank0();// 定时器溢出if(T2CON & 0x80){// 溢出标志位清0T2CON &= 0x7F;// 翻转P0_0P0_0 = ~P0_0;} // 检测到外部事件下降沿if(T2CON & 0x40){// 1011 1111, T2EX引脚外部事件被检测到的标志位清0T2CON &= 0xBF;// 翻转P0_1P0_1 = ~P0_1;}_pop_(INSCON);
}
测试代码中启动 T2EX(P1_1) 下降沿捕捉功能;全速运行后,T2EX(P1_1)口灌 1kHz 座号,观察:
- P1_1 的下降沿 P0_1 状态会发生改变,频率为 500Hz。
- P0_0 频率1000/0xFFFF(即65535),约为15.259Hz。
输入信号:

P0_1输出信号:

P0_0输出信号:

4. 工作方式1
(1)16位自动重载定时器说明
在16位自动重载方式下,定时器2可以被选为递增计数或递减计数。这个功能通过T2MOD中的DCEN位(递减计数允许)选择。
系统复位后,DCEN位复位值为0,定时器2默认递增计数。当设置DCEN时,定时器2递增计数或递减计数取决于T2EX引脚上的电平。
当DCEN = 0,通过在T2CON中的EXEN2位选择两个选项。
- 如果EXEN2 = 0,定时器2递增到0FFFFH,在溢出后置起TF2位,同时定时器自动将用户软件写好的寄存器RCAP2H和
RCAP2L的16位值装入TH2和TL2寄存器。 - 如果EXEN2 = 1,溢出或在外部输入T2EX上的下降沿都能触发一个16位重载,置起EXF2位。如果ET2被使能,TF2和EXF2
位都能产生一个中断。

设置DCEN位允许定时器2递增计数或递减计数。当DCEN = 1时,T2EX引脚控制计数的方向,而EXEN2控制无效。
- T2EX置1可使定时器2递增计数。定时器向0FFFFH溢出,然后设置TF2位。溢出也能分别引起RCAP2H和RCAP2L上的16
位值重载入定时器寄存器。 - T2EX清0可使定时器2递减计数。当TH2和TL2的值等于RCAP2H和RCAP2L的值时,定时器溢出。置起TF2位,同时0FFFFH
重载入定时器寄存器。
无论定时器2溢出,EXF2位都被用作结果的第17位。在此工作方式下,EXF2不作为中断标志。
(2)代码实现
下面代码示例中,系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”,启动自动重载功能;
程序启动后,在P0_0引脚输出1k频率方波。
P0 端口翻转一次的时间为:
t = (0xFFFF-TH2TL2)1/24 us。
计算频率为: 1/(t2) Hz
#include "SH79F9476.h"
#include "cpu.h"
#include "intrins.h"
#include "api_ext.h"void main()
{// 时钟设置高速模式CLKCON = 0x08;Delay();CLKCON |= 0x04;// P0.0,P0.1设置为输出P0CR = 0x03;P0 = 0x00;// 允许所有中断IEN0 |= 0x80;// 打开定时器2中断 IEN1 |= 0x04;// 设置定时器工作在重载模式,忽略T2EX引脚检测T2CON = 0; // 选择定时器为递增定时器,时钟源为系统时钟(未使用1/12分频)T2MOD = 0x80; // 这里 0xD11F递增到0xFFFF溢出,差值12000,下面公式里24是频率24M// 定时12000*1/24=500usTL2 = 0x1F; TH2 = 0xD1;// 重载计数器 ValueRCAP2L = 0x1F; RCAP2H = 0xD1;// 启动定时器T2CON |= 0x04; while (1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9
{_push_(INSCON);Select_Bank0();// 定时器溢出if (T2CON & 0x80){// 溢出标志位清0T2CON &= 0x7F;// 翻转P0_0P0_0 = ~P0_0;}// 检测到外部事件下降沿if (T2CON & 0x40){// 1011 1111, T2EX引脚外部事件被检测到的标志位清0T2CON &= 0xBF;// 翻转P0_1P0_1 = ~P0_1;}_pop_(INSCON);
}

5. 工作方式2 可编程时钟输出
(1)功能介绍
T2端口可以编程输出50%的占空比时钟周期。清C/T2位和置T2OE位,使定时器2作为时钟发生器。TR2位启动和中止定时器。
时钟频率为:
F = 1 2 ∗ 2 ∗ f S Y S 65536 − [ R C A P 2 H , R C A P 2 L ] F = \frac{1}{2*2} * \frac{f_{SYS}}{65536-[RCAP2H,RCAP2L]} F=2∗21∗65536−[RCAP2H,RCAP2L]fSYS
定时器2溢出不产生中断,所以定时器2可以作时钟输出。
功能框图:

(2)软件实现
下面示例中,系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”。
#include "SH79F9476.h"
#include "cpu.h"
#include "intrins.h"
#include "api_ext.h"void main()
{// 时钟设置高速模式CLKCON = 0x08;Delay();CLKCON |= 0x04;// P0.0,P0.1设置为输出P0CR = 0x03;P0 = 0x00;// 关闭定时器2中断IEN1 &= 0xFB; T2CON = 0;// P13作为T2输出T2MOD = 0x82; // 系统时钟为24M,可产生100Hz的时钟 f=(1/4)*(Fsys/(65536-[RCAP2H,RCAP2L]))RCAP2L = 0xA0; RCAP2H = 0x15;TL2 = 0xA0;TH2 = 0x15;// 启动定时器T2CON |= 0x04; while (1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9
{_push_(INSCON);Select_Bank0();// 定时器溢出if (T2CON & 0x80){// 溢出标志位清0T2CON &= 0x7F;// 翻转P0_0P0_0 = ~P0_0;}// 检测到外部事件下降沿if (T2CON & 0x40){// 1011 1111, T2EX引脚外部事件被检测到的标志位清0T2CON &= 0xBF;// 翻转P0_1P0_1 = ~P0_1;}_pop_(INSCON);
}
程序运行后,T2 输出口(P1_3)输出 100Hz 频率时钟。
输出波形如下图所示:

三、其它定时器介绍
1. 定时器3
定时器3是16位自动重载定时器,通过两个数据寄存器TH3和TL3访问,由T3CON寄存器控制。IEN0寄存器的ET3位置1允许定时器3中断。
定时器3只有一种工作方式: 16位自动重载计数器/定时器。

代码示例:
IEN0 |= 0xA0; //打开定时器3中断_push_(INSCON);Select_Bank1();T3CON = 0x02; //外部32.768kHz/128kHz为时钟源,1分频//配置定时器的初值为0xfffe,溢出时间为2个128kHz时钟TL3 = 0xfe; TH3 = 0xff;T3CON |=0x04; //启动定时器3_pop_(INSCON);void INT_TIMER3(void) interrupt 5
{ _push_(INSCON);Select_Bank0();P0_0 = ~P0_0;_pop_(INSCON);
}
系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz内部 RC 作为振荡器 2”,全速运行后,T3 时钟为低频 128k 时钟,P0_0 引脚输出 32k 频率方波。
2. 定时器4
定时器4是16位自动重载定时器。通过两个数据寄存器TH4和TL4访问,由T4CON寄存器控制。IEN1寄存器的ET4位置1允许定时器4中断。
定时器4有2种工作方式: 16位自动重载定时器和有T4边沿触发的16位自动重载定时器。
官方代码示例:
void init_timer4()
{IEN0 |= 0x84; //EA,ET4,中断使能_push_(INSCON);Select_Bank1();#ifdef TIMER4_OUTT4CON = 0x40; //T4引脚输出//配置定时器的初值为0x8000,T4引脚输出周期为2*0x8000个系统时钟的方波TL4 = 0x00; TH4 = 0x80;#endif#ifdef TIMER4_EDGETRIGT4CON = 0x48; //T4上升沿触发,且可以多次触发TL4 = 0x00;TH4 = 0x00;#endifT4CON |=0x02; //启动定时器4Select_Bank0();_pop_(INSCON);
}void INT_TIMER4(void) interrupt 2
{ _push_(INSCON);Select_Bank0();P0_0 = ~P0_0;_pop_(INSCON);
}
启用 TIMER4_OUT
系统时钟 Option 选择“内部 128kHz RC振荡器作为振荡器1,24MHz内部RC作为振荡器2”,全速运行后,时钟为系统时钟,T4引脚(P1_1)输出周期为 2.7302ms 方波。
启用 TIMER4_EDGETRIG
系统时钟 Option 选择“内部 128kHzRC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”,全速运行后:
向 T4(P1_1)输入一个上升沿,P0.0状态翻转一次;向T4 (P1_1)输入周期性的上升沿,若周期小于T4定时时间(2.7302ms),
T4 将一直处于重新计时状态,P0.0 将无波形输出;若周期大于 T4 定时时间(2.7302ms),P0.0输出方波。
3. 定时器5
定时器5是16位自动重载定时器。通过两个数据寄存器TH5和TL5访问,由T5CON寄存器控制。IEN0寄存器的ET5位置1允许定时器5中断。
定时器5有一种工作方式:16位自动重载定时器。
官方代码示例:
void init_timer5()
{IEN0 |= 0x88; //EA, ET5_push_(INSCON);Select_Bank1();//配置定时器的初值为0xD120,溢出时间为0x2EE0个系统时钟TL5 = 0x20; TH5 = 0xD1;T5CON |=0x02; //启动定时器5_pop_(INSCON);
}void INT_TIMER5(void) interrupt 3
{ _push_(INSCON);Select_Bank0();P0_0 = ~P0_0;_pop_(INSCON);
}
系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz
内部 RC 作为振荡器 2”,运行后时钟为系统时钟,P0_0 引脚输出 1kHz 频率方波。
本文学习资源来自中颖官网芯片文档
本文代码开源地址: https://gitee.com/xundh/learn-sinowealth-51
相关文章:
中颖51芯片学习3. 定时器
中颖51芯片学习3. 定时器 一、SH79F9476定时器简介1. 简介2. 定时器运行模式 二、定时器21. 说明(1)时钟(2)工作模式 2. 寄存器(1)控制寄存器 T2CON(2)定时器2模式控制寄存器 T2MOD …...
[python] Numpy库用法(持续更新)
先导入一下 import numpy as np 一、np.random用法 生成随机整数:np.random.randint(low, high, size) low: 最小值high: 最大值size: 生成的数组大小(可以是多维,下面同理) 生成随机浮点数:np.random.uniform(low, …...
vue快速入门(十七)v-model数据双向绑定修饰符
注释很详细,直接上代码 上一篇 新增内容 v-model.trim 自动去除首尾空格v-model.number 自动转换成数字类型 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" con…...
2024-2025年申报各类科研项目基金撰写及技巧
随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…...
Python基于Django的微博热搜、微博舆论可视化系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【Linux学习】初识Linux指令(一)
文章目录 1.指令操作与图形化界面操作1.什么是指令操作,什么是图形化界面操作? 2.Linux下基本指令1.Linux下的复制粘贴2.Linux两个who命令3.补充知识4.pwd指令5. ls 指令6.cd 指令1.目录树2.相对路径与绝对路劲3.常用cd指令 7.tree指令8. touch指令9.sta…...
基于Python实现盈利8371%的交易策略
本文介绍了通过Python和Benzinga API构建自动化交易策略的方法,帮助交易者方便的回测交易策略。原文: An Algo Trading Strategy which made 8,371%: A Python Case Study Behnam Norouzi Unsplash 导言 传统自动化交易策略(如均线交叉或 RSI 临界点突破策略)已被证…...
如何在Linux中找到正在运行的Java应用的JAR文件
当你在Linux服务器上工作时,可能需要找到某个正在运行的Java应用的JAR文件位置。这对于诊断问题、更新应用或理解部署结构非常有用。以下是一个步骤详细的指南,帮助你找到这些信息。 1. 确定Java进程 首先,你需要确定正在运行的Java应用的进…...
几分钟学会TypeScript
目录 一、类型推断和类型注解二.类型注解,声明时指定类型三、类型断言四、基础类型和联合类型字符串数字和浮点类型布尔空和undefined多类型值限定 五、数组 元组 枚举数组元组,?代表可选参数枚举枚举使用 六、函数函数作为参数 七、类、接口与抽象类类访问修饰符类…...
最新版手机软件App下载排行网站源码/App应用商店源码
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 一款简洁蓝色的手机软件应用app下载排行,app下载平台,最新手机app发布网站响应式织梦模板。 主要有:主页、app列表页、app介绍详情页、新闻资讯列…...
R语言计算:t分布及t检验
t分布理论基础 t分布也称Student’s t-distribution,主要出现在小样本统计推断中,特别是当样本量较小且总体标准差未知时,用于估计正态分布的均值。其定义基于正态分布和 X 2 X^{2} X2分布(卡方分布)。如果随机变量X服…...
uni-app的地图定位与距离测算功能的实现
文章目录 一、引言二、uni-app地图定位实现三、距离测算技术四、完整代码五、结论本文着重探讨了如何在uni-app中实现地图定位,以及如何计算当前定位与目标位置之间的距离。 一、引言 在移动应用开发中,地图定位与距离测算是常见的功能需求。无论是出行导航、位置签到,还是…...
如何从应用商店Microsoft Store免费下载安装HEVC视频扩展插件
在电脑上打开一张HEIC类型的图片提示缺少HEVC解码器,无法打开查看,现象如下: 这种情况一般会提示我们需要下载安装HEVC解码器,点击“立即下载并安装”会跳转到应用商店,但是我们发现需要付费7元才能下载安装 免费安装…...
【vue】v-if 条件渲染
v-if 不适用于频繁切换显示模式的场景 修改web.user,可看到条件渲染的效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…...
Day37:LeedCode 738.单调递增的数字 968.监控二叉树 蓝桥杯 翻转
738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时,我们称这个整数是单调递增的。 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9 思路: 假设这个数是98,…...
详解Qt元对象系统
Qt库作为一款流行的跨平台C应用程序开发框架,其中的元对象系统是其核心特性之一。Qt元对象系统不仅提供了诸如信号槽(Signals & Slots)、属性系统(Property System)等功能,还实现了对C对象的运行时类型…...
无法用raven-js,如何直接使用TraceKit标准化错误字符串(一次有趣的探索)
引子:网上三年前(2020)的文章介绍了一个raven-js 简单说就是把堆栈信息格式化兼容各浏览器,便于查看错误来源。 **but:**到处找了一下raven-js,已经没有官方出处了,只在Sentry的源码仓库里发现…...
Docker学习笔记(二):在Linux中部署Docker(Centos7下安装docker、环境配置,以及镜像简单使用)
一、前言 记录时间 [2024-4-6] 前置文章:Docker学习笔记(一):入门篇,Docker概述、基本组成等,对Docker有一个初步的认识 在上文中,笔者进行了Docker概述,介绍其历史、优势、作用&am…...
uniapp 检查更新
概览 在uniapp中检查并更新应用,可以使用uni-app自带的更新机制。以下是一个简单的示例代码,用于在应用启动时检查更新: // 在App.vue或者其他合适的地方调用 onLaunch: function() {// 当uni-app初始化完成时执行// 判断平台const platfor…...
(Java)数据结构——正则表达式
前言 本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。 正则表达式概念 正则表达式,又称规则表达式(Regular Expression),是一种文本模式,包括普通字符…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
