ZYNQ PS_GPIO中断

REVIEW

zynq PS端 GPIO_zynq modem signal-CSDN博客

C基础与SDK调试方法_csdk-CSDN博客

AXI_GPIO_axigpio-CSDN博客

对于GPIO,前面只用了简单读写,今天搞一下中断

1. 今日摸鱼任务

        了解中断原理,实现PS_GPIO中断。

MIIO:

#define PS_KEY 47
#define PS_LED 7
配置PS_KEY的中断,按下按键后,LED闪烁三次
EMIO:
#define PL_KEY (54+1)
#define PL_LED (54+0)
配置PL_KEY的中断,按下按键后,LED闪烁三次

小梅哥视频:

13A_Zynq中断原理与应用-什么是中断_哔哩哔哩_bilibili

13B_Zynq中断处理控制器架构_哔哩哔哩_bilibili

小梅哥课程笔记:

【zynq课程笔记】【裸机】【第13课 】【中断概念与中断控制器】 - ACZ702开发板 - 芯路恒电子技术论坛 - Powered by Discuz!

小梅哥教材:

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

第五章 GPIO中断

//感觉有点云里雾里,就先自己尝试了简单的

2. ZYNQ中断

ZYNQ-7000 系列的系统级中断架构图中,只包含以下三种中断:
软件生成中断(Software Generated Interrupts,SGI)
私有外设中断(Private Peripheral Interrupts,PPI)
共享外设中断(Shared Peripheral Interrupts,SPI)
每种中断都各自包含特定的中断源:
PPI 包括全局定时器 (global timer)、私有看门狗定时器 (private timer) 、私有定时器 (private timer)、 PL 中的 FIQ
SGI通过写入通用中断控制器( Generic Interrupt Controller GIC)中的寄存器生成。
SPI PS PL 中的各种 I/O 和内存控制器生成。
        zynq的 PS是 双核 Cortex-A9 处理器系统,包含一级缓存 L1,二级缓存L2。缓存能够提升 CPU 读写总线数据的性能。但是使用不当,也会造成 CPU 读写数据实时性的下降,甚至因为缓存一致性的问题,把一些已经由其他外设更新但是缓存中还是旧值的数据取用,从而产生错误。
        由于中断的实时性和重要性, 中断控制器的相关寄存器的读写不能因为缓存的存在而被延误,所以 CPU 并不通过 L2 来访问 GIC 中的寄存器,而是通过窥探控制单元( Snoop  Control Unit , SCU )采用私有总线访问 GIC 的寄存器,以此来提升中断 的处理效率。如下图:

共享的外设中断由各种子系统生成,这些子系统包括PS中的I/O外设和PL中的逻辑。

中断控制器的结构框图如下图:

所有中断源都有唯一的中断标识号标识以及自己可配置的优先级和目标CPU列表。

中断处理顺序:

    优先级高(值小)

    同优先级:中断标识号小

注意:触发类型

GPIO 中断与AXI_GPIO中断属于SPI中断。SPI中断的各种中断源所要求的中断触发方式如下表:

GPIO中断号为#52 ,触发类型为高电平。
AXI GPIO PL 逻辑构成, 属于 PL 中断,中断号为 #[91:84] #[68:61] ,触发类型为高电平或上升沿。
该中断在使用时需要在 ZYNQ 核中使能对应中断端口。

3.  GPIO中断寄存器

INT_MASK           显示哪些位当前被屏蔽,哪些位未被屏蔽/启用。
INT_EN                启用/揭示中断信号。
INT_DIS               写入1屏蔽中断信号。
INT_STAT            是否发生了中断事件。写1清除该位的中断状态 / 写0忽略。
INT_TYPE           触发方式:边缘触发 / 电平触发。
INT_POLARITY  低电平 / 高电平(或下降沿 / 上升沿)。
INT_ON_ANY     如果INT_TYPE被设置为边缘触发,那么将在上升和下降边缘启用中断事件。
                           如果将INT_TYPE设置为电平触发,则将忽略此寄存器。

zynq PS端 GPIO_zynq ps gpio-CSDN博客

IDL    中断检测逻辑  用于监控 GPIO 输入信号。
INT_STAT=1 INT_MASK=0,则该中断信号有效。

4. PS_GPIO

PS_GPIO.c

/**
  *****************************************************************************
  *                         PS部分GPIO相关应用库
  *****************************************************************************
  *
  * @File   : PS_GPIO.c
  * @By     : Sun
  * @Version: V1.3
  * @Date   : 2022 / 06 / 01
  * @Shop    : https://xiaomeige.taobao.com/
  *
  *****************************************************************************
**/

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

XGpioPs GpioPs;    //GPIO实例对象


/**
  *****************************************************
  * @brief    初始化PS端MIO和EMIO
  * @usage    PS_GPIO_Init();    //初始化PS端GPIO
  *****************************************************
**/
void PS_GPIO_Init()
{
    XGpioPs_Config *ConfigPtr;
    ConfigPtr = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID);
    XGpioPs_CfgInitialize(&GpioPs, ConfigPtr, ConfigPtr->BaseAddr);
}


/**
  *****************************************************
  * @brief    初始化PS GPIO的中断功能
  * @param    Handler        GPIO中断处理函数
  * @usage    //初始化PS GPIO的中断功能,中断处理函数为PS_GPIO_IRQ_Handler
  *         PS_GPIO_Int_Init((void *)PS_GPIO_IRQ_Handler);
  *****************************************************
**/
void PS_GPIO_Int_Init(XGpioPs_Handler Handler)
{
    //链接到中断控制器
    Set_ScuGic_Link(XPAR_XGPIOPS_0_INTR, 0xA0, HIGH_Level_Sensitive,
            (Xil_InterruptHandler)XGpioPs_IntrHandler, (void *)&GpioPs);

    //为 gpio中断设置处理程序
    XGpioPs_SetCallbackHandler(&GpioPs, (void *)&GpioPs, Handler);
}


/**
  *****************************************************
  * @brief    启用GPIO某Pin的中断功能
  * @param    GPIO_Num    GPIO编号(MIO为0~53,EMIO从54开始)
  * @param    IntcMode    GPIO中断触发模式
  *                     XGPIOPS_IRQ_TYPE_EDGE_RISING    上升沿触发
  *                     XGPIOPS_IRQ_TYPE_EDGE_FALLING    下降沿触发
  *                     XGPIOPS_IRQ_TYPE_EDGE_BOTH        上升或下降沿都触发
  *                     XGPIOPS_IRQ_TYPE_LEVEL_HIGH        高电平触发
  *                     XGPIOPS_IRQ_TYPE_LEVEL_LOW        低电平触发
  * @usage    //设置MIO47为下降沿中断
  *         PS_GPIO_SetInt(47,XGPIOPS_IRQ_TYPE_EDGE_FALLING);
  *****************************************************
**/
void PS_GPIO_SetInt(uint8_t GPIO_Num,uint8_t IntcMode)
{
    //设置引脚中断模式
    XGpioPs_SetIntrTypePin(&GpioPs, GPIO_Num, IntcMode);

    //使能Bank的GPIO Pin中断
    XGpioPs_IntrEnablePin(&GpioPs, GPIO_Num);
}

/**
  *****************************************************
  * @brief    初始化特定GPIO口的模式与状态
  * @param    GPIO_Num    GPIO编号(MIO为0~53,EMIO从54开始)
  * @param    Dir            输入/输出:OUTPUT为输出,INPUT为输入
  * @param    Data        输出电平高低:0为低,1为高(若设置为输入则此处数据无影响)
  * @usage    //设置GPIO46为输出模式,输出为高电平
  *         GPIO_SetMode(46, OUTPUT, 1);
  *****************************************************
**/
void PS_GPIO_SetMode(uint8_t GPIO_Num, uint8_t Dir, uint8_t Data)
{
    if(Dir == 1) {
        XGpioPs_SetDirectionPin(&GpioPs, GPIO_Num, 0);
    } else if(Dir == 0){
        XGpioPs_SetDirectionPin(&GpioPs, GPIO_Num, 1);
        XGpioPs_SetOutputEnablePin(&GpioPs, GPIO_Num, 1);
        XGpioPs_WritePin(&GpioPs, GPIO_Num, Data);
    }
}

/**
  *****************************************************
  * @brief    控制特定GPIO口的输出高/低电平,使用前必须先用GPIO_SetMode设置该GPIO口为"输出"模式
  * @param    GPIO_Num    GPIO编号(MIO为0~53,EMIO从54开始)
  * @param    Data        输出电平高低:0为低,1为高
  * @usage    //控制GPIO46输出高电平
  *         GPIO_SetPort(46, 1);
  *****************************************************
**/
void PS_GPIO_SetPort(uint8_t GPIO_Num, uint8_t Data)
{
    XGpioPs_WritePin(&GpioPs, GPIO_Num, Data);    //输出高/低电平,0为低,1为高
}

/**
  *****************************************************
  * @brief    读取特定GPIO口的输入电平,使用前必须先用GPIO_SetMode设置该GPIO口为"输入"模式
  * @param    GPIO_Num    GPIO编号(MIO为0~53,EMIO从54开始)
  * @return    返回采集的GPIO电平值,0为低,1为高
  * @usage    //采集GPIO46的电平,存放在state
  *         state = GPIO_GetPort(46, state);
  *****************************************************
**/
uint8_t PS_GPIO_GetPort(uint8_t GPIO_Num)
{
    return XGpioPs_ReadPin(&GpioPs, GPIO_Num);        //输出高/低电平,0为低,1为高
}

PS_GPIO.h

#ifndef __PS_GPIO_H__
#define __PS_GPIO_H__

#include "xgpiops.h"


extern XGpioPs GpioPs;

void PS_GPIO_Init();
void PS_GPIO_Int_Init(XGpioPs_Handler Handler);
void PS_GPIO_SetInt(uint8_t GPIO_Num, uint8_t IntcMode);
void PS_GPIO_SetMode(uint8_t GPIO_Num, uint8_t Dri, uint8_t Data);
void PS_GPIO_SetPort(uint8_t GPIO_Num, uint8_t Data);
uint8_t PS_GPIO_GetPort(uint8_t GPIO_Num);

#endif

5. SCU_GIC

SCU_GIC.c

/**
  *****************************************************************************
  *                         通用中断控制器库
  *****************************************************************************
  *
  * @File   : SCU_GIC.c
  * @By     : Sun
  * @Version: V0.5
  * @Date   : 2022 / 05 / 30
  * @Shop    : https://xiaomeige.taobao.com/
  *
  *****************************************************************************
**/
#include "SCU_GIC.h"

XScuGic ScuGic;    //通用中断控制器对象

/**
  *****************************************************
  * @brief    初始化通用中断控制器
  * @usage    ScuGic_Init();    //初始化通用中断控制器
  * @tag    初始化通用中断控制器后,才可链接中断
  *****************************************************
**/
void ScuGic_Init()
{
    XScuGic_Config *IntcConfig;
    IntcConfig = XScuGic_LookupConfig(XPAR_SCUGIC_SINGLE_DEVICE_ID);
    XScuGic_CfgInitialize(&ScuGic, IntcConfig,IntcConfig->CpuBaseAddress);

    Xil_ExceptionInit();
    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
            (Xil_ExceptionHandler)XScuGic_InterruptHandler,&ScuGic);
    Xil_ExceptionEnable();
}

/**
  *****************************************************
  * @brief    将中断链接到通用中断控制器
  * @param    IntrId        中断请求ID
  * @param    Priority    中断优先级,高5位有效,越大优先级越低
  * @param    Trigger        中断触发模式:
  *                             高电平触发 -> HIGH_Level_Sensitive
  *                             上升沿触发 -> Rising_Edge_Sensitive
  * @param    Handler        中断服务函数
  * @param    CallBackRef    回调引用,通常是连接驱动程序的实例指针
  * @usage    //链接XPAR_SCUTIMER_INTR到中断控制器,中断服务函数为ScuTimer_IRQ_Handler
  *         Set_ScuGic_Link(XPAR_SCUTIMER_INTR, 0xA8, HIGH_Level_Sensitive,
  *             ScuTimer_IRQ_Handler, (void *)&ScuTimer);
  *****************************************************
**/
void Set_ScuGic_Link(uint16_t IntrId, uint8_t Priority, uint8_t Trigger,
        Xil_InterruptHandler Handler, void *CallBackRef)
{
    XScuGic_SetPriorityTriggerType(&ScuGic, IntrId, Priority, Trigger);
    XScuGic_Connect(&ScuGic, IntrId,
            (Xil_ExceptionHandler)Handler,CallBackRef);
    XScuGic_Enable(&ScuGic, IntrId);
}
 

SCU_GIC.h

#ifndef ACZ702_LIB_SCU_GIC_H_
#define ACZ702_LIB_SCU_GIC_H_

#include "xscugic.h"

XScuGic ScuGic;    //通用中断控制器
#define    HIGH_Level_Sensitive    0x01    //高电平敏感(1)
#define    Rising_Edge_Sensitive    0x03    //上升沿敏感(0->1)

void ScuGic_Init();
void Set_ScuGic_Link(uint16_t IntrId, uint8_t Priority, uint8_t Trigger,
        Xil_InterruptHandler Handler, void *CallBackRef);

#endif /* ACZ702_LIB_SCU_GIC_H_ */
 

6. MIO中断

6.1 Block Design

只需勾选MIO

6.2 main.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "sleep.h"
#include "xparameters.h"
#include "xgpiops.h"

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

#define INPUT  1
#define OUTPUT 0

#define PS_KEY 47
#define PS_LED 7

void PS_MIO_IRQ_Handler(void *CallBackRef, u32 Bank, u32 Status);

int main(void)
{
    //GIC 通用中断控制器初始化
        ScuGic_Init();
    //初始化 PS 端 GPIO
        PS_GPIO_Init();
    //设置 PS_KEY(MIO47)方向为输入
        PS_GPIO_SetMode(PS_KEY, INPUT, 0);
    //设置 PS_KEY(MIO47)触发方式
        PS_GPIO_SetInt(PS_KEY , XGPIOPS_IRQ_TYPE_LEVEL_LOW);
    //初始化 PS GPIO 中断
        PS_GPIO_Int_Init(PS_MIO_IRQ_Handler);
    //设置 PS_LED(MIO7)方向为输出
        PS_GPIO_SetMode(PS_LED, OUTPUT, 0);
        while(1)
        {

        }
    return 0 ;
}


void PS_MIO_IRQ_Handler(void *CallBackRef, u32 Bank, u32 Status)
{
    uint32_t Int_State;
    uint8_t i = 0 ;
    Int_State = XGpioPs_IntrGetStatusPin(&GpioPs, PS_KEY);
    if(Int_State)
    {
        for(i=0 ; i<3 ; i++)
        {
            PS_GPIO_SetPort(PS_LED, 1);
              usleep(500000);
            PS_GPIO_SetPort(PS_LED, 0);
              usleep(500000);
        }
    }
}

7. EMIO中断

7.1 Block Design

只需勾选EMIO,本次只是用两个引脚

7.2 main.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "sleep.h"
#include "xparameters.h"
#include "xgpiops.h"

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

#define INPUT  1
#define OUTPUT 0

#define PL_KEY (54+1)
#define PL_LED (54+0)

void PS_EMIO_IRQ_Handler(void *CallBackRef, u32 Bank, u32 Status);

int main(void)
{
    //GIC 通用中断控制器初始化
        ScuGic_Init();
    //初始化 PS 端 GPIO
        PS_GPIO_Init();
    //设置 PL_KEY(F20)方向为输入
        PS_GPIO_SetMode(PL_KEY, INPUT, 0);
    //设置 PL_KEY(F20)触发方式
        PS_GPIO_SetInt(PL_KEY , XGPIOPS_IRQ_TYPE_LEVEL_LOW);
    //初始化 PS GPIO 中断
        PS_GPIO_Int_Init(PS_EMIO_IRQ_Handler);
    //设置 PL_LED(T14)方向为输出
        PS_GPIO_SetMode(PL_LED, OUTPUT, 0);
        while(1)
        {

        }
    return 0 ;
}


void PS_EMIO_IRQ_Handler(void *CallBackRef, u32 Bank, u32 Status)
{
    uint32_t Int_State;
    uint8_t i = 0 ;
    Int_State = XGpioPs_IntrGetStatusPin(&GpioPs, PL_KEY);
    if(Int_State)
    {
        for(i=0 ; i<3 ; i++)
        {
            PS_GPIO_SetPort(PL_LED, 1);
              usleep(500000);
            PS_GPIO_SetPort(PL_LED, 0);
              usleep(500000);
        }
    }
}

8. 触发方式

按键电路:

由图可知,对应按键引脚值,在未按下时,都为高电平

因此,不能选择高电平触发

共五种触发类型,经测试,

除高电平触发(硬件电路决定滴),其他四种方式都可以实现摸鱼任务

但是,没有经过按键消抖(这个在PL做过),还是会有误判现象存在

后边再学一下~

PS_GPIO_INT摸鱼结束

下次摸AXI_GPIO_INT

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零售行业的数字化营销转型之路

一方面&#xff0c;市场竞争激烈&#xff0c;电商平台、新兴品牌和跨界对手带来巨大压力。另一方面&#xff0c;消费者需求变化迅速&#xff0c;更加追求个性化、多元化和便捷化的购物体验&#xff0c;同时传统零售企业还面临着高成本压力&#xff0c;如租金、人力和库存等。 然…

Chainlit集成LlamaIndex和Chromadb实现RAG增强生成对话AI应用

前言 本文主要讲解如何使用LlamaIndex和Chromadb向量数据库实现RAG应用&#xff0c;并使用Chainlit快速搭建一个前端对话网页&#xff0c;实现RAG聊天问答增强的应用。文章中还讲解了LlamaIndex 的CallbackManager回调&#xff0c;实现案例是使用TokenCountingHandler&#xf…

Pollard‘s p-1算法

概述 光滑数 (Smooth number)&#xff1a;指可以分解为多个小素数乘积的正整数 当p是N 的因数&#xff0c;并且p−1是光滑数&#xff0c;可以考虑使用Pollards p-1算法来分解N 当p是N的因数&#xff0c;并且p1是光滑数&#xff0c;可以考虑使用Williamss p1算法来分解N 这里…

程序员节-回顾篇

回顾&#xff1a; 时间如白驹过隙&#xff0c;转眼间&#xff0c;我们又走过了一个充满挑战与机遇的年份。回顾过去的一年&#xff0c;心中充满了感慨与收获。 一、个人成长 这一年里&#xff0c;我在各个方面都有了显著的成长。在工作上&#xff0c;我通过不断学习和实践&a…

【小洛的VLOG】Web 服务器高并发压力测试(Reactor模型测试)

目录 引言 工具介绍 环境介绍 测试结果 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 大部分的网络通信都是支持TCP/IP协议栈&#xff0c;为了保证通信的可靠性&#xff0c;客户端和服务端之间需要建立链接。服务端能并发处理多少个链接&#xff0c;平均每秒钟能处理…

国产蓝牙耳机哪个品牌值得买?百元国产蓝牙耳机品牌排行榜

一款优质的蓝牙耳机总能为我们带来更加便捷、舒适的听觉体验&#xff0c;而在众多蓝牙耳机品牌中&#xff0c;国产蓝牙耳机凭借其高性价比、丰富的功能和独特的设计&#xff0c;逐渐赢得了消费者的青睐&#xff0c;那么国产蓝牙耳机哪个品牌值得买&#xff1f;作为一个资深的蓝…

一、Linux 目录文件

一、目录结构 |-/ # 根节&#xff08;cd /&#xff09; |-/bin # 系统命令 |-/boot # 启动目录 |-/dev # 设备文件保存目录 |-/etc # 系统的所有配置文件|-profile # 环境变量配置文件&#xff08;修改后需source /etc/profile使配置文件立即生效&#xff09; |-/home # 普通用…

光储充微电网:策略调度带领能源新未来---安科瑞 吴雅芳

一、光储充微电网概述 光储充微电网是一种高度智能化的电力系统&#xff0c;在新能源领域占据着重要地位。它主要由光伏电站、储能系统、充电桩、微电网控制器等组成。 光伏电站是光储充微电网的核心部分之一&#xff0c;应选择稳定的组件和好的支架。在设计光伏发电系统时&a…

解锁文本数据可视化的无限可能:Wordcloud库全解析

文章目录 **&#x1f31f;解锁文本数据可视化的无限可能&#xff1a;Wordcloud库全解析&#x1f510;**1. **背景介绍**2. **Wordcloud库是什么&#xff1f;**3. **如何安装Wordcloud库&#xff1f;**4. **Wordcloud库的基本函数使用方法**5. **实际应用场景**6. **常见问题及解…

实操 maxkey对接三方文档

实操 maxkey 对接三方文档 概述前置准备&#xff1a;MaxKey 安装与配置&#xff1a;第三方系统准备网络环境 对接三方配置oauth2协议对接导入jar包&#xff08;调接口&#xff09;权限加回调重定向获取token处理业务 api对接三方获取api凭证配置 MaxKey更新代码 概述 最近在搞m…

hhdb数据库介绍

背景 随着互联网的崛起&#xff0c;海量数据的存储、计算、分析需求越来越普遍。在各种计算机应用场景中&#xff0c;传统集中式数据库面临着理论升级和技术升级两大难题。21世纪以来&#xff0c;随着以 Hadoop及其衍生技术为代表的大规模数据处理技术的崛起&#xff0c;数据库…

迁移学习|ResNet18

一、导入库 二、设置随机种子 三、数据增强和数据加载 四、加载预训练模型 五、定义损失函数和优化器 六、学习率调度器 七、训练模型 八、可视化训练过程 九、总结 1. 常见优化器概述 1.1 随机梯度下降&#xff08;SGD: Stochastic Gradient Descent&#xff09; 简介&…

SIP 业务举例之 三方通话:邀请第三方加入的信令流程

目录 1. 3-Way Conference - Third Party Is Added 简介 2. RFC5359 的 3-Way Conference - Third Party Is Added 信令流程 3. 3-Way Conference - Third Party Is Added 总结 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信)…

青少年编程能力等级测评CPA C++(三级)-试卷2

青少年编程能力等级测评CPA C&#xff08;三级&#xff09;-试卷2 一、单项选择题&#xff08;共15题&#xff0c;每题3分&#xff0c;共45分&#xff09; CP3_2_1&#xff0e;在宽度为500米的河道上&#xff0c;修建一个拦河大坝。施工队每天筑坝50米&#xff0c;由于当时条件…

Qt 实战(11)样式表 | 11.2、使用样式表

文章目录 一、使用样式表1、盒子模型2、应用样式表2.1、全局应用2.2、局部应用2.3、通过文件应用 3、使用样式表实现换肤 前言&#xff1a; 在Qt框架中&#xff0c;样式表&#xff08;Style Sheets&#xff09;是一种功能强大的工具&#xff0c;它允许开发者以一种简洁而高效的…

怎么把本地代码上传到阿里云里面

项目需求 将本地项目上传到阿里云&#xff0c;一般有两种情况 1.在本地创建的项目&#xff0c;没有关联过其他的git远程仓库。 2.从其他项目复制的项目代码&#xff0c;但是想要以此项目为基础重新创建一个新的项目。 解决方式 第一种 第一种项目很好解决&#xff0c;就按…

LeetCode题练习与总结:路径交叉--335

一、题目描述 给你一个整数数组 distance 。 从 X-Y 平面上的点 (0,0) 开始&#xff0c;先向北移动 distance[0] 米&#xff0c;然后向西移动 distance[1] 米&#xff0c;向南移动 distance[2] 米&#xff0c;向东移动 distance[3] 米&#xff0c;持续移动。也就是说&#xf…

从安灯系统看汽车零部件工厂的智能制造转型

在当今快速发展的制造业领域&#xff0c;汽车零部件工厂正面临着日益激烈的市场竞争和不断提高的客户需求。为了在竞争中脱颖而出&#xff0c;实现可持续发展&#xff0c;许多汽车零部件工厂纷纷踏上智能制造转型之路。而安灯系统作为一种重要的生产管理工具&#xff0c;在这场…

Nginx可视化管理平台nginxWebUI(1)【保姆级部署方式】

目录 nginxWebUI简介 1.概述&#xff1a; 2.功能 NginxWebUI的部署方式 实验环境&#xff1a; 1.安装JDK环境、nginx和nginx程序 2.启动nginxWebUI 3.使用浏览器登录webUI 访问格式&#xff1a; 登陆成功后我们就来到了它的可视化管理页面 nginxWebUI简介 1.概述&am…

面试总结一

面试总结 1、自我介绍一下自己2.面试11、css常用布局有哪些2、css常用的属性3.js原型链4、开发中遇到的技术难点5、闭包6、ts了解什么呢7.git都用什么命令8、vue怎么打包9.vue启动一个项目需要什么10、vue怎么创建一个项目 2.面试21.vue2和vue3有什么区别2.复杂组件的封装&…