ZYNQ EMIO MIO

1 概述

先来了解GPIO的BANK分布,在UG585文档GPIO一章中可以看到GPIO是有4个BANK,
注意与MIO的BANK区分。
BANK0 控制32个信号,BANK1控制22个信号,总共是MIO的54个引脚,也就是诸如
SPI,I2C,USB,SD 等 PS 端外设接口;
BANK2和BANK3共能控制64个PL端引脚,注意每一组都有三个信号,输入EMIOGPIOI,
输出EMIOGPIOO,输出使能EMIOGPIOTN,类似于三态门,共192个信号。可以连接到PL
端引脚,通过PS控制信号。
在这里插入图片描述

下图为GPIO的控制框图,实验中会用到输出部分的寄存器,数据寄存器DATA,数据掩
码寄存器MASK_DATA_LSW,MASK_DATA_MSW,方向控制寄存器DIRM,输出使能控制
器OEN。
在这里插入图片描述
在这里插入图片描述

2 MIO 按键中断

前面介绍了MIO作为输出控制LED灯,这里讲一下利用MIO作为按键输入控制LED灯。

  1. 通过UG585文档看下GPIO的结构图,中断的寄存器:
    INT_MASK:中断掩码
    INT_DIS: 中断关闭
    INT_EN: 中断使能
    INT_TYPE: 中断类型,设置电平敏感还是边沿敏感
    INT_POLARITY: 中断极性,设置低电平或下降沿还是高电平或上升沿
    INT_ANY: 边沿触发方式,需要INT_TYPE设置为边沿敏感才能使用
    设置中断产生方式时需要INT_TYPE、INT_POLARITY、INT_ANY配合使用。具体寄存器含义请参
    考UG585 Register Details 部分。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/

/*
 * helloworld.c: simple test application
 *
 * This application configures UART 16550 to baud rate 9600.
 * PS7 UART (Zynq) is not initialized by this application, since
 * bootrom/bsp configures it to baud rate 115200
 *
 * ------------------------------------------------
 * | UART TYPE   BAUD RATE                        |
 * ------------------------------------------------
 *   uartns550   9600
 *   uartlite    Configurable only in HW design
 *   ps7_uart    115200 (configured by bootrom/bsp)
 */

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "sleep.h"
#include "xgpiops.h"

#define GPIO_DEVICE_ID		XPAR_XGPIOPS_0_DEVICE_ID

/*
 * The following are declared globally so they are zeroed and can be
 * easily accessible from a debugger.
 */
XGpioPs Gpio;	/* The driver instance for GPIO Device. */


int main()
{
    init_platform();
    int Status;
    XGpioPs_Config *ConfigPtr;

	/* Initialize the GPIO driver. */
	ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);

	Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
			ConfigPtr->BaseAddr);
	if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	}

	/*
		 * Set the direction for the pin to be output and
		 * Enable the Output enable for the LED Pin.
		 */
		XGpioPs_SetDirectionPin(&Gpio, 54, 1);
		XGpioPs_SetDirectionPin(&Gpio, 55, 1);
		XGpioPs_SetDirectionPin(&Gpio, 56, 1);
		XGpioPs_SetDirectionPin(&Gpio, 57, 1);

		XGpioPs_SetDirectionPin(&Gpio, 58, 1);
		XGpioPs_SetDirectionPin(&Gpio, 59, 1);
		XGpioPs_SetDirectionPin(&Gpio, 60, 1);
		XGpioPs_SetDirectionPin(&Gpio, 61, 1);

		XGpioPs_SetDirectionPin(&Gpio, 62, 1);
		XGpioPs_SetDirectionPin(&Gpio, 63, 1);

		XGpioPs_SetOutputEnablePin(&Gpio, 54, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 55, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 56, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 57, 1);

		XGpioPs_SetOutputEnablePin(&Gpio, 58, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 59, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 60, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 61, 1);

		XGpioPs_SetOutputEnablePin(&Gpio, 62, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 63, 1);

    while(1){
		/* Set the GPIO output to be low. */
		XGpioPs_WritePin(&Gpio, 54, 0x0);
		XGpioPs_WritePin(&Gpio, 55, 0x0);
		XGpioPs_WritePin(&Gpio, 56, 0x0);
		XGpioPs_WritePin(&Gpio, 57, 0x0);

		XGpioPs_WritePin(&Gpio, 58, 0x0);
		XGpioPs_WritePin(&Gpio, 59, 0x0);
		XGpioPs_WritePin(&Gpio, 60, 0x0);
		XGpioPs_WritePin(&Gpio, 61, 0x0);

		XGpioPs_WritePin(&Gpio, 62, 0x0);
		XGpioPs_WritePin(&Gpio, 63, 0x0);
        sleep(1);
        print("Hello World\n\r");
	    /* Set the GPIO output to be high. */
	    XGpioPs_WritePin(&Gpio, 54, 0x1);
	    XGpioPs_WritePin(&Gpio, 55, 0x1);
	    XGpioPs_WritePin(&Gpio, 56, 0x1);
	    XGpioPs_WritePin(&Gpio, 57, 0x1);

	    XGpioPs_WritePin(&Gpio, 58, 0x1);
	    XGpioPs_WritePin(&Gpio, 59, 0x1);
	    XGpioPs_WritePin(&Gpio, 60, 0x1);
	    XGpioPs_WritePin(&Gpio, 61, 0x1);

	    XGpioPs_WritePin(&Gpio, 62, 0x1);
	    XGpioPs_WritePin(&Gpio, 63, 0x1);
        sleep(1);
    }
    cleanup_platform();
    return 0;
}

带按键中断的代码

/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/

/*
 * helloworld.c: simple test application
 *
 * This application configures UART 16550 to baud rate 9600.
 * PS7 UART (Zynq) is not initialized by this application, since
 * bootrom/bsp configures it to baud rate 115200
 *
 * ------------------------------------------------
 * | UART TYPE   BAUD RATE                        |
 * ------------------------------------------------
 *   uartns550   9600
 *   uartlite    Configurable only in HW design
 *   ps7_uart    115200 (configured by bootrom/bsp)
 */

#include <stdio.h>
#include "platform.h"
#include "xscugic.h"
#include "xil_printf.h"
#include "sleep.h"
#include "xgpiops.h"

#define GPIO_DEVICE_ID		XPAR_XGPIOPS_0_DEVICE_ID
#define INTC_DEVICE_ID	    XPAR_SCUGIC_SINGLE_DEVICE_ID
#define KEY_INTR_ID         XPAR_XGPIOPS_0_INTR

#define EMIO_LD0  58
#define EMIO_LD1  59
#define EMIO_LD2  60
#define EMIO_LD3  61

/*
 * The following are declared globally so they are zeroed and can be
 * easily accessible from a debugger.
 */
XGpioPs Gpio;	/* The driver instance for GPIO Device. */
int key_flag ;
XScuGic INTCInst;

int IntrInitFuntion(XScuGic *InstancePtr, u16 DeviceId, XGpioPs *GpioInstancePtr);
void GpioHandler(void *CallbackRef);

int main()
{
    init_platform();
    int Status;
    XGpioPs_Config *ConfigPtr;

	int key_val  = 0 ;

	key_flag = 0 ;

	/* Initialize the GPIO driver. */
	ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);

	Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
			ConfigPtr->BaseAddr);
	if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	}

	/*
		 * Set the direction for the pin to be output and
		 * Enable the Output enable for the LED Pin.
		 */
		XGpioPs_SetDirectionPin(&Gpio, 54, 1);
		XGpioPs_SetDirectionPin(&Gpio, 55, 1);
		XGpioPs_SetDirectionPin(&Gpio, 56, 1);
		XGpioPs_SetDirectionPin(&Gpio, 57, 1);

		XGpioPs_SetDirectionPin(&Gpio, 58, 1);
		XGpioPs_SetDirectionPin(&Gpio, 59, 1);
		XGpioPs_SetDirectionPin(&Gpio, 60, 1);
		XGpioPs_SetDirectionPin(&Gpio, 61, 1);

		XGpioPs_SetDirectionPin(&Gpio, 62, 1);
		XGpioPs_SetDirectionPin(&Gpio, 63, 1);

		XGpioPs_SetOutputEnablePin(&Gpio, 54, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 55, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 56, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 57, 1);

		XGpioPs_SetOutputEnablePin(&Gpio, 58, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 59, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 60, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 61, 1);

		XGpioPs_SetOutputEnablePin(&Gpio, 62, 1);
		XGpioPs_SetOutputEnablePin(&Gpio, 63, 1);


		//KEY
		/*
		 * Set the direction for the pin to be input.
		 * Set interrupt type as rising edge and enable gpio interrupt
		 */
		XGpioPs_SetDirectionPin(&Gpio, 64, 0);
		XGpioPs_SetIntrTypePin(&Gpio, 64, XGPIOPS_IRQ_TYPE_EDGE_RISING) ;
		XGpioPs_IntrEnablePin(&Gpio, 64) ;

		XGpioPs_SetDirectionPin(&Gpio, 65, 0);
		XGpioPs_SetDirectionPin(&Gpio, 66, 0);
		XGpioPs_SetDirectionPin(&Gpio, 67, 0);


		//SW
		XGpioPs_SetDirectionPin(&Gpio, 68, 0);
		XGpioPs_SetDirectionPin(&Gpio, 69, 0);

		/*
			 * sets up the interrupt system
			 */
	  Status = IntrInitFuntion(&INTCInst, 64, &Gpio) ;
			if (Status != XST_SUCCESS)
				return XST_FAILURE ;





    while(1){
		/* Set the GPIO output to be low. */
		XGpioPs_WritePin(&Gpio, 54, 0x0);
		XGpioPs_WritePin(&Gpio, 55, 0x0);
		XGpioPs_WritePin(&Gpio, 56, 0x0);
		XGpioPs_WritePin(&Gpio, 57, 0x0);

		XGpioPs_WritePin(&Gpio, 58, 0x0);
		XGpioPs_WritePin(&Gpio, 59, 0x0);

		XGpioPs_WritePin(&Gpio, 60, XGpioPs_ReadPin(&Gpio,68));
		XGpioPs_WritePin(&Gpio, 61, XGpioPs_ReadPin(&Gpio,69));

		//XGpioPs_WritePin(&Gpio, 62, 0x0);
		XGpioPs_WritePin(&Gpio, 63, 0x0);

		if (key_flag)
		{
			XGpioPs_WritePin(&Gpio, 62, key_val) ;
			key_val = ~key_val ;
			key_flag = 0 ;
		}
        sleep(1);
        print("Hello World\n\r");
	    /* Set the GPIO output to be high. */
	    XGpioPs_WritePin(&Gpio, 54, 0x1);
	    XGpioPs_WritePin(&Gpio, 55, 0x1);
	    XGpioPs_WritePin(&Gpio, 56, 0x1);
	    XGpioPs_WritePin(&Gpio, 57, 0x1);

	    XGpioPs_WritePin(&Gpio, 58, 0x1);
	    XGpioPs_WritePin(&Gpio, 59, 0x1);
	    //XGpioPs_WritePin(&Gpio, 60, 0x1);
	    //XGpioPs_WritePin(&Gpio, 61, 0x1);

	    //XGpioPs_WritePin(&Gpio, 62, 0x1);
	    XGpioPs_WritePin(&Gpio, 63, 0x1);
        sleep(1);
    }
    cleanup_platform();
    return 0;
}


int IntrInitFuntion(XScuGic *InstancePtr, u16 DeviceId, XGpioPs *GpioInstancePtr)
{
	XScuGic_Config *IntcConfig;
	int Status ;
	/*
	 * Initialize the interrupt controller driver so that it is ready to
	 * use.
	 */
	IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);

	Status = XScuGic_CfgInitialize(InstancePtr, IntcConfig, IntcConfig->CpuBaseAddress) ;
	if (Status != XST_SUCCESS)
		return XST_FAILURE ;

	/*
	 * set priority and trigger type
	 */
	XScuGic_SetPriorityTriggerType(InstancePtr, KEY_INTR_ID,
			0xA0, 0x3);
	/*
	 * Connect the device driver handler that will be called when an
	 * interrupt for the device occurs, the handler defined above performs
	 * the specific interrupt processing for the device.
	 */
	Status = XScuGic_Connect(InstancePtr, KEY_INTR_ID,
			(Xil_ExceptionHandler)GpioHandler,
			(void *)GpioInstancePtr) ;
	if (Status != XST_SUCCESS)
		return XST_FAILURE ;

	/*
	 * Enable the interrupt for the device.
	 */
	XScuGic_Enable(InstancePtr, KEY_INTR_ID) ;

	Xil_ExceptionInit();

	Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
			(Xil_ExceptionHandler)XScuGic_InterruptHandler,
			InstancePtr);
	Xil_ExceptionEnable();

	return XST_SUCCESS ;

}


void GpioHandler(void *CallbackRef)
{
	XGpioPs *GpioInstancePtr = (XGpioPs *)CallbackRef ;
	int Int_val ;

	Int_val = XGpioPs_IntrGetStatusPin(GpioInstancePtr, 64) ;
	/*
	 * Clear interrupt.
	 */
	XGpioPs_IntrClearPin(GpioInstancePtr, 64) ;
	if (Int_val)
		key_flag = 1 ;
}

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

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

相关文章

【二进制求公约数】【数学】【数论】2543. 判断一个点是否可以到达

本文涉及知识点 二进制求公约数 LeetCode2543. 判断一个点是否可以到达 给你一个无穷大的网格图。一开始你在 (1, 1) &#xff0c;你需要通过有限步移动到达点 (targetX, targetY) 。 每一步 &#xff0c;你可以从点 (x, y) 移动到以下点之一&#xff1a; (x, y - x) (x - y…

基于python+vue灾害应急救援平台flask-django-php-nodejs

灾害应急救援平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&#xff0c;…

(二)RabbitMQ实战——rabbitmq高可用集群搭建

前言 本节内容是关于rabbitmq高可用集群的部署搭建&#xff0c;使用的是centos7系统&#xff0c;我们准备三台服务器作为rabbitmq的高可用服务器&#xff0c;rabbitmq集群本身不是天然支持高可用的&#xff0c;我们通过配置rabbitmq服务器的镜像队列&#xff0c;以确保消息可以…

突然发现!原来微信批量自动加好友这么简单!

你知道如何更好地管理和利用微信资源&#xff0c;实现客户拓展和沟通吗&#xff1f;下面就教大家一招&#xff0c;帮助大家实现统一管理多个微信号以及批量自动加好友。 想要统一管理多个微信号&#xff0c;不妨试试微信管理系统&#xff0c;不仅可以多个微信号同时登录&#…

无插件网页视频播放器,支持图像绘制(包含方格子、方框等),支持音视频播放、支持录像截图,提供源码下载

前言 本播放器内部采用jessibuca插件接口&#xff0c;支持录像、截图、音视频播放等功能。播放器播放基于ws流&#xff0c;图像绘制操作&#xff1a;1&#xff09;支持绘制方格子&#xff0c;用于监控移动检测画框&#xff1b;2&#xff09;支持绘制不透明方框&#xff0c;用于…

如何进行设备的非对称性能测试

非对称性能测试介绍 RFC2544是RFC组织提出的用于评测网络互联设备&#xff08;防火墙、IDS、Switch等&#xff09;的国际标准。主要是对RFC1242中定义的性能评测参数的具体测试方法、结果的提交形式作了较详细的规定。标准中定义了4个重要的参数&#xff1a;吞吐量&#xff08…

【No.12】蓝桥杯可撤销并查集|查找|合并|撤销(C++)

前置知识 蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C)-CSDN博客 可撤销并查集 关键注意 可撤销并查集的撤销功能如何实现可撤销并查集能不能用路径压缩 可撤销并查集(Reversible Union-Find)是一种扩展了标准并查集(Union-Find)数据结构的数据结构&#xff0c;它允…

Python螺旋折线蓝桥杯(来源lanqiao.cn 题目176) 时间超限

题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点(X, Y)&#xff0c;我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。 例如dis(0, 1)3, dis(-2, -1)9 给出整点坐标(X, Y)&#xff0c;你能计算出dis(X, Y)吗&#xff1f; 输入格式 …

【Unity】层(Layer)详解

1.什么是Layer? 我们在做游戏开发的时候&#xff0c;尤其是场景比较复杂的时候&#xff0c;我们就需要使用Layer来分类。 比如&#xff1a; 排除不被灯光照亮的Layer 射线检测特定的 Layer 摄像机只能看到某些 Layer 对象之间的碰撞检测 Layer … 2.添加Layer ①在Inspecto…

GZ083 产品艺术设计赛题第十

全国职业院校技能大赛 产品艺术设计赛项赛题十 赛项名称 产品艺术设计 英语名称 Product Art Design 赛项编号 GZ083 归属产业 数字产业 任务名称 “绣羽鸣春”鸟形象主题文具收纳袋设计 赛项组别 中职组 高职组 □学生组 □教师组 □师生联队试点赛项 R学生组 …

Echarts地图之——如何给地图添加背景图片

上期我们已经给地图添加了一个阴影3d的效果&#xff0c;但是背景纯色的感觉还是不怎么好看&#xff0c;希望能给地图加个背景图。 一般来说给地图加背景图的情况较少&#xff0c;加个渐变色或者根据数据的情况给某些省份设置不一样的背景色&#xff0c;这样的做法是比较多的。…

C++关键字:const

文章目录 一、const的四大作用1.修饰 变量、数组2.修饰 函数的形参、修饰 引用 (最常用&#xff09;3.修饰 指针&#xff1a;常量指针、指针常量 、只读指针4.修饰 类的成员函数、修饰 类的对象 一、const的四大作用 1.修饰 变量、数组 1.const修饰变量&#xff1a; 被const修…

MySQL 如何修改密码

** MySQL 如何修改 root 密码 ** 一、如果 mysql 未设置 root 初始密码&#xff0c;可直接登录&#xff0c;修改密码。 mysql -u root -p --- 连接权限数据库 mysql> use mysql; --- 低版本 mysql 5.x mysql> update user set passwordpassword(123) where userro…

Type-C一拖多智能快充线方案

一拖二快充线PD芯片&#xff1a;技术革新与充电效率的提升 在移动设备日益普及的今天&#xff0c;充电技术的革新显得尤为重要。一拖二快充线PD芯片作为充电技术领域的一项创新成果&#xff0c;不仅提高了充电效率&#xff0c;还满足了用户多设备同时充电的需求。本文将深入探…

Python 三维可视化库之visualpython使用详解

概要 在科学计算和数据可视化领域,交互式三维可视化是一种强大的工具,可以帮助研究人员直观地探索数据和模拟结果。Python 的 visualpython 库就是这样一款强大的工具,它提供了丰富的功能和易用的接口,可以让用户轻松创建交互式的三维场景,展示复杂的科学计算结果。本文将…

springboot项目yml文件中${}的使用

作用 项目启动时可以灵活的通过修改环境变量来替换配置中的值&#xff0c;如果没有传该环境变量时&#xff0c;就是用默认值&#xff1b; 格式&#xff1a;${自定义参数名:默认值} 代码举例&#xff0c;已开启应用的端口号为例&#xff1a; server: port: ${SERVER_PORT:9…

Python代码实现Excel表格转HTML文件

Excel工作簿是常用的表格格式&#xff0c;广泛用于组织、分析及展示数据。Excel文件通常需要专门的文档阅览器进行查看。如果我们想要以更兼容的方式展示Excel表格&#xff0c;可以将其转换为HTML格式&#xff0c;使其能够在各种浏览器中直接进行查看。同时&#xff0c;将Excel…

[VulnHub靶机渗透] Kioptrix1.2

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

腾讯在GDC 2024展示GiiNEX AI游戏引擎现已投入《元梦之星》中开发使用,展示强大AIGC能力

在近日举行的GDC 2024游戏开发者大会上&#xff0c;腾讯揭开了其AI Lab团队精心打造的GiiNEX AI游戏引擎的神秘面纱。这款引擎依托先进的生成式AI和决策AI技术&#xff0c;为游戏行业带来了革命性的变革。 相关阅读&#xff1a;腾讯游戏出品&#xff01;腾讯研效AIGC&#xff…

今天聊聊Docker

在数字化时代&#xff0c;软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术&#xff0c;正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景&#xff0c;帮…