中颖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. 定时器运行模式

  1. MODE0 16位捕捉模式;
  2. MODE1 16位重载方式;
  3. MODE2 可编程时钟输出模式
  4. 上升沿多次触发模式

具体地看,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/T2T2OEDCENTR2CP/RL2方式描述
X0X11016位捕获
X0010116位自动重载定时器
X0110116位自动重载定时器
01X1X2可编程时钟
11X1X不推荐使用
XXX0XX定时器2停止,T2EX通路仍旧允许

2. 寄存器

(1)控制寄存器 T2CON

C8H第7 位第6 位第5 位第4 位第3 位第2 位第1 位第0 位
T2CONTF2EXF2--EXEN2TR2C/T2CP/RL2
读/ 写读/写读/写--读/写读/写读/写读/写
复位值(POR/WDT/LVR/PIN)00--0000

位功能:

位编号位符号说明
7TF2定时器2 溢出标志位
0:无溢出(必须由软件清0)
1:溢出(由硬件设1)
6EXF2T2EX 引脚外部事件输入(下降沿)被检测到的标志位
0:无外部事件输入(必须由软件清0)
1:检测到外部输入(如果EXEN2 = 1,由硬件设1)
3EXEN2T2EX 引脚上的外部事件输入(下降沿)用作重载/ 捕获触发器允许/ 禁止控制位
0:忽略T2EX引脚上的事件
1:检测到T2EX引脚上一个下降沿,产生一个捕获或重载
2TR2定时器2 开始/ 停止控制位
0:停止定时器2
1:开始定时器2
1C/T2定时器2 定时器/ 计数器方式选定位
0:定时器方式,T2引脚用作I/O端口
1:计数器方式,内部上拉电阻被打开
0CP/RL2捕获/ 重载方式选定位
0:16位带重载功能的定时器/计数器
1:16位带捕获功能的定时器/计数器

(2)定时器2模式控制寄存器 T2MOD

C9H76543210
T2MODTCLKP2----T2OEDCEN
读/写读/写读/写----读/写读/写
复位值(POR/WDT/LVR/PIN)0-----00

位定义:

位编号位符号说明
7TCLKP2分频选择控制位
0:选择系统时钟的1/12作为定时器2的时钟源
1:系统时钟作为定时器2的时钟源
1T2OE定时器2 输出允许位
0:设置P1.3/T2作为时钟输入或I/O端口
1:设置P1.3/T2作为时钟输出
0DCEN递减计数允许位
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){
		// 溢出标志位清0
		T2CON &= 0x7F;
		// 翻转P0_0
		P0_0 = ~P0_0;
	}	
	// 检测到外部事件下降沿
	if(T2CON & 0x40){
		// 1011 1111, T2EX引脚外部事件被检测到的标志位清0
		T2CON &= 0xBF;
		// 翻转P0_1
		P0_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/(t
2) 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=500us
    TL2 = 0x1F;   
    TH2 = 0xD1;
    // 重载计数器 Value
    RCAP2L = 0x1F; 
    RCAP2H = 0xD1;
    // 启动定时器
    T2CON |= 0x04; 

    while (1)
        ;
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9
{
    _push_(INSCON);
    Select_Bank0();

    // 定时器溢出
    if (T2CON & 0x80)
    {
        // 溢出标志位清0
        T2CON &= 0x7F;
        // 翻转P0_0
        P0_0 = ~P0_0;
    }
    // 检测到外部事件下降沿
    if (T2CON & 0x40)
    {
        // 1011 1111, T2EX引脚外部事件被检测到的标志位清0
        T2CON &= 0xBF;
        // 翻转P0_1
        P0_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=22165536[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)
    {
        // 溢出标志位清0
        T2CON &= 0x7F;
        // 翻转P0_0
        P0_0 = ~P0_0;
    }
    // 检测到外部事件下降沿
    if (T2CON & 0x40)
    {
        // 1011 1111, T2EX引脚外部事件被检测到的标志位清0
        T2CON &= 0xBF;
        // 翻转P0_1
        P0_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_OUT
  T4CON = 0x40;	  //T4引脚输出
  //配置定时器的初值为0x8000,T4引脚输出周期为2*0x8000个系统时钟的方波
  TL4 = 0x00;		 
  TH4 = 0x80;
  #endif
  #ifdef TIMER4_EDGETRIG
  T4CON = 0x48;	//T4上升沿触发,且可以多次触发
  TL4 = 0x00;
  TH4 = 0x00;
  #endif
  T4CON |=0x02;  //启动定时器4
  Select_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527783.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sql注入方式之联合注入

1.1 靶场环境 系统centos7 IP地址192.168.1.24 1.2 联合注入原理 联合查询注入是联合两个表进行注入攻击,使用关键词 union select 对两个表进行联合查询。两个表的字段要数要相同,不然会出现报错。 1.3 找注入点 找注入点,当输入id1 an…

你知道哪几种当前流行的lisp语言的方言?

估计很多人都看过《黑客与画家》这本书,这本书主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。作者保罗格雷厄姆字里行间不经意间向大家推介Lisp是最好的编程…

【linux】set ff=unix、linux设置文件格式

文章目录 一、文件格式二、如何查看文件格式三、设置文件格式、set ffunix四、查看unix与dos的区别 一、文件格式 当我们打开sh脚本时发现有时候格式是unix(LF) ,有时候是windows(CR LF) 。如下图: 文件格式影响了文件中的换行符 linux中sh类型的文件一般要设置为…

[dvwa] CSRF

CSRF 0x01 low 跨站,输入密码和确认密码直接写在url中,将连接分享给目标,点击后修改密码 社工方式让目标点击短链接 伪造404页,在图片中写路径为payload,目标载入网页自动请求构造链接,目标被攻击 http…

Python | Leetcode Python题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:quadruplets list()if not nums or len(nums) < 4:return quadrupletsnums.sort()length len(nums)for i in range(length - 3):if i > 0 …

222222222222222222222222

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

DevOps已死?2024年的DevOps将如何发展

随着我们进入2024年&#xff0c;DevOps也发生了变化。新兴的技术、变化的需求和发展的方法正在重新定义有效实施DevOps实践。 IDC预测显示&#xff0c;未来五年&#xff0c;支持DevOps实践的产品市场继续保持健康且快速增长&#xff0c;2022年-2027年的复合年增长率&#xff0…

标定系列——Ubuntu18.04下opencv-4.5.3与opencv_contrib-4.5.3源码编译(二十)

Ubuntu18.04下opencv-4.5.3与opencv_contrib-4.5.3源码编译 说明下载安装步骤1.更新2.安装必要的依赖包3.下载源码包并解压4.终端运行如下命令5.添加配置路径6.验证安装是否成功 说明 Ubuntu18.04下对opencv-4.5.3与opencv_contrib-4.5.3源码编译 下载 CSDN下载 安装步骤 …

[Linux][权限][粘滞位]详细解读,深入了解Linux权限

1.Linux权限的概念 Linux下有两种用户&#xff1a;超级用户(root)、普通用户 超级用户&#xff1a;可以在Linux系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在Linux下做有限的事情&#xff0c;可以有多个超级用户的命令提示符是**“#”&#xff0c;普通用户的命…

运算放大器的熟练运用-6个经典的高级电路

前一篇文章讲了运算的一般分析计算方法。 其中&#xff0c;重点提到了运放分析的两把“板斧”------“虚短”和“虚断”&#xff0c;有了这两个基本概念&#xff0c;再结合常用的欧姆定律&#xff0c;基尔霍夫电流&#xff0c;电压定律基本就可以解决大多数问题了。我们现在可以…

使用 Go-Ora 连接到 Oracle 数据库

前文 《 一鍵啓動 Oracle 23c Free 》 介绍了如何使用容器技术快速拉起 Oracle 23c 数据库。 这个开发者版本可以很便捷的拉起、测试、销毁&#xff0c;对开发者是非常友好的。 本文将介绍如何使用 Go 语言构建项目&#xff0c;并连接到 Oracle 数据库。 Go 环境配置 本文使用的…

基于在线脑电图的运动框架解码运动意图

多年来&#xff0c;我们研究了自然控制的各个方面&#xff0c;然而&#xff0c;单个方面的研究成果尚未被整合。在这里&#xff0c;我们提出了一个全面的在线研究中该框架的第一个实现&#xff0c;结合(i)目标定向运动意图、&#xff08;ii&#xff09;轨迹解码和&#xff08;i…

VSCode输入花括号{}}会多一个解决方案

打开设置 搜索Closing Brackets 选择BeforeWhitespace 选完后重启下VSCode即可

AI应用实战1:AI项目实战五大环节

文章目录 环节一&#xff1a;定义问题环节二&#xff1a;收集和处理数据环节三&#xff1a;选择机器学习模型环节四&#xff1a;训练模型环节五&#xff1a;超参数调试和性能优化1.评价模型效果的指标分类任务评估标准&#xff1a;回归任务评估标准&#xff1a;其他通用评估指标…

【Linux】TCP编程{socket/listen/accept/telnet/connect/send}

文章目录 1.TCP接口1.1socket文档 1.2listen拓&#xff1a;端口号8080 1.3accept拓&#xff1a;今天全局函数 1.4读写接口1.5telnet1.一个客户端2.两个客户端 1.6ulimit -a1.7常识回顾1.8connect1.9拓&#xff1a;客户端的ip和地址什么时候被分配&#xff1f;1.10拓&#xff1a…

力扣739. 每日温度

Problem: 739. 每日温度 文章目录 题目描述思路复杂度Code 题目描述 思路 若本题目使用暴力法则会超时&#xff0c;故而使用单调栈解决&#xff1a; 1.创建结果数组res&#xff0c;和单调栈stack&#xff1b; 2.循环遍历数组temperatures&#xff1a; 2.1.若当stack不为空同时…

AQS(AbstractQueuedSynchronizer)

一、什么是AQS AQS的全称为&#xff08;AbstractQueuedSynchronizer&#xff09;抽象的队列式的同步器&#xff0c;用来构建锁或者其他同步组件的基础框架类。使⽤AQS能简单且⾼效地构造出应⽤⼴泛的⼤量的同步器&#xff0c;如&#xff1a;基于AQS实现的lock、CountDownLatch…

计算机是如何工作的6

因此&#xff0c;往往就把“并行”和“并发”统称为“并发” 对应的编程方式&#xff08;解决一个问题&#xff0c;同时搞多个任务来执行&#xff0c;共同协作解决&#xff09;就称为“并发” 此处cpu的百分数&#xff0c;就是你的进程在cpu舞台上消耗时间的百分比 如果有一…

字符串2s总结

4.字符串 字符串理论基础 什么是字符串 字符串是若⼲字符组成的有限序列&#xff0c;也可以理解为是⼀个字符数组&#xff0c;但是很多语⾔对字符串做了特殊的规定&#xff0c;接下来我来说⼀说C/C中的字符串。 在C语⾔中&#xff0c;把⼀个字符串存⼊⼀个数组时&#xff0c…

Android Activity 介绍

Activity Activity 是一个应用组件&#xff0c;用户可与其提供的屏幕进行交互&#xff0c;以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕&#xff0c;但也可小于屏幕并浮动在其他窗口之…