蓝桥杯STC15F2K60S2单片机 CCP/PCA/PWM模块的学习与使用

news2024/12/23 14:36:59

有道是“一花独放不是春,万紫千红春满园”

我们不能只满足于 眼前所谓的 “够用、能用” 的少量知识,而不去深入学习探究,进而不慎封锁了自己的见识 和 更多 创新开发上的可能性。

曾经仅满足于学习了蓝桥杯单片机的三个外部晶振 定时器: 定时器0、1、2. 就认为完全够用了

直到有高人提点,方才认识到对官方手册的研究实属过于缺乏了,从而使得自我不能了解到CCP/PCA/PWM模块。

本文就学习研究下这个模块的基础以及驱动原理:

文末会安排代码硬件实验,使其实现外部中断、定时器、PWM输出等功能,并附上源码。

芯片型号:STC15F2K60S2

蓝桥杯单片机CT107D 开发实训平台

CCP代表的是Capture/Compare/PWM(捕捉/比较/脉宽调制)模块,它通常被用于控制PWM电机、PWM LED灯和其他需要精准控制的设备。

CCP意思是: Capture(捕获),Compare(比较),PWM(脉宽调制)。
PCA意思是: Programmable Counter Array(可编程计数器阵列)。

目录

PCA程序可编程计数器/定时器模块:

官方手册中有关CCP/PCA/PWM 的特殊功能寄存器:

特殊功能寄存器总表:(官方手册P783页):

PCA模块工作模式设定表(官方手册P789页):

官方手册例程代码学习(官方手册P801页开始查阅):

 先再次介绍一下三个PCA引脚以及作用:

首先介绍特殊功能寄存器是否需要sfr:

1.1.PCA作外部中断使用代码:

1.2.PCA作外部中断使用下载演示:

2.1.PCA作16位定时器使用代码:

2.2.PCA作16位定时器使用下载演示:

3.1.PCA输出高速脉冲代码:

3.2.PCA输出高速脉冲下载演示:

4.1.CCP/PCA捕获模式测脉冲宽度:  手册第822页有该例程序.


PCA程序可编程计数器/定时器模块:

PCA定时器简介:

PCA模块是程序可编程计数器/定时器模块,用于在单片机中生成定时器/计数器信号。

PCA模块可以帮助用户通过适当的程序设置生成准确的计时器/计数器信号,并在开发各种应用时提供了很大的灵活性。

PCA模块包括三个独立的定时器/计数器,分别是PCA0,PCA1和PCA2。它们的主要区别在于它们的工作模式和功能不同。以下是三个模块的简要说明:

1. PCA0:

该模块是一个多功能模块,可以作为定时器或计数器来使用。它具有多种计时和模式选择功能,并且可以将其输出信号引导到可编程I/O管脚 上。

2. PCA1:

该模块仅可用作定时器,具有比PCA0更精确的计时器基准,并可输出具有可定制占空比的PWM信号。

3. PCA2:

该模块仅可用作计数器,具有与PCA0类似的计数器功能,可以出发中断。它还可以输出方波信号、比较器输出和计数器输入捕获信号。

官方手册中有关CCP/PCA/PWM 的特殊功能寄存器

特殊功能寄存器总表:(官方手册P783页):

符号描述位地址及其符号复位值
地址B7B6B5B4B3B2B1B0

00xx

xx00

CCON PCA控制寄存器D8HCFCR---------------------------------------------CCF2CCF1CCF0

0xxx

0000

CMODPCA模式寄存器D9HCIDL-------------------------------------------CPS2CPS1CPS0ECF

x000

000

CCAPM0PCA 比较/捕获寄存器0、1、2DAH----------ECOM0CAPP0CAPN0MAY0TOG0PWM0ECCF0

x000

0000

CCAPM1DBH----------ECOM1CAPP1CAPN1MAY1TOG1PWM1ECCF1

x000

0000

CCAPM2DCH----------ECOM2CAPP2CAPN2MAY2TOG2PWM2ECCF2

0000

0000

CLPCA的16位计数器E9H--------------------------------------------------------------------------------------------------------------------------

0000

0000

CHF9H--------------------------------------------------------------------------------------------------------------------------

0000

0000

PCA_PWM0PCA模块PWM寄存器F2HEBS0_1EBS0_0-------------------------------------------------------------EPC0HEPC0L

00xx

xx00

PCA_PWM1F3HEBS1_1EBS1_0-------------------------------------------------------------EPC1HEPC1L

00xx

xx00

PCA_PWM2F4HEBS2_1EBS2_0-------------------------------------------------------------EPC2HEPC2L

00xx

xx00

AUXRI P_SW1配置的是串口一、CCP、SPI 的输出引脚映射A2HS1_S1S1_S0CCP_S1CCP_S0SP1_S1SP1_S0-----------DPS

0000

0000

CCAPnL(低位字节)PCA的捕获/比较寄存器------------------------------------------------------------------------------------------------------------------------------------

0000

0000

CCAPnH(低位字节)------------------------------------------------------------------------------------------------------------------------------------

0000

0000

 PCA控制寄存器 CCON:(官方手册P785页):

1. PCA计数器开关控制:

CCF0、CCF1和CCF2位控制PCA计数器是否开启。

2. PCA模块中断控制:  

CF、CR和CCIE位控制PCA中断是否生效。

3. PCA定时器控制:   

PCA模块可以通过CCON寄存器中的PCA计数器功能,实现定时器的功能。

4. PCA比较模式控制:

CCM0、CCM1和CCM2位控制PCA比较模式的选择和输出电平的控制。

PCA模式寄存器:CMOD (官方手册P784页):

 CMOD寄存器作用是控制PCA的分频、工作模式以及中断允许的:

1. 选择计数器模式:

CMOD寄存器的最低位(bit 0)控制计数器模式,可以选择8位计数器模式或12位计数器模式。

2. 选择时钟源和分频系数:

CMOD寄存器的第2~4位(bit 2~4)控制时钟源和分频系数,可以选择系统时钟、LFOSC、HFOSC或外部时钟,并可以选择1、2、4、8、16或32的分频系数。

3. 使能中断:

CMOD寄存器的第5位(bit 5)可以使能PCA模块的中断功能,当计数器溢出时会触发中断。

PCA中断服务函数中断号为:

void PCA_ISR() interrupt7 using1
{
    //中断服务内容
}

 PCA 比较/捕获寄存器CCAPM0、CCAPM1、CCAPM2:(官方手册P785页):

CCAPM0:

 CCAPM1:

 CCAPM2:

PCA模块工作模式设定表(官方手册P789页):

PCA的16位计数器CL\CH:

CL和CH地址分别为E9H和F9H,复位值均为00H,用于保存PCA的装载值。

有点类似定时器的TL与TH三个PCA模块共用一个计数器

PCA模块PWM寄存器PCA_PWM0、PCA_PWM1、PCA_PWM2:

PCA_PWM0:

 PCA_PWM1:

 PCA_PWM2:

  AUXR1寄存器配置的是串口一、CCP、SPI 的输出引脚映射:(手册第28页):

 此处只细讲CCP,其余配置位就不贴图解释了,有兴趣自己查阅官方手册

 其中第7 和 6位控制串口1的TXD/RXD的引脚映射,第3 和 2位控制SPI的引脚映射,

  其中第5 和 4位控制的就是CCP的 ECI / CCP0 / CCP1 / CCP2 引脚映射:

 ECI   是Capture Input引脚,用于捕获外部引脚的信号。

 CCP0和CCP1 是Capture/Compare/PWM功能的引脚之一,它们可以用于PWM输出或者捕获外部引脚的信号。

CCP2  是另一个比较模块的引脚,可以被用于PWM输出或者比较外部引脚的信号。

 PCA的捕获/比较寄存器——CCAPnL(低位字节)和CCAPnH(高位字节):

官方手册例程代码学习(官方手册P801页开始查阅):

 先再次介绍一下三个PCA引脚以及作用:

 ECI   是Capture Input引脚,用于捕获外部引脚的信号。

 CCP0和CCP1 是Capture/Compare/PWM功能的引脚之一,它们可以用于PWM输出或者捕获外部引脚的信号。

CCP2  是另一个比较模块的引脚,可以被用于PWM输出或者比较外部引脚的信号。

 

 单独的查阅每个特殊功能寄存器的作用与使用方法是很难学会使用的,在大致了解了几个寄存器以及作用后,

为了更具体深入了解如何通过配置这些寄存器来实现PCA的一些功能,

我们还需对官方例程进行一些学习:

本处贴出的学习代码都是我经过学习STC官方手册例程后,在蓝桥杯CT107D实训平台单片机上尝试实现的代码

首先介绍特殊功能寄存器是否需要sfr:

 截图中左边是官方手册例程使用的是#include"reg52.h",右边是我们蓝桥杯开发板常用的 #include "stc15f2k60s2.h"头文件,

我们发现有关PCA/PWM 特殊功能寄存器的位定义都为我们写好了,因此使用#include "stc15f2k60s2.h"头文件就不需要手动sfr这些寄存器了。

1.1.PCA作外部中断使用代码:

手册第801页有该例程序

可直接新建工程复制下载使用:

/*
    配置PCA为外部中断,
    PCA引脚    P1^1 CCP0 接地后LED端口状态反转
*/

其中定时器0用来刷新复制LED的,不起其他作用。

/*
	配置PCA为外部中断,
	PCA引脚	P1^1 CCP0 接地后LED端口状态反转
*/

#include "stc15f2k60s2.h"

sbit buzz=P0^6;

#define CCP_S0 0x10   //P_SW1.4
#define CCP_S1 0x20   //P_SW1.5

unsigned char LED=0xff;

void inint_PCA_exit();                  //初始化PCA为外部中断
void inint_port(unsigned char select);  //74HC138\74hc573芯片片选	函数
void Timer0Init(void);                  //定时器0初始化

void main()
{
	inint_port(5);       //清除蜂鸣器
	buzz=0;
	inint_port(4);       //清除LED
	P0=0XFF;
	
	Timer0Init();        //定时器0初始化   
	inint_PCA_exit();    //初始化PCA为外部中断

	while(1)
	{    
	}
}


//PCA中断服务函数
//using 1是指定中断服务程序使用1号寄存器组来保存寄存器的值。

void PCA_ISR() interrupt 7 using 1
{
	CCF0=0;   //清除中断标志
	LED=~LED; //LED测试取反
}


//初始化PCA为外部中断
void inint_PCA_exit()
{
 //映射引脚到(P1^2/ECI,P1^1/CCP0,P1^0/CCP1,P3^7/CCP2)
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);    //CCP_S0=0  CCP_S1=0 
	P_SW1=ACC;                //(P1^2/ECI,P1^1/CCP0,P1^0/CCP1,P3^7/CCP2)
	
/*	
	//映射引脚到(P3^4/ECI_2,P3^5/CCP0_2,P3^6/CCP1_2,P3^7/CCP2_2)
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);
	ACC|=CCP_S0;
	P_SW1=ACC;                 //(P3^4/ECI_2,P3^5/CCP0_2,P3^6/CCP1_2,P3^7/CCP2_2)
*/	
/*
	//映射引脚到(P2^4/ECI_3,P2^5/CCP0_3,P2^6/CCP1_3,P2^7/CCP2_3)	
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);
	ACC|=CCP_S1;
	P_SW1=ACC;                 //(P2^4/ECI_3,P2^5/CCP0_3,P2^6/CCP1_3,P2^7/CCP2_3)
*/	
	CCON=0;                     
	/*初始化PCA控制寄存器
		PCA定时器停止
		清除CF标志
		清除模块中断标志
	*/
	CH=0;CL=0;                 //复位PCA寄存器
	CMOD=0X00;                 //设置PCA时钟源、禁止PCA溢出中断
	CCAPM0=0X11;               //PCA模块0为下降沿触发
	/*
	CCAPM0=0X21;               //PCA模块0为上升沿触发
	CCAPM0=0X31;               //PCA模块0为上升沿/下降沿触发	
	*/
	CR=1;                      //PCA定时器开始工作
	EA=1;                      //开启总中断
	
}	



//74HC138\74hc573芯片片选	函数
void inint_port(unsigned char select)
{
	switch(select)
	{
		case 4:	P2=(P2&0X1F)|0X80;break;  //LED
		case 5:	P2=(P2&0X1F)|0XA0;break;	//蜂鸣器继电器
		case 6:	P2=(P2&0X1F)|0XC0;break;	//数码管位选
		case 7:	P2=(P2&0X1F)|0XE0;break;	//数码管段选
	}
}

//初始化定时器0
void Timer0Init(void)		//1毫秒@12.000MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x18;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	
	ET0=1;EA=1;
}


//定时器0中断服务函数
void t0() interrupt 1
{
	unsigned char i;
	if(++i==8)
	{i=0;inint_port(4);P0=LED;}
}

1.2.PCA作外部中断使用下载演示:

 红线接GND模拟按键,开关LED:

 

2.1.PCA作16位定时器使用代码:

 手册第805页有该例程序

 /*
    配置PCA为16位定时器
    让LED端口以1S为周期闪烁
    定时周期是10ms进一次中断
*/

/*
	配置PCA为16位定时器
	让LED端口以1S为周期闪烁
	定时周期是10ms进一次中断
*/
#include "stc15f2k60s2.h"

sbit buzz=P0^6;

//假定芯片工作频率为18.432MHz 18432000L
//但蓝桥杯竞赛实训板是 12.000MHz 所以是 12000000L
//填 11.0592MHz 11059200L  应该也没问题
#define FOSC 12000000L
#define T100Hz (FOSC/12/100)


#define CCP_S0 0x10   //P_SW1.4
#define CCP_S1 0x20   //P_SW1.5

unsigned char LED=0xff;
unsigned char cnt=0;
unsigned int value;

void inint_PCA_TIMER();                  //初始化PCA为16位定时器
void inint_port(unsigned char select);  //74HC138\74hc573芯片片选	函数

void main()
{
	inint_port(5);       //清除蜂鸣器
	buzz=0;
	inint_port(4);       //清除LED
	P0=0XFF;
	
	inint_PCA_TIMER();    //初始化PCA为16位定时器

	while(1)
	{    
	}
}


//PCA中断服务函数
//using 1是指定中断服务程序使用1号寄存器组来保存寄存器的值。

void PCA_ISR() interrupt 7 using 1
{
	CCF0=0;               //清除中断标志
	CCAP0L=value;
	CCAP0H=value>>8;	    //更新比较值
	value+=T100Hz;
	if(++cnt==100)        //计数100次
	{
		cnt=0;
		LED=~LED;           //每一秒LED测试取反一次
		inint_port(4);
		P0=LED;
	}
}


//初始化PCA为外部中断
void inint_PCA_TIMER()
{
 //映射引脚到(P1^2/ECI,P1^1/CCP0,P1^0/CCP1,P3^7/CCP2)
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);    //CCP_S0=0  CCP_S1=0 
	P_SW1=ACC;                //(P1^2/ECI,P1^1/CCP0,P1^0/CCP1,P3^7/CCP2)
	
/*	
	//映射引脚到(P3^4/ECI_2,P3^5/CCP0_2,P3^6/CCP1_2,P3^7/CCP2_2)
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);
	ACC|=CCP_S0;
	P_SW1=ACC;                 //(P3^4/ECI_2,P3^5/CCP0_2,P3^6/CCP1_2,P3^7/CCP2_2)
*/	
/*
	//映射引脚到(P2^4/ECI_3,P2^5/CCP0_3,P2^6/CCP1_3,P2^7/CCP2_3)	
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);
	ACC|=CCP_S1;
	P_SW1=ACC;                 //(P2^4/ECI_3,P2^5/CCP0_3,P2^6/CCP1_3,P2^7/CCP2_3)
*/	
	CCON=0;                     
	/*初始化PCA控制寄存器
		PCA定时器停止
		清除CF标志
		清除模块中断标志
	*/
	CH=0;CL=0;                 //复位PCA寄存器
	CMOD=0X00;                 //设置PCA时钟源、禁止PCA溢出中断
	
	value=T100Hz;	
	CCAP0L=value;
	CCAP0H=value>>8;	         //初始化PCA模块0
	value+=T100Hz;	
	
	CCAPM0=0X49;               //PCA模块0为16位定时器模式
	
	CR=1;                      //PCA定时器开始工作
	EA=1;                      //开启总中断
	
}	



//74HC138\74hc573芯片片选	函数
void inint_port(unsigned char select)
{
	switch(select)
	{
		case 4:	P2=(P2&0X1F)|0X80;break;  //LED
		case 5:	P2=(P2&0X1F)|0XA0;break;	//蜂鸣器继电器
		case 6:	P2=(P2&0X1F)|0XC0;break;	//数码管位选
		case 7:	P2=(P2&0X1F)|0XE0;break;	//数码管段选
	}
}

 

2.2.PCA作16位定时器使用下载演示:

 

 

3.1.PCA输出高速脉冲代码:

 手册第805页有该例程序,其中6、7、8位和9~16位PWM就不做演示了,自己查阅手册!

/*
    配置PCA为输出高速脉冲
    PCA模块0为16位定时器模式,同时反转CCP0(P1^1)口
*/ 

/*
	配置PCA为输出高速脉冲
	PCA模块0为16位定时器模式,同时反转CCP0(P1^1)口
*/

#include "stc15f2k60s2.h"

sbit buzz=P0^6;

//假定芯片工作频率为18.432MHz 18432000L
//但蓝桥杯竞赛实训板是 12.000MHz 所以是 12000000L
//填 11.0592MHz 11059200L  应该也没问题
#define FOSC 12000000L
#define T100Hz (FOSC/12/100)


#define CCP_S0 0x10   //P_SW1.4
#define CCP_S1 0x20   //P_SW1.5

unsigned char LED=0xff;
unsigned char cnt=0;
unsigned int value;

void inint_PCA_PWM1();                  //初始化PCA输出高速脉冲
void inint_port(unsigned char select);  //74HC138\74hc573芯片片选	函数

void main()
{
	inint_port(5);       //清除蜂鸣器
	buzz=0;
	inint_port(4);       //清除LED
	P0=0XFF;
	
	inint_PCA_PWM1();    //初始化PCA输出高速脉冲

	while(1)
	{    
	}
}


//PCA中断服务函数
//using 1是指定中断服务程序使用1号寄存器组来保存寄存器的值。

void PCA_ISR() interrupt 7 using 1
{
	CCF0=0;               //清除中断标志
	CCAP0L=value;
	CCAP0H=value>>8;	    //更新比较值
	value+=T100Hz;
}


//初始化PCA输出高速脉冲
void inint_PCA_PWM1()
{
 //映射引脚到(P1^2/ECI,P1^1/CCP0,P1^0/CCP1,P3^7/CCP2)
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);    //CCP_S0=0  CCP_S1=0 
	P_SW1=ACC;                //(P1^2/ECI,P1^1/CCP0,P1^0/CCP1,P3^7/CCP2)
	
/*	
	//映射引脚到(P3^4/ECI_2,P3^5/CCP0_2,P3^6/CCP1_2,P3^7/CCP2_2)
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);
	ACC|=CCP_S0;
	P_SW1=ACC;                 //(P3^4/ECI_2,P3^5/CCP0_2,P3^6/CCP1_2,P3^7/CCP2_2)
*/	
/*
	//映射引脚到(P2^4/ECI_3,P2^5/CCP0_3,P2^6/CCP1_3,P2^7/CCP2_3)	
	ACC=P_SW1;
	ACC&=~(CCP_S0|CCP_S1);
	ACC|=CCP_S1;
	P_SW1=ACC;                 //(P2^4/ECI_3,P2^5/CCP0_3,P2^6/CCP1_3,P2^7/CCP2_3)
*/	
	CCON=0;                     
	/*初始化PCA控制寄存器
		PCA定时器停止
		清除CF标志
		清除模块中断标志
	*/
	CH=0;CL=0;                 //复位PCA寄存器
	CMOD=0X02;                 //设置PCA时钟源、禁止PCA溢出中断
	
	value=T100Hz;	
	CCAP0L=value;	             //P1^1输出100KHz方波               
	CCAP0H=value>>8;	         //初始化PCA模块0
	value+=T100Hz;	
	
	CCAPM0=0X4d;               //PCA模块0为16位定时器模式,同时反转CCP0(P1^1)口
	
	CR=1;                      //PCA定时器开始工作
	EA=1;                      //开启总中断
	
}	



//74HC138\74hc573芯片片选	函数
void inint_port(unsigned char select)
{
	switch(select)
	{
		case 4:	P2=(P2&0X1F)|0X80;break;  //LED
		case 5:	P2=(P2&0X1F)|0XA0;break;	//蜂鸣器继电器
		case 6:	P2=(P2&0X1F)|0XC0;break;	//数码管位选
		case 7:	P2=(P2&0X1F)|0XE0;break;	//数码管段选
	}
}

 

3.2.PCA输出高速脉冲下载演示:

 

CCP/PCA捕获模式测脉冲宽度:  手册第822页有该例程序.

最后希望大家能从我的文章中初步了解学会了PCA\CCP\PWM的这三种功能,

觉得有用的话请给个三连支持

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日撸java三百行day58-59

文章目录 说明Day58 符号型数据的 NB 算法1.基础理论知识1.1 条件概率1.2 独立性假设1.3 Laplacian 平滑 2. 符号型数据的预测算法跟踪2.1 testNominal()方法2.1.1 NaiveBayes 构造函数2.1.2 calculateClassDistribution()2.1.3 calculateConditionalProbabilities()方法2.1.4 …

D*算法详解 (D星算法 / Dynamic A*算法/ Dstar算法)(死循环解决)【编辑中】

所需先验知识(没有先验知识可能会有大碍,了解的话会对D*的理解有帮助):A*算法/ Dijkstra算法 何为D*算法 Dijkstra算法是无启发的寻找图中两节点的最短连接路径的算法,A*算法则是在Dijkstra算法的基础上加入了启发函数…

【linux下一次复制cp多个文件】

linux下一次复制cp多个文件 linux cp 参数说明 -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 -f&…

使用可上网的服务器作为网关,实现另一台服务器上网

文章目录 物理条件方法一:不使用交换机方法二:使用交换机 配置步骤查看网络状态设置静态IP将服务器A设置成网关重新启动各服务器网卡设置主机名 参考资料 本文的目标是利用一台可以上网的服务器作为网关,使在同一局域网中的所有服务器都可以上…

如何安装多个node版本(不使用nvm)

1、选择node安装的路径 例如:D:\Program Files\nodejs 2、下载要安装的对应版本的zip格式的node安装包 例如:下载16.14.2 和 13.14.0 两个版本的zip格式的node安装包,node版本下载地址https://nodejs.org/dist/ 3、安装包解压到对应文件夹…

遥感云大数据在灾害、水体与湿地领域典型

近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

路径规划算法:基于JAYA优化的路径规划算法- 附代码

路径规划算法:基于JAYA优化的路径规划算法- 附代码 文章目录 路径规划算法:基于JAYA优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法JAYA…

深入理解深度学习——正则化(Regularization):对抗训练(Adversarial Training)

分类目录:《自然语言处理从入门到应用》总目录 在许多情况下,神经网络在独立同分布的测试集上进行评估已经达到了人类表现。因此,我们自然要怀疑这些模型在这些任务上是否获得了真正的人类层次的理解。为了探索网络对底层任务的理解层次&…

如何理解并使用 park 与 unpark

tip: 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 文章目录 一、基本介绍二、使用例子三、使用注意事项 一、基本介绍 park和unpark是Java中的两个线程同步…

高性能软件负载OpenResty介绍和安装

目录 1 OpenResty介绍1.1 Nginx 的流程定义1.1.1 流程详解1.1.2 OpenResty处理流程 2 Openresty安装2.1 yum安装2.1.1 添加OpenResty仓库2.1.2 安装OpenResty 2.2 源代码编译安装2.2.1 安装编译环境2.2.2下载最新版源码2.2.3下载缓存插件2.2.4 编译OpenResty2.2.5 安装OpenRest…

《设计模式》之状态模式

文章目录 1、定义2、动机3、类结构4、优点5、总结6、代码实现(C) 1、定义 允许一个对象在其内部改变时改变它的行为,从而使对象看起来改变了其行为。 2、动机 某些对象的状态如果改变,其行为也会随之而发生改变。比如文档的只读状态和读写状态的行为可…

【MySQL】- 04 MVCC实现原理

MVCC的实现原理 隐式字段undo日志Read View(读视图)整体流程例子 MVCC的目的就是多版本并发控制,在数据库中的实现,就是为了解决读写冲突,它的实现原理主要是依赖记录中的 3个隐式字段,undo日志 ,Read View 来实现的。…

Linux笔记-so.1和so的区别(三方程序链接Qt的so.1和so)

如下面这个程序使用ldd查看下: 从中可以看到一些so.6和so.1这些,这些其实是版本号,比如这个:/lib64/libstdc.so.6 可见so.版本号其实是个软连接,最终会连接到/lib64/libstdc.so.6.0.19 而CQt框架写的lib如下pro文件会生…

磁盘配额与进阶文件系统管理(一)

磁盘配额Quota 用途 针对www server,例如 每个人网页空间的容量限制;针对mail server,例如 每个人的邮件空间限制;针对file server,例如 每个人最大可用的网络硬盘空间;限制某一群组所能使用的最大磁盘空…

使用zerotier进行内网穿透,外网访问其它电脑上的虚拟机

目标 使用一台电脑,使用vmware创建三台虚拟机,处于同一网段。另一台电脑外网进行访问其虚拟机 用途 学习K8s集群,由于个人财力有限,云服务器买不了几台,而且不同厂家的云服务器无法做到内网互通 完成后缺陷 使用z…

nginx系统优化和内核优化

nginx系统优化 一:隐藏nginx版本号 方法一:修改配置文件 vim /usr/local/nginx/conf/nginx.confnginx -t systemctl restart nginx curl -I http://192.168.52.108方法二:修改源代码 vim /opt/nginx-1.24.0/src/core/nginx.h ##配置文件里…

逆向汇编与反汇编——汇编基础快速入门

一、常用32位寄存器介绍 不同位数的寄存器的名称: eax:累加寄存器。通常用于算数运算,将结果保留在eax当中,当然也可以用于其他用途,比如一般把返回值通过eax传递出去。 ebx:基址寄存器 。有点类似于ebp…

Go语言日志库logrus

Go语言日志库logrus 1、介绍 logrus logrus是目前Github上star数量最多的日志包,功能强大、性能高效、高度灵活,还提供了自定义插件的功能。很 多优秀的开源项目,例如:docker、prometheus等都使用了logrus。logrus除了具有日志…

VMware nat模式配置

使用nat模式,需要配置ip才能做到虚拟机与主机、外网正常通信 步骤 1 选择虚拟机设置,将网络连接改为nat模式 2 查看主机vmware network adpter vmnet8 打开控制面板。选择网络连接,右击vmnet8,打开属性 选择ip4,双击…

kubesphere插件,应用商店,应用仓库

应用商店 参考 步骤 以platform-admin角色的账号(admin)登录kubesphere点击右上角 “平台管理”点击“集群管理”点击 “自定义资源 CRD”搜索 clusterconfiguration点击 ClusterConfiguration点击 ks-installer 右侧的三个点,点击“编辑文件”在YAML 文件中&…