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

ZYNQ AXI_Timer 中断

REVIEW

关于ZYNQ中断:

ZYNQ PS_GPIO中断-CSDN博客

ZYNQ AXI_GPIO_INT-CSDN博客

ZYNQ 定时器中断-CSDN博客

在一些应用场景中,可能需要使用到多个定时器,除了选择使用 PS 侧其他定时器外,也可以使用 PL 侧逻辑定时器。

1. 今日摸鱼任务

创建并使用AXI_TIMER,

定时器1:1s MIO7(PS_LED)闪烁

定时器2:0.5s EMIO54(PL_LED)闪烁

小梅哥教材:

03_【裸机教程】基于C编程的Zynq裸机程序设计与应用教程v2.4.5.pdf

第七章 基于AXI Timer的定时器中断实验(没用串口)

2. AXI_Timer 核

        AXI Timer IP 核,全称为 AXI Timer/Counter ,是一个 32/64 位定时器模块,可连接到 AXI4-Lite 接口。通过计数值以及接入 axi_timer 的计数时钟周期,可以在 PS 内取得比较精确的计时。
(单个32位,级联64位)
结构框图如下图:

AXI4-Lite Interface AXI4 Lite 接口模块实现 AXI4 Lite 从接口,用于访问内存映射定时器寄存器。
Timer Register 为每个定时器 / 计数器实现一组 32 位寄存器。
                           这组寄存器包含加载寄存器、定时器/计数器寄存器和控制/状态寄存器。
32-bit Counter 定时器 / 计数器模块有两个 32 位计数器。
                          每个计数器可配置为递增/递减计数,并可使用加载寄存器中的值加载。
Interrupt Counter 中断控制模块,根据工作模式生成单个中断。
Pulse Width Modulation (PWM) PWM 模块生成具有指定频率和占空比的脉冲信号 PWM0
                                                      使用定时器 0 用于 PWM0 周期,定时器 1 用于PWM0 输出宽度。

3. AXI_Timer 寄存器

3.1 寄存器一览

3.2 控制/状态寄存器 0 (TCSR0)

31-12             保留

11 CASC       使能定时器的级联模式 1启用级联模式,做低32位。

10 ENALL     使能所有定时器 

                                1 写入该位将设置 ENALL、ENT0(TCSR0)和 ENT1(TCSR1)。

                                0 写入此寄存器将清除 ENALL,但对 ENT0 ENT1 没有影响。

PWMA0      使能定时器 0 的脉宽调制  

                                PWM 模式,MDT0(TCSR0)和 MDT1(TCSR1)必须为 0。

T0INT         定时器 0 中断

                                捕获模式且定时器已使能,则此位表示已发生捕获。

                                生成模式,则该位表示计数器已翻转。必须通过写入1来清除。

ENT0          使能定时器

                                0禁用定时器(计数器停止)

                                1使能定时器(计数器运行)

6 ENIT0         使能定时器 0 的中断

                                使能此定时器中断信号的断言。对 TCSR0 中的中断标志 (T0INT)没有影响。

                                0禁用中断信号

                                1使能中断信号

LOAD0       加载定时器 0

                                 1使用 TLR0 中的值加载计时器

                                 与 ENT0 位一起清除

ARHT0      自动重新加载/保持定时器 0

                                 生成模式时,该位确定计数器是重新加载生成值并继续运行还是保持在终止值。

                                 在捕获模式下,该位确定新的捕获触发器覆盖或保留先前捕获的值。

                                 0保持计数器或捕获值。在提供外部捕获之前,必须读取TLR0

                                 1重新加载生成值或覆盖捕获值。

CAPT0      使能外部捕获触发器定时器 

GENT0      使能外部生成信号定时器 0  

UDT0         递增/递减计数定时器

                                  0递增

                                  1递减

MDT0         定时器 0 模式

                                  0生成模式

                                  1捕获模式

3.3 加载寄存器(TLR0 和 TLR1) 32b

Timer/Counter Load Register
计数器宽度配置为小于 32 位时,加载寄存器值在 TLR0 TLR1 中右对齐。
最低有效计数器位始终映射到加载寄存器的 bit0
级联模式下, TLR0 具有生成值的最低有效 32 位,而 TLR1 在生成模式下应具有生成值的最高有效位。

3.4 定时器/计数器寄存器(TCR0 TCR1)32b

Timer/Counter Register
计数器宽度配置为小于 32 位时,计数值在 TCR0 TCR1 中右对齐。
在级联模式下, TCR0 具有 64 位计数器中最低有效位的 32 位, TCR1 具有最高有效位。

3.5 控制/状态寄存器 1TCSR1

与TCSR0相比,减少了第11位

其他功能与其对应

4. 工作模式

3.1 生成模式

        在生成模式下,会将加载寄存器(Load Register)中的值加载到计数器中。当计数器使能时,根据定时器控制状态寄存器(TCSR )中向上 / 向下(UDT)位,递增/减计数。在计数器进位转换时,计数器停止或重新加载生成值,并在达到超时值后,按照 TCSR 中自动重新加载 /保持( ARHT)位的选择继续计数。定时器中断状态(TINT 如果使能,则 GenerateOut 信号在一个时钟周期内被驱动为 1
        如果使能,当达到超时值时,定时器的中断信号被驱动为1。通过向定时器中断寄存器写入 1 来清除中断。使用此模式生成具有指定间隔的重复中断或外部信号。

3.2 捕获模式

        在捕获模式下,当外部捕获信号时,计数器的值存储在加载寄存器中。检测到捕获事件时,也会在 TCSR 中设置 TINT 位。根据 TCSR UDT 位的选 择,计数器可配置为该模式的递增或递减计数器。自动重新加载 / 保持(ARHT)位控制在清除前一个 TINT标志之前,是否用新的捕捉值覆盖捕捉值。使用此模 式对外部事件进行时间标记,同时生成中断。

3.3 脉宽调制模式

        在脉宽调制(PWM )模式下,两个定时器 /计数器成对使用,以产生具有指定频率和占空因数的输出信号( PWM0 )。定时器 0 设置周期,定时器 1 设置PWM0 输出的高电平时间。

3.4 级联模式

        在级联模式下,两个定时器/ 计数器级联为单个 64 定时器 /计数器。级联计数器可以在生成和捕获模式下工作。 TCSR0 用作级联计数器的控制和状态寄存器。在此模式下, TCSR1 被忽略。
        当需超过 32 位宽的定时器 /计数器时,使用此模式。级联操作需要将定时器 0 和定时器 1 成对使用。定时器 1 的计数事件是定时器 0 从全 1 翻转到全 0,反之亦然。

5. Block Design

AXI_TIMER保持默认设置

6. SDK

PS_GPIO、 SCU_GIC
ZYNQ PS_GPIO中断-CSDN博客
AXI_TIMER.h

#ifndef AXI_Timer_AXI_Timer_H_
#define AXI_Timer_AXI_Timer_H_

#include "xscutimer.h"
#include "xtmrctr.h"


#define TMRCTR_DEVICE_ID    XPAR_TMRCTR_0_DEVICE_ID
#define TMRCTR_INTERRUPT_ID    XPAR_FABRIC_TMRCTR_0_VEC_ID
#define INTC_DEVICE_ID        XPAR_SCUGIC_SINGLE_DEVICE_ID
#define TIMER_CNTR_0         0
#define TIMER_CNTR_1         1
#define TIMER0_FREQ            XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ    //(50000000U)
#define RELOAD_VAL_US(n)    ((TIMER0_FREQ/1000000)*n-1)        //计算n(us)的装载值
#define RELOAD_VAL_MS(n)    ((TIMER0_FREQ/1000)*n-1)        //计算n(ms)的装载值
#define RELOAD_VAL_S(n)        ((TIMER0_FREQ)*n-1)                //计算n(s)的装载值

//这里计算值,需选择  XTC_DOWN_COUNT_OPTION        配置为向下计数(默认为向上计数)

extern XTmrCtr AXI_Timer0;        //定时器实例
extern volatile uint16_t Cnt0;
extern volatile uint16_t Cnt1;
extern volatile uint16_t Cnt0_Flag;
extern volatile uint16_t Cnt1_Flag;

void AXI_Timer_Init(XTmrCtr *TmrCtrInstPtr,uint16_t DevId);
void AXI_Timer_Int_Init(XTmrCtr *TmrCtrInstPtr,uint16_t IntrId,XTmrCtr_Handler Timer_Handler);
void AXI_Timer_SetOption(XTmrCtr *TmrCtrInstPtr,uint8_t TmrCtrNum,uint32_t Mode, uint32_t Reload_Val);
void AXI_Timer0_IRQ_Handler(void *CallBackRef, u8 TmrCtrNum);

#endif /* AXI_Timer_AXI_Timer_H_ */
 

AXI_TIMER.c

/**
  *****************************************************************************
  *                     AXI TIMER IP核的定时器中断相关应用库
  *****************************************************************************
  *
  * @File   : AXI_Timer.c
  * @By     : Sun
  * @Version: V1.0
  * @Date   : 2022 / 05 / 19
  * @Shop    : https://xiaomeige.taobao.com/
  *
  *****************************************************************************
**/

#include "AXI_TIMER.h"
#include"SCU_GIC.h"
XTmrCtr AXI_Timer0;        //定时器实例


/**
  *****************************************************
  * @brief    初始化AXI_Timer设备
  * @param    TmrCtrInstPtr    Timer对象指针
  * @param    DevId            Timer设备ID
  * @usage    //定时器初始化
  *         AXI_Timer_Init(&Timer0,TMRCTR_DEVICE_ID);
  *****************************************************
**/
void AXI_Timer_Init(XTmrCtr *TmrCtrInstPtr,uint16_t DevId)
{
    XTmrCtr_Initialize(TmrCtrInstPtr, DevId);
}


/**
  *****************************************************
  * @brief    初始化AXI_Timer中断
  * @param    TmrCtrInstPtr    Timer对象指针
  * @param    IntrId            中断ID
  * @param    Timer_Handler    Timer的中断服务函数
  * @usage    //定时器中断初始化,中断服务函数为AXI_Timer0_Handler
  *         AXI_Timer_Int_Init(&Timer0,TMRCTR_INTERRUPT_ID,AXI_Timer0_Handler);
  *****************************************************
**/
void AXI_Timer_Int_Init(XTmrCtr *TmrCtrInstPtr,uint16_t IntrId,XTmrCtr_Handler Timer_Handler)
{
    Set_ScuGic_Link(IntrId, 0xA8, HIGH_Level_Sensitive, XTmrCtr_InterruptHandler, TmrCtrInstPtr);
    XTmrCtr_SetHandler(TmrCtrInstPtr, Timer_Handler,TmrCtrInstPtr);
}

/**
  *****************************************************
  * @brief    设置AXI_Timer配置
  * @param    TmrCtrInstPtr    Timer对象指针
  * @param    TmrCtrNum        AXI_Timer计数器:0为计数器0,1为计数器1
  * @param    Mode            Timer模式配置
  * 模式有以下几种:    XTC_CASCADE_MODE_OPTION        启用级联模式,仅适用于TCSRO
  *                    XTC_ENABLE_ALL_OPTION        一次性启用所有定时计数器
  *                 XTC_DOWN_COUNT_OPTION        配置为向下计数(默认为向上计数)
  *                 XTC_CAPTURE_MODE_OPTION        配置为输入捕获模式(默认为比较模式)
  *                 XTC_INT_MODE_OPTION            开定时器中断,向下计数到0或向上计数溢出时触发
  *                 XTC_AUTO_RELOAD_OPTION        开启自动重装载
  *                 XTC_EXT_COMPARE_OPTION        启用外部比较输出信号
  * @param    Reload_Val        装载值,每个CLK它会向上或下计数1,这里的CLK由AXI_TIMER IP核外部供给
  * @usage    //定时器计数器0配置为中断模式,自动重装载且向下计数
  *         AXI_Timer_SetOption(&Timer0,TIMER_CNTR_0, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION,RELOAD_VALUE);
  *****************************************************
**/
void AXI_Timer_SetOption(XTmrCtr *TmrCtrInstPtr,uint8_t TmrCtrNum,uint32_t Mode,uint32_t Reload_Val)
{
    XTmrCtr_SetOptions(TmrCtrInstPtr, TmrCtrNum, Mode);

    //设置重装载值,这个值在计数器启动时被载入
    XTmrCtr_SetResetValue(TmrCtrInstPtr, TmrCtrNum, Reload_Val);

    //启动计数器
    XTmrCtr_Start(TmrCtrInstPtr, TmrCtrNum);
}

void AXI_Timer0_IRQ_Handler(void *CallBackRef, u8 TmrCtrNum)
{
        //Timer0 的计数器 0 中断
        if (TmrCtrNum == TIMER_CNTR_0)
        {
            /* ↓↓↓用户处理↓↓↓ */
            Cnt0_Flag = 1;
            Cnt0++;

            /* ↑↑↑结束处理↑↑↑ */
        }
        //Timer0 的计数器 1 中断
        if(TmrCtrNum == TIMER_CNTR_1)
        {
            /* ↓↓↓用户处理↓↓↓ */
            Cnt1_Flag = 1;
            Cnt1++;

            /* ↑↑↑结束处理↑↑↑ */
        }
}
 

main.c

//系统头文件
#include <stdio.h>
#include <stdint.h>

//Xilinx头文件
#include "xgpiops.h"
#include "xparameters.h"

#include "AXI_TIMER.h"
#include "PS_GPIO.h"
#include "SCU_GIC.h"


volatile uint16_t Cnt0 = 0;
volatile uint16_t Cnt1 = 0;
volatile uint16_t Cnt0_Flag = 0;
volatile uint16_t Cnt1_Flag = 0;
#define INPUT  1
#define OUTPUT 0

#define PL_LED (54+0)
#define PS_LED 7

int main(void)
{
    //初始化通用中断控制器
        ScuGic_Init();
    //定时器初始化
        AXI_Timer_Init(&AXI_Timer0,XPAR_TMRCTR_0_DEVICE_ID);
    //定时器中断初始化
        AXI_Timer_Int_Init(&AXI_Timer0,TMRCTR_INTERRUPT_ID,AXI_Timer0_IRQ_Handler);
    //定时器计数器 0 配置为中断模式,自动重装载且向下计数,定时 1s
        AXI_Timer_SetOption(&AXI_Timer0,TIMER_CNTR_0, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION,RELOAD_VAL_S(1));
    //定时器计数器 1 配置为中断模式,自动重装载且向下计数,定时 0.5s
        AXI_Timer_SetOption(&AXI_Timer0,TIMER_CNTR_1, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION,RELOAD_VAL_MS(500));

    //初始化 PS 端 GPIO
        PS_GPIO_Init();
    //设置 PS_LED(MIO7)方向为输出
        PS_GPIO_SetMode(PS_LED, OUTPUT, 0);
    //设置 PL_LED(T14)方向为输出
        PS_GPIO_SetMode(PL_LED, OUTPUT, 0);
    while(1)
    {
        //判断计数器 0 的计数标志
        if(Cnt0_Flag)
        {
            PS_GPIO_SetPort(PS_LED, (Cnt0%2==0)?1:0);
            Cnt0_Flag = 0; //清除标志

        }
        //判断计数器 1 的计数标志
        if(Cnt1_Flag)
        {
            PS_GPIO_SetPort(PL_LED, (Cnt1%2==0)?1:0);
            Cnt1_Flag = 0; //清除标志
        }

    }
    return 0;
}

每次检测到定时标志,LED翻转

摸鱼结束~

相关文章:

ZYNQ AXI_Timer 中断

REVIEW 关于ZYNQ中断&#xff1a; ZYNQ PS_GPIO中断-CSDN博客 ZYNQ AXI_GPIO_INT-CSDN博客 ZYNQ 定时器中断-CSDN博客 在一些应用场景中&#xff0c;可能需要使用到多个定时器&#xff0c;除了选择使用 PS 侧其他定时器外&#xff0c;也可以使用 PL 侧逻辑定时器。 1. 今日摸鱼…...

UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑

TP_WeaponComponent.h 看看头文件 暴露了attach weapon和fire给蓝图 这两个函数意义一看名字吧&#xff0c;就是捡起来枪的时候执行&#xff0c;一个就是发射子弹的时候执行 #pragma once#include "CoreMinimal.h" #include "Components/SkeletalMeshComponen…...

Python 实现日期计算与日历格式化输出(万年历)

目录 一、引言 二、需求分析 三、实现思路 四、代码实现 五、代码分析 六、测试与验证 七、总结与展望 在日常的编程中&#xff0c;我们经常会遇到与日期相关的问题&#xff0c;比如计算两个日期之间的天数差、确定某个特定日期是星期几以及格式化输出日历等。本文将详细…...

10.28.2024刷华为OD C题型

文章目录 HJ9HJ10HJ11HJ13HJ17 HJ9 HJ10 HJ11 HJ13 HJ17...

映射问题的解决办法(mybaitis)

最初我用的是注解来操控数据库&#xff08;注释掉的部分&#xff09; Mapper public interface ThreadMapper {// Select("SELECT * FROM thread LIMIT #{page}, #{size}")List<Thread> getListByPage(Param("page") int page, Param("size&qu…...

关于机器学习方向学习的一些建议(过来人)

以下是关于机器学习方向学习的一些建议&#xff1a; 一、扎实的数学基础 线性代数 线性代数是机器学习的基石。矩阵运算在数据表示、模型参数计算等方面无处不在。例如&#xff0c;在多元线性回归中&#xff0c;我们用矩阵来表示自变量和因变量之间的关系。像最小二乘法求解回…...

【云原生】云原生后端:网络架构详解

目录 引言一、微服务间的通信1.1 通信方式概览1.2 HTTP/REST1.3 gRPC1.4 消息队列1.5 GraphQL 二、API网关2.1 API网关架构示例2.2 API网关实现示例 三、服务发现3.1 服务发现实现示例3.2 服务发现的优势 四、网络安全4.1 网络安全最佳实践4.2 网络安全架构示例 总结参考资料 引…...

期货资管子系统框架设计JS路径及源代码分享

期货资管子系统框架设计JS路径及源代码分享 随着期货资管子系统前端技术的飞速发展&#xff0c;JavaScript&#xff08;JS&#xff09;及其相关框架已成为构建这类系统的重要工具。本文将详细介绍一个期货资管子系统框架的设计思路&#xff0c;并分享部分JS路径及源代码&#…...

【YOLO 系列】基于YOLO的工业自动化轴承缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】

前言 轴承作为机械设备中的关键部件&#xff0c;其性能直接影响到设备的稳定性和寿命。轴承缺陷的早期检测对于预防设备故障、减少维护成本和提高生产效率至关重要。然而&#xff0c;传统的轴承缺陷检测方法往往依赖于人工检查&#xff0c;这不仅效率低下&#xff0c;而且容易…...

Word中Normal.dotm样式模板文件

Normal.dotm文档 首先将自己电脑中C:\Users\自己电脑用户名\AppData\Roaming\Microsoft\Templates路径下的Normal.dotm文件做备份&#xff0c;在下载本文中的Normal.dotm文件&#xff0c;进行替换&#xff0c;重新打开word即可使用。 字体样式如下&#xff08;可自行修改&#…...

生成式 AI 与向量搜索如何扩大零售运营:巨大潜力尚待挖掘

在竞争日益激烈的零售领域&#xff0c;行业领导者始终在探索革新客户体验和优化运营的新途径&#xff0c;而生成式 AI 和向量搜索在这方面将大有可为。从个性化营销到高效库存管理&#xff0c;二者在零售领域的诸多应用场景中都展现出变革性潜力&#xff0c;已成为保持行业领先…...

WonderWorld:斯坦福与 MIT 联手打造实时交互生成图像,单图秒变 3D 虚拟世界

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…...

2024年【制冷与空调设备安装修理】考试内容及制冷与空调设备安装修理最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 制冷与空调设备安装修理考试内容是安全生产模拟考试一点通总题库中生成的一套制冷与空调设备安装修理最新解析&#xff0c;安全生产模拟考试一点通上制冷与空调设备安装修理作业手机同步练习。2024年【制冷与空调设备…...

PHP const 和 define主要区别

在PHP中&#xff0c;const 和 define 都用于定义常量&#xff0c;但它们有一些关键的区别。以下是它们之间的主要不同点&#xff1a; 定义方式&#xff1a; const&#xff1a;在定义常量时&#xff0c;不需要使用函数形式&#xff0c;而是直接赋值。 const MY_CONSTANT som…...

期中前学习复习总结

期中前终于把每一科的本质给搞明白了。这篇文章也将各学科剖分为两部分。 目录 本质 学法 从问题或条件出发思考问题 从条件出发思考问题 从结论/问题出发思考问题 整理知识与反向押题法 反向押题法 本质 作者是一个理科脑&#xff0c;什么都觉得只要我脑子够新东西我…...

K8S如何基于Istio重新实现微服务

K8S如何基于Istio重新实现微服务 认识 Istio前言Istio 的理念Istio 的架构数据平面控制平面服务与 Istio 的关系 Istio 实践环境准备安装 Helm安装Istio 使用 Istio 代理运行应用情感分析应用的架构使用 Istio 代理运行应用Sidecar 注入Ingress 网关网关资源VirtualService 资源…...

MediaPipe 与 OpenCV 的结合——给心爱的人画一个爱心吧~

目录 概要 实现思路 整体代码实现 效果展示 总结 概要 实时手部检测与绘图应用&#xff0c;通过摄像头捕捉视频流&#xff0c;使用 MediaPipe 识别手部关键点&#xff0c;判断食指是否伸展且其他手指是否弯曲&#xff0c;在满足条件时在画布上绘制圆点&#xff0c;并实时显…...

心觉:成大事,不怕慢,就怕站

Hi&#xff0c;我是心觉&#xff0c;带你用潜意识化解各种焦虑、内耗&#xff0c;建立无敌自信&#xff1b;教你财富精准显化的实操方法&#xff1b;关注我,伴你一路成长&#xff01; 每日一省写作213/1000天 今天咱们聊聊一个不太花哨&#xff0c;但超重要的话题&#xff1a…...

练习LabVIEW第二十三题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第二十三题&#xff1a; 建立一个枚举控件&#xff0c;其内容为张三、李四、王五共三位先生&#xff0c;要求当枚举控件显…...

集成对接案例分享:金蝶云与聚水潭数据对接

金蝶云星空与聚水潭的采购入库单数据集成案例分享 在企业信息化管理中&#xff0c;数据的高效流转和准确对接是提升业务效率的关键。本文将深入探讨如何通过轻易云数据集成平台&#xff0c;实现金蝶云星空中的采购入库单数据无缝对接到聚水潭系统中的其他入库单。 本次集成方…...

高级主题-灾难恢复与业务连续性

第一节&#xff1a;灾难恢复与业务连续性 灾难恢复与业务连续性概述 灾难恢复&#xff08;Disaster Recovery, DR&#xff09;和业务连续性&#xff08;Business Continuity, BC&#xff09;是确保企业能够在遭遇灾难或意外中断后迅速恢复正常运营的关键措施。以下是一些基本…...

R语言实现随机森林分析:从入门到精通

随机森林&#xff08;Random Forest&#xff09;是一种流行的机器学习算法&#xff0c;它通过集成多个决策树来提高预测的准确性和鲁棒性。在R语言中&#xff0c;我们可以使用randomForest包来实现随机森林分析。本文将详细介绍如何使用R语言进行随机森林分析&#xff0c;包括数…...

【vs2022】windows可用的依赖预编译库

ffmpeg 、x264 、x265 等。obs是基于qt6+vs2022+64bit obs的官网传统构建已经不用了obs的s2022构建OBS Deps Build 2024-09-12FFmpeg4.4 库,x64 可用。...

基础设施即代码(IaC):自动化基础设施管理的未来

随着云计算和大规模分布式系统的迅速发展,手动管理和配置基础设施的传统方式已逐渐跟不上快速迭代的步伐。于是,基础设施即代码(Infrastructure as Code,IaC)作为一种创新实践,成为现代运维管理的基础。IaC不仅提高了基础设施的配置速度,还提升了系统的一致性和可重复性…...

C# 创建型设计模式----原型模式

1、值类型与引用类型、深拷贝与浅拷贝。 在了解原型模式前得先对这四个知识点有些了解。我先简单介绍一下这四个知识点。 1.1 值类型与引用类型(C#仅有这两种数据类型) 值类型: 常见的值类型&#xff1a;int、long、short、byte、float、double、bool、char、Struct&#xf…...

Python数据分析NumPy和pandas(十五、pandas 数据加载、存储和文件格式)

大多数时候&#xff0c;我们要处理分析的数据是存储在不同格式的文件中的&#xff0c;有txt、csv、excel、json、xml以及二进制等磁盘文件格式&#xff0c;还有时候是从数据库以及从Web API中交互获取要处理的数据。现在开始学习如何用pandas从以上内容中输入和输出数据。 读取…...

正则表达式以及密码匹配案例手机号码脱敏案例

目录 正则表达式 什么是正则表达式 语法 定义变量 test方法 exec方法 replace方法 match方法 修饰符 元字符 边界符 单词边界 字符串边界 边界符&#xff1a;^ 边界符&#xff1a;$ 量词 * ? {n} {n,} {n,m} 字符类 []匹配字符集合 .匹配除换行符之外的…...

五、数组切片make

数组&切片&make 1. 数组2. 多维数组3. 切片3.1 直接声明新的切片函数构造切片3.3 思考题3.4 切片和数组的异同 4. 切片的复制5. map5.1 遍历map5.2 删除5.3 线程安全的map 6. nil7. new和make 1. 数组 数组是一个由固定长度的特定类型元素组成的序列&#xff0c;一个数…...

SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测

SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测 目录 SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现SSA-CNN-LSTM-MATT麻雀算法优化卷积神经网络-长短期记忆神经网络融合多头注意力机制多特征分类预测&…...

51单片机完全学习——LCD1602液晶显示屏

一、数据手册解读 通过看数据手册我们需要知道&#xff0c;这个屏幕每个引脚的定义以及如何进行发送和接收。通过下面这张图我们就可以知道&#xff0c;这些引脚和我们的编程是有关的&#xff0c;需要注意的是&#xff0c;这里我们在接线的时候&#xff0c;一定要把DB0-DB7接到…...