MSP432学习笔记11:定时器A的结构\基地址\函数汇总理解

今日得以继续我的电赛MSP432学习之路:所用开发板MSP432P401R

定时器是任何单片机开发板十分重要的模块,在几日的学习使用过程中,本人也对其使用原理等产生过许多疑问,他究竟是怎么存储计数值、捕获值的?一个定时器四个通道是怎么回事?0~3这四个通道究竟会不会互相影响?当我清零捕获值时,对定时器计数值是否有影响呢?

此文主要讲解这些在MSP432定时器编程方面可能遇到的小疑问,大多是本人在研究过程中产生的,也许会帮助到大家!

目录

一、MSP432一个定时器四个通道互不影响:

二、每个定时器的通道0与其余通道(1、2、3)具有较大差异:

三、每个定时器计数值、捕获值分开存储:

四、MSP432的一些基地址宏定义:

1.TIMER_Ax_BASE

TIMER_Ax_BASE用于访问Timer A模块的寄存器。

2.TIMER_A_CAPTURECOMPARE_REGISTER_x

指定定时器模块中的比较寄存器。

3.TIMER_A_xxx_MODE

代表了Timer A的不同工作模式,用于控制定时器的行为。

4.INT_TAx_y

定时器/计数器(Timer/Counter)模块的中断标识符。

5.TIMER_A_CCTLN_COV_OFS和TIMER_A_CCTLN_COV

用于控制计时器A模块的比较/捕获控制寄存器CCTL的偏移量和溢出比较模式。

6.TIMER_A_READ_SYNCHRONIZED_CAPTURECOMPAREINPUT和TIMER_A_READ_CAPTURE_COMPARE_INPUT

都是定时器A模块控制寄存器中使用的常量。

7.TIMER_A_CAPTURECOMPARE_INPUT_HIGH和TIMER_A_CAPTURECOMPARE_INPUT_LOW

用于配置定时器模块的捕获比较输入模式。

五、定时器相关函数:

1.MAP_Timer_A_clearInterruptFlag(TIMER_Ax_BASE);

 用于清除定时器A的捕获/比较通道的溢出中断标志位。

2.MAP_Timer_A_clearCaptureCompareInterrupt(TIMER_Ax_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_x);

是用于清除特定定时器(Timer A)的特定比较捕获中断。

3. MAP_Interrupt_enableInterrupt(INT_TAx_y);

 开启定时器端口中断函数。

4.MAP_Timer_A_startCounter(TIMER_Ax_BASE,TIMER_A_xxx_MODE);

选择计数工作模式并启动定时器开始计数。

5.MAP_Timer_A_getEnabledInterruptStatus(TIMER_Ax_BASE );

查询定时器A的使能中断状态。

6. BITBAND_PERI(TIMER_A_CMSIS(TIMER_Ax_BASE)->CCTL[X], TIMER_A_CCTLN_COV_OFS) = 0;

 将 Timer A 比较控制寄存器 (CCTL[X]) 中的 "COV" 位清零。

7.MAP_Timer_A_getCaptureCompareEnabledInterruptStatus(TIMER_Ax_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_x);

获取捕捉比较器中的使能状态。

8.MAP_Timer_A_getSynchronizedCaptureCompareInput(TIMER_Ax_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_x,TIMER_A_READ_CAPTURE_COMPARE_INPUT)==TIMER_A_CAPTURECOMPARE_INPUT_LOW);

通过TIMER_A模块获取指定计时器和比较器的输入信号,并判断该输入信号是低电平。

9.MAP_Timer_A_clearTimer(TIMER_Ax_BASE);

清除指定的定时器。


 

一、MSP432一个定时器四个通道互不影响:

先笼统的说:我们可以认为MSP432有四个定时器、16个定时器模块,并且每个定时器都有对应引脚资源可以配置为或是捕获模式,或是PWM输出模式,都互不干扰! 

四个定时器通道(TimerA0、TimerA1、TimerA2、TimerA3)可以产生四种不同的定时器溢出中断,即不同的定时频率、定时周期

然后每个定时器都有四个模块,都可以分别配置为捕获或者PWM模式,就是有16个捕获或者PWM模块。

其中,每个定时器的通道0存的基准CCR0是频率基准,决定了每个定时器(TimerA0、TimerA1、TimerA2、TimerA3)的定时周期与频率,不建议更改!

Msp432P401r是一款具有四个定时器通道(TimerA0、TimerA1、TimerA2、TimerA3)的微控制器。这些定时器通道是相互独立的,可以单独配置和使用为不同中断溢出MSP432P401R是Texas Instruments的一款微控制器,它有16个定时器模块。互相之间不会产生影响。

在MSP432微控制器中,定时器0有4个独立的通道(0、1、2、3),它们可以互相独立地配置为捕获或计时模式。

这意味着我们可以单独配置每个通道的功能,它们之间没有直接的相互影响。

每个通道都有自己的寄存器和控制位,我们可以独立设置和访问这些寄存器。

在捕获模式下,每个通道可以用于捕获外部事件的时间戳或脉冲宽度测量。

在计时模式下,每个通道可以用于测量时间间隔或生成定时器中断。

当然今后可能需要注意中断优先级的分配,使得定时器运转程序如我们所愿!

二、每个定时器的通道0与其余通道(1、2、3)具有较大差异:

对于MSP432P401R的定时器通道0与其余通道之间的差别,主要体现在以下几个方面:

1. 功能:

通道0在每个定时器中通常具有更多的功能选项。它经常用作基本定时器,用于产生单个定时脉冲或精确的定时延迟。而通道1、2、3通常用于更复杂的定时事件生成或波形生成,它们支持更多的功能比如捕获、比较等。

2. 寄存器:

每个定时器通道都有自己的一组寄存器,用于配置和控制通道的功能。通道0与其他通道的寄存器可能会有一些差别,例如命名和功能。

3. 输出引脚:

通道0通常具有一个输出引脚,可用于生成定时信号。而通道1、2、3通常没有单独的输出引脚,它们可能需要通过其他引脚或模块来输出定时信号。

三、每个定时器计数值、捕获值分开存储:

MSP432P401R是Texas Instruments的一款微控制器,它有4个定时器、16个定时器模块

每个定时器都有分别存储的一组捕获值寄存器和一个计数值寄存器。计数计时寄存器数量(4个)取决于定时器数量,捕获值寄存器个数(16个)取决于定时器模块数量。

在MSP432微控制器上配置定时器计数功能时,可以同时选择定时器某个通道配置为捕获模式。

计数计时的时间取决于定时器的时钟源和预分频器设置。

需要选择定时器的时钟源,可以是外部时钟源或内部时钟源(如MCLK或SMCLK)。然后,可以使用预分频器将时钟源的频率分频。根据所选时钟源和预分频器的设置,可以计算出计时周期的时间。

定时器捕获值存储在定时器的捕获寄存器中。

这些寄存器是特定于每个定时器模块的,并且用于存储捕获的计数值。

定时器捕获值通常表示定时器计数器在特定事件(如电平变化或脉冲边沿)发生时的计数值。可以使用这些捕获值来进行时间测量或频率计算等应用。

要计算定时器捕获值,首先需要将捕获的计数值读取到相应的寄存器中。然后,可以使用这个捕获值与其他计数值进行计算,例如计算时间间隔或频率。

四、MSP432的一些基地址宏定义:

1.TIMER_Ax_BASE

#define TIMER_A0_BASE                         (PERIPH_BASE +0x00000000)          /*!< Base address of module TIMER_A0 registers */
#define TIMER_A1_BASE                         (PERIPH_BASE +0x00000400)          /*!< Base address of module TIMER_A1 registers */
#define TIMER_A2_BASE                         (PERIPH_BASE +0x00000800)          /*!< Base address of module TIMER_A2 registers */
#define TIMER_A3_BASE                         (PERIPH_BASE +0x00000C00)          /*!< Base address of module TIMER_A3 registers */

TIMER_Ax_BASE用于访问Timer A模块的寄存器。

以下是使用TIMER_Ax_BASE的一些基本用途

配置Timer A模块:

使用TIMER_Ax_BASE,可以配置Timer A的计时模式、计时器周期、计时器分频器等参数。

启动计时器:

启动Timer A模块以开始计时,您可以使用CCTLn寄存器中的特定位来使能和禁用定时器中断,并使用CTL寄存器的相应位来启动定时器。

处理定时中断:

如果启用了定时器中断,可以编写相应的中断处理函数来处理定时器中断。根据需求而有所不同。

2.TIMER_A_CAPTURECOMPARE_REGISTER_x

//*****************************************************************************
//
// The following are values that can be passed to the compareRegister parameter
//
//*****************************************************************************
#define TIMER_A_CAPTURECOMPARE_REGISTER_0                                  0x02
#define TIMER_A_CAPTURECOMPARE_REGISTER_1                                  0x04
#define TIMER_A_CAPTURECOMPARE_REGISTER_2                                  0x06
#define TIMER_A_CAPTURECOMPARE_REGISTER_3                                  0x08
#define TIMER_A_CAPTURECOMPARE_REGISTER_4                                  0x0A
#define TIMER_A_CAPTURECOMPARE_REGISTER_5                                  0x0C
#define TIMER_A_CAPTURECOMPARE_REGISTER_6                                  0x0E

//*****************************************************************************

指定定时器模块中的比较寄存器。

这些寄存器可以用于捕获计时器的当前值或与计时器的值进行比较。

在使用TIMER_A_CAPTURECOMPARE_REGISTER_x之前,需要首先初始化定时器模块。

以下是一个使用TIMER_A_CAPTURECOMPARE_REGISTER_x的示例:

1. 设置定时器模块的计数模式、频率和其他参数。
2. 选择一个可用的捕获比较寄存器,如TIMER_A_CAPTURECOMPARE_REGISTER_0。
3. 根据需要,配置比较寄存器的模式,例如捕获模式或比较模式。
4. 配置比较寄存器的相关参数,如计数值或比较模式。
5. 启动定时器模块。

一旦定时器模块启动,就可以使用TIMER_A_CAPTURECOMPARE_REGISTER_x来获取计时器的当前值或与计时器的值进行比较。

具体如何使用TIMER_A_CAPTURECOMPARE_REGISTER_x取决于应用需求,例如可以使用捕获模式来测量外部信号的脉冲宽度,或者使用比较模式来生成定时器中断或输出信号。

需要注意的是,对于每个比较寄存器,需要根据实际使用情况配置适当的中断和计时器操作。

3.TIMER_A_xxx_MODE

//*****************************************************************************
//
// The following are values that can be passed to the timerMode parameter
//
//*****************************************************************************
#define TIMER_A_STOP_MODE                                                  TIMER_A_CTL_MC_0
#define TIMER_A_UP_MODE                                                    TIMER_A_CTL_MC_1
#define TIMER_A_CONTINUOUS_MODE                                            TIMER_A_CTL_MC_2
#define TIMER_A_UPDOWN_MODE                                                TIMER_A_CTL_MC_3

//*****************************************************************************

代表了Timer A的不同工作模式,用于控制定时器的行为。

1. TIMER_A_STOP_MODE:
这个宏定义用于设置Timer A为停止模式。在停止模式下,定时器不工作,计数器停止计数。该模式通常在不需要定时器计数的时候使用。

2. TIMER_A_UP_MODE:
这个宏定义用于设置Timer A为向上计数模式。在向上计数模式下,计数器从0开始递增直到达到设定的上限值。当计数器到达上限值时,会触发中断或者产生输出信号,然后重新从0开始计数。

3. TIMER_A_CONTINUOUS_MODE:
这个宏定义用于设置Timer A为连续模式。在连续模式下,计数器从0开始递增,无论是否达到上限值,都会一直计数下去。这种模式适用于需要无限计数的应用场景。

4. TIMER_A_UPDOWN_MODE:
这个宏定义用于设置Timer A为向上/向下计数模式。在这个模式下,计数器从0开始递增直到达到设定的上限值,然后又从上限值开始递减直到0,然后再次递增,如此循环。这种模式适用于需要周期性计数的应用场景。

4.INT_TAx_y

#define INT_TA0_0                                       (24) /* TA0_0 IRQ */
#define INT_TA0_N                                       (25) /* TA0_N IRQ */
#define INT_TA1_0                                       (26) /* TA1_0 IRQ */
#define INT_TA1_N                                       (27) /* TA1_N IRQ */
#define INT_TA2_0                                       (28) /* TA2_0 IRQ */
#define INT_TA2_N                                       (29) /* TA2_N IRQ */
#define INT_TA3_0                                       (30) /* TA3_0 IRQ */
#define INT_TA3_N                                       (31) /* TA3_N IRQ */

定时器/计数器(Timer/Counter)模块的中断标识符。

每个INT_TAx_y对应于不同的定时器/计数器模块。

这些中断标识符可以在编程中用于启用和处理特定定时器/计数器的中断。

使用MSP432的软件包或编程环境,可以通过以下步骤来使用这些定时器模块和相应的中断标识符:

1. 配置定时器/计数器模块:

选择一个定时器/计数器模块(例如TA0、TA1等),并设置其工作模式、时钟源、分频比等参数。
2. 启用中断功能:

使用INT_TAx_y中断标识符,启用或禁用所选定时器/计数器模块的中断功能。
3. 编写中断处理程序:

在中断向量表或特定的中断服务函数中编写处理程序,用于处理所选定时器/计数器模块的中断事件。
4. 启动定时器/计数器:

启动所选定时器/计数器模块,开始计时或计数。

5.TIMER_A_CCTLN_COV_OFSTIMER_A_CCTLN_COV

/* TIMER_A_CCTLN[COV] Bits */
#define TIMER_A_CCTLN_COV_OFS                    ( 1)                            /*!< COV Bit Offset */
#define TIMER_A_CCTLN_COV                        ((uint16_t)0x0002)              /*!< Capture overflow */

用于控制计时器A模块的比较/捕获控制寄存器CCTL的偏移量和溢出比较模式。

TIMER_A_CCTLN_COV_OFS和TIMER_A_CCTLN_COV是两个宏定义,

TIMER_A_CCTLN_COV_OFS是一个偏移宏,表示CCTL寄存器在控制寄存器组中的偏移量。它用于访问CCTL寄存器,该寄存器用于配置计时器A模块的比较/捕获通道。

TIMER_A_CCTLN_COV宏定义表示CCTL寄存器的溢出比较模式。它用于配置CCTL寄存器,以确定比较/捕获通道是用于捕获定时器溢出事件还是与其他事件进行比较。

6.TIMER_A_READ_SYNCHRONIZED_CAPTURECOMPAREINPUTTIMER_A_READ_CAPTURE_COMPARE_INPUT

//*****************************************************************************
//
// The following are values that can be passed to the synchronized parameter
//
//*****************************************************************************
#define TIMER_A_READ_SYNCHRONIZED_CAPTURECOMPAREINPUT                      TIMER_A_CCTLN_SCCI
#define TIMER_A_READ_CAPTURE_COMPARE_INPUT                                 TIMER_A_CCTLN_CCI

都是定时器A模块控制寄存器中使用的常量。

1. TIMER_A_CCTLN_SCCI(TIMER_A_READ_SYNCHRONIZED_CAPTURECOMPAREINPUT)是用于配置定时器A的比较输出触发模式的常量。它指示定时器A在捕获比较输入时使用同步触发机制。这意味着定时器A的捕获比较输入会与外部信号进行同步,以确保准确的时间测量。

2. TIMER_A_CCTLN_CCI(TIMER_A_READ_CAPTURE_COMPARE_INPUT)是用于配置定时器A的比较输入信号的常量。它指示定时器A将比较输入设置为捕获模式,以便在定时器A计数器到达指定值时,输入信号的状态将被捕获。

这些常量在MSP432的Timer A控制寄存器(CCTLx)中使用,其中x表示定时器A的各个通道(0-5)。

使用这些常量的步骤如下:

1. 配置定时器A的相关寄存器:通过编程设置相关的控制寄存器,例如CCTLx和CTL。

2. 选择相应的模式:根据需求选择TIMER_A_CCTLN_SCCI或TIMER_A_CCTLN_CCI常量,以配置捕获比较功能的触发模式或输入信号。

3. 启动定时器A:设置CTL寄存器中的计数器模式和时钟源,然后启动定时器A。

4. 处理捕获或比较事件:当定时器A的计数器达到指定值时,相关的捕获或比较事件将会发生。根据需要,进行相应的事件处理。

7.TIMER_A_CAPTURECOMPARE_INPUT_HIGHTIMER_A_CAPTURECOMPARE_INPUT_LOW

#define TIMER_A_CAPTURECOMPARE_INPUT_HIGH                                  0x01
#define TIMER_A_CAPTURECOMPARE_INPUT_LOW                                   0x00

用于配置定时器模块的捕获比较输入模式。

这些宏定义定义了输入模式的不同状态。

`TIMER_A_CAPTURECOMPARE_INPUT_HIGH`表示“高电平”输入模式,而`TIMER_A_CAPTURECOMPARE_INPUT_LOW`表示“低电平”输入模式。

这些宏定义一般在使用MSP432的定时器模块进行输入捕获操作时使用。通过设置定时器的捕获比较寄存器(Capture/Compare Register)的输入模式,可以根据输入信号的电平状态来触发相应的捕获事件。

五、定时器相关函数:

1.MAP_Timer_A_clearInterruptFlag(TIMER_Ax_BASE);

 用于清除定时器A的捕获/比较通道的溢出中断标志位。

当定时器A的捕获/比较通道A产生中断时,中断标志会被设置。通过调用该函数,可以清除这个中断标志,以便处理器可以继续进行其他任务。

2.MAP_Timer_A_clearCaptureCompareInterrupt(TIMER_Ax_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_x);

是用于清除特定定时器(Timer A)的特定比较捕获中断。

TIMER_Ax_BASE`表示要操作的定时器A的基地址

TIMER_A_CAPTURECOMPARE_REGISTER_x`表示要操作的比较捕获寄存器的编号。

3. MAP_Interrupt_enableInterrupt(INT_TAx_y);

 开启定时器端口中断函数。

4.MAP_Timer_A_startCounter(TIMER_Ax_BASE,TIMER_A_xxx_MODE);

选择计数工作模式并启动定时器开始计数。

5.MAP_Timer_A_getEnabledInterruptStatus(TIMER_Ax_BASE );

查询定时器A的使能中断状态。

函数的作用是查询指定定时器A模块的使能中断状态,并返回当前的状态值。

函数的使用方法如下:
1. 包含头文件 #include <ti/devices/msp432p4xx/driverlib/driverlib.h>
2. 初始化定时器A模块。
3. 使用函数 TIMER_A_getEnabledInterruptStatus(TIMER_Ax_BASE),其中TIMER_Ax_BASE是特定定时器A模块的基地址,用于查询该模块的使能中断状态。
4. 函数返回值是一个32位的掩码,表示各个中断标志位的状态。根据具体需要,可以使用位运算(如与操作)来查询特定的中断标志位。

6. BITBAND_PERI(TIMER_A_CMSIS(TIMER_Ax_BASE)->CCTL[X], TIMER_A_CCTLN_COV_OFS) = 0;

 将 Timer A 比较控制寄存器 (CCTL[X]) 中的 "COV" 位清零。

这个语句使用了字节操作宏 BITBAND_PERI,它是一种优化技术,用于在单个位级别上访问外设寄存器。通过使用 BITBAND_PERI,可以直接对特定位进行操作,而不必读取整个寄存器。这样可以提高代码效率和执行速度。

具体到这个语句中,TIMER_Ax_BASE 是 Timer A 的基地址,X 是比较器的编号(0 到 6),TIMER_A_CMSIS 和 TIMER_A_CCTLN_COV_OFS 是定义在设备头文件中的宏,用于计算对应的 CCTL[X] 的偏移量和 COV 位在该寄存器中的位偏移量。

通常,在编写 MSP432 的定时器中断代码时,会遇到需要清除溢出标志的情况。此时,可以使用类似于上述代码的语句,将相关的比较控制寄存器中的溢出位清零,以允许下次溢出中断正确触发。

7.MAP_Timer_A_getCaptureCompareEnabledInterruptStatus(TIMER_Ax_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_x);

获取捕捉比较器中的使能状态。

在MSP432中,定时器用于测量时间、执行中断、计时等操作。捕捉比较器是一种与定时器关联的特殊寄存器,可以用来捕捉或比较定时器的值。捕捉比较器的使能状态用于确定是否允许对应的中断。

在需要判断捕捉比较器中断使能状态的时候,可以使用该函数来获取相应的状态值。函数会返回一个bool类型的返回值,true表示中断使能,false表示中断禁用。

8.MAP_Timer_A_getSynchronizedCaptureCompareInput(TIMER_Ax_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_x,TIMER_A_READ_CAPTURE_COMPARE_INPUT)==TIMER_A_CAPTURECOMPARE_INPUT_LOW);

通过TIMER_A模块获取指定计时器和比较器的输入信号,并判断该输入信号是低电平。

MAP_Timer_A_getSynchronizedCaptureCompareInput()是一个用于获取比较器输入信号的函数。其中,TIMER_Ax_BASE表示定时器A模块的基地址,TIMER_A_CAPTURECOMPARE_REGISTER_x表示指定的比较器寄存器,TIMER_A_READ_CAPTURE_COMPARE_INPUT表示读取比较器输入信号的操作。

这段代码的功能是判断指定的比较器输入信号是否为低电平。

9.MAP_Timer_A_clearTimer(TIMER_Ax_BASE);

清除指定的定时器。

这个函数可以在需要停止或重置定时器的时候使用。当调用这个函数后,定时器的计数器会被清零,定时器停止计数。

下面是使用`MAP_Timer_A_clearTimer()`的一般步骤:

1. 配置定时器的参数。可以使用“Timer_A_initUpMode()”函数或者其他相应的配置函数配置定时器。
2. 在需要处理的时候调用“MAP_Timer_A_clearTimer(TIMER_Ax_BASE)”来清除定时器。

需要注意的是,TIMER_Ax_BASE中的x代表具体的定时器编号(例如TIMER_A0_BASE、TIMER_A1_BASE等),您需要根据自己的应用选择正确的定时器。

这个函数通常在需要停止或者重置定时器的时候用到,例如在定时器到达指定时间后,或者在程序中需要重新开始计时等情况下使用。

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

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

相关文章

8.2 电压比较器(1)

电压比较器是对输入信号进行鉴幅与比较的电路&#xff0c;是组成非正弦波发生电路的基本单元电路&#xff0c;在测量和控制中有着相当广泛的应用。 一、概述 1、电压比较器的电压传输特性 电压比较器的输出电压 u O u_{\scriptscriptstyle O} uO​ 与输入电压 u I u_{\scr…

网络层:虚拟专用网VPN和网络地址转换NAT

1.网络层&#xff1a;虚拟专用网VPN和网络地址转换NAT 笔记来源&#xff1a; 湖科大教书匠&#xff1a;虚拟专用网VPN和网络地址转换NAT 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 虚拟专用网VPN 专用网和公用网的特点 专用网络&#xff…

Springboot集成magic-api

目录 1、前言 2、springboot集成magic-api 2.1、添加maven依赖 2.2、application.yml配置 2.3、编写测试接口 2.4、启动程序&#xff0c;访问接口 2.5、magic-api脚本 3、magic-api其他语法 4、注意事项 1、前言 今天项目中遇到一个问题&#xff0c;springboot后端项目…

探索ChatGPT:了解语言模型在对话系统中的应用

第一章&#xff1a;引言 在当今数字化时代&#xff0c;人工智能技术的迅猛发展使得对话系统成为一个备受关注的领域。随着语言模型的进步&#xff0c;像ChatGPT这样的模型正在改变我们与计算机进行交流的方式。本文将探索ChatGPT作为一种语言模型在对话系统中的应用&#xff0…

简化 Hello World:Java 新写法要来了

OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。 这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” &#xff0c;希望 Java 的学习过程能更平滑&#xff0c;让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释&#xff1a;现在的 Java 语言非常…

Flutter 笔记 | Flutter 核心原理(三)布局(Layout )过程

布局过程 Layout&#xff08;布局&#xff09;过程主要是确定每一个组件的布局信息&#xff08;大小和位置&#xff09;&#xff0c;Flutter 的布局过程如下&#xff1a; 父节点向子节点传递约束&#xff08;constraints&#xff09;信息&#xff0c;限制子节点的最大和最小宽…

【实战与杂谈】本地搭建自己的游戏王卡片生成器

声明&#xff1a; 1.游戏王卡片制作器本身就是由【kooriookami】开发的&#xff0c;用于DIY卡片因此我只是原有功能再现并不会追加新功能 2.其次数据和卡图均来源于网络&#xff0c;因此我也只提供网络能获取该内容的途径&#xff0c;并不会预先准备好 最近一直没有时间看回复…

SpringBoot的配置环境属性

SpringBoot的配置环境属性 在本文中&#xff0c;我们将讨论SpringBoot的配置环境属性。我们将了解如何使用这些属性来配置我们的应用程序&#xff0c;以便在不同的环境中运行。我们还将了解如何使用SpringBoot的配置文件来管理这些属性。最后&#xff0c;我们将介绍一些最佳实…

激活函数ReLU和SiLU的区别

文章目录 前言ReLU&#xff08;Rectified Linear Unit&#xff09;Leaky ReLUFReLU&#xff08;Flatten ReLU&#xff09;SiLU&#xff08;Sigmoid Linear Unit&#xff09;总结 前言 在这里&#xff0c;我就简单写一下两个激活函数的概念以及区别&#xff0c;详细的过程可以看…

【C++详解】——红黑树

目录 红黑树的概念 红黑树的性质 红黑树节点的定义 红黑树的结构 红黑树的插入操作 情况一 情况二 情况三 红黑树的验证 红黑树的查找 红黑树与AVL树的比较 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示…

校园网WiFi IPv6免流上网

ipv6的介绍 IPv6是国际协议的最新版本&#xff0c;用它来取代IPv4主要是为了解决IPv4网络地址枯竭的问题&#xff0c;也在其他很多方面对IPv4有所改进&#xff0c;比如网络的速度和安全性。 IPv4是一个32位的地址&#xff0c;随着用户的增加在2011年国家报道说IPv4的网络地址即…

SpringBoot整合模板引擎Thymeleaf(2)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 概述 Thymeleaf十分类似于JSP中使用的EL表达式。整体而言&#xff0c;Thymeleaf简洁、优雅、高效&#xff1b;非常适合小型项目的快速开发。 Thymeleaf常用标签简述 在此…

Socket安全(一)

文章目录 1. 安全Socket2. 保护通信3. 创建安全客户端Socket4. 选择密码组5. 事件处理器6. 会话管理 1. 安全Socket 前面介绍了Socket的基本使用&#xff0c;这里开始介绍Socket的安全问题&#xff0c;作为一个Internet用户&#xff0c;你确实有一些保护手段可以保护自己的隐私…

【MongoDB】四、MongoDB副本集的部署

【MongoDB】四、MongoDB副本集的部署 实验目的实验内容实验步骤实验小结 实验目的 能够通过部署副本集理解副本集机制&#xff0c;从而解决大数据项目中数据丢失的问题 实验内容 环境准备&#xff1a;根据表中的信息完成3台MongoDB服务器的部署&#xff08;XXX是姓名拼音首字母…

Linux下使用Samba做域控

AI画妹子的工作先暂告一段落。毕竟戗行也是要有门槛的。 企业中使用Windows Server使用活动目录集中管理PC、服务器是很成熟的方案。突然想到&#xff0c;如果有一天出于某种原因不再使用微软方案了&#xff0c;AD该如何替代&#xff1f;问了一下chatGPT&#xff0c;它说&…

简易MFC的成绩管理系统

意义 掌握MFC控件的基本使用&#xff0c;结合了面向对象和Window消息机制的知识。 选择做简单的成绩管理系统&#xff0c;该项目切合大学生实际情况。易于更好理解。 项目实现了成绩的增加、修改、删除、存储&#xff08;文件读写操作&#xff09;的功能。 创建项目 打开软件…

浅谈企业能源监测管理系统的设计与应用

安科瑞 华楠 摘要: 针对企业目前能源监测现状, 结合企业信息化建设情况和发展需要, 介绍了能源监测管理信息系统, 提出了企业能源监测管理系统建设建议。 关键词:管理系统; 能源监测; 企业信息化 0 引言 节能降耗是缓解中国资源约束的根本出路, 也是提高企业自主创新能力的…

Vault从入门到精通系列之二:启动Vault服务器

Vault从入门到精通系列之二&#xff1a;启动Vault服务器 一、启动开发服务器二、设置环境变量三、验证服务器正在运行四、vault命令汇总 Vault 作为客户端-服务器应用程序运行。Vault 服务器是唯一与数据存储和后端交互的 Vault 架构。通过 Vault CLI 完成的所有操作都通过 TLS…

【并发知识点】CAS的实现原理及应用

系列文章目录 AQS的实现原理及应用 CAS的实现原理及应用 文章目录 系列文章目录前言1、CAS的概念2、CAS的实现原理3、单JVM内锁CAS实现3.1、效果 4、模拟赛龙舟比赛 前言 本章节介绍CAS概念、实现原理&#xff0c;并通过java代码应用&#xff0c;最终模拟赛龙舟比赛。 1、CA…

【spring cloud学习】2、Eureka服务注册与发现

前言 一套微服务架构的系统由很多单一职责的服务单元组成&#xff0c;而每个服务单元又有众多运行实例。由于各服务单元颗粒度较小、数量众多&#xff0c;相互之间呈现网状依赖关系&#xff0c;因此需要服务注册中心来统一管理微服务实例&#xff0c;维护各服务实例的健康状态…