ZYNQ EMIO MIO

news2024/11/22 17:31:29

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 ;
}

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

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

相关文章

C语言字符函数与字符串函数:编织文字的舞会之梦(上)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 在编程的过程中&#xff0c;我们经常要处理字符以及字符串&#xff0c;为了方便操作这些字符和字符串&#xff0c;C语言标准库中提供…

jmx_prometheus_javaagent-0.19.0.jar+Prometheus+Grafana 监控Tongweb嵌入式(by lqw)

文章目录 1.思路2.部署准备3.应用jar包修改配置和导入tw嵌入式的依赖&#xff08;参考&#xff09;4.Prometheus部署5.Prometheus配置6.安装和配置Grafana 1.思路 Tongweb嵌入式最终是把依赖打入到java应用&#xff08;也就是jar包里&#xff09;&#xff0c;然后启动jar包进行…

TinTin Web3 Bounty 挑战杯开启,Sui 向你发出挑战邀请

以下文章来源于TinTinLand &#xff0c;作者TinTinLand。 2024 年开年最火的是什么&#xff1f; 对 Web3 来说&#xff0c;Bounty 任务应该是普通人获得行业“一杯羹”的重要捷径&#xff01; 通过深入学习各类 Web3 技术&#xff0c;凭借实战锻炼开发创新项目&#xff0c;就…

Linux学习:git补充与调试工具gdb

目录 1. git版本控制器&#xff08;续&#xff09;1.1 git本地仓库结构1.2 git实现版本控制与多人协作的方式1.3 git相关指令&#xff0c;多分支模型与.gitignore文件 2. gdb调试工具2.1 企业项目开发流程简述与调试的必要性2.2 bug的调试思路方法与调式工具的使用 1. git版本控…

ResNet目标检测算法实现交通灯分类

红绿灯识别方案&#xff1a;https://zhuanlan.zhihu.com/p/674791906 目录 一、制作数据集二、ResNet算法三、pytorch转onnx文件四、onnx推理测试五、onnx转mnn 一、制作数据集 1、数据集划分 将红绿灯数据集大文件夹中不同类别的小文件夹中的图片按照9&#xff1a;1进行划分…

小程序绕过 sign 签名

之前看到了一篇文章【小程序绕过sign签名思路】之前在做小程序渗透时也遇到了这种情况&#xff0c;但是直接放弃测试了&#xff0c;发现这种思路后&#xff0c;又遇到了这种情况&#xff0c;记录下过程。 并没有漏洞分享&#xff0c;仅仅是把小程序也分享出来&#xff0c;方便…

Idea 不能创建JDK1.8的spring boot项目

由于https://start.springboot.io/ 不支持JDK1.8&#xff0c;那么我们需要换idea的springboot创建源&#xff0c;需要换成 https://start.aliyun.com&#xff0c;这也是网上大部分教程说的&#xff0c;但是我这边会报这样的错误&#xff1a; Initialization failed for https:…

Go --- Go语言垃圾处理

概念 垃圾回收&#xff08;GC-Garbage Collection&#xff09;暂停程序业务逻辑SWT&#xff08;stop the world&#xff09;程序根节点&#xff1a;程序中被直接或间接引用的对象集合&#xff0c;能通过他们找出所有可以被访问到的对象&#xff0c;所以Go程序的根节点通常包括…

小程序跨端组件库 Mpx-cube-ui 开源:助力高效业务开发与主题定制

Mpx-cube-ui 是一款基于 Mpx 小程序框架的移动端基础组件库&#xff0c;一份源码可以跨端输出所有小程序平台及 Web&#xff0c;同时具备良好的拓展能力和可定制化的能力来帮助你快速构建 Mpx 应用项目。 Mpx-cube-ui 提供了灵活配置的主题定制能力&#xff0c;在组件设计开发阶…

GB28181 —— 5、C++编写GB28181设备端,完成将USB摄像头视频实时转发至GB28181服务并可播放(附源码)

被测试的USB摄像头 效果 源码说明 主要功能模拟设备端&#xff0c;完成注册、注销、心跳等&#xff0c;同时当服务端下发指令播放视频时 设备端实时读取USB摄像头视频并通过OpenCV处理后实时转ps格式后封包rtp进行推送给服务端播放。 源码 /****remark: pes头的封装,里面的具…

ETH Gas 之 Base Fee Priority Fee

前情回顾 ETH网络 之 Gas EIP-1559 EIP-1559 EIP-1559是以太坊改进提案&#xff08;Ethereum Improvement Proposal&#xff09;&#xff0c;旨在改进以太坊的交易费用机制。该提案引入了一种新的交易费用模型&#xff0c;以提高交易费用的可预测性和网络的效率。我们本文各…

敏捷开发最佳实践:学习与改进维度实践案例之会诊式培养敏捷教练

自组织团队能够定期反思并采取针对性行动来提升人效&#xff0c;但2022年的敏捷调研发现&#xff0c;70%的中国企业在学习和改进方面仍停留在团队级。本节实践案例将分享“会诊式培养敏捷教练”的具体做法&#xff0c;突出了敏捷以人为本的学习和改进&#xff0c;强调了通过人员…

​HTTP与HTTPS:网络通信的安全卫士

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

【SAP-ABAP】CO01保存时错误DBSQL_DUPLICATE_KEY_ERROR

找到该表的主键OBJNR&#xff0c;事务代码SM56中查看当前缓冲到该key的号码段&#xff0c;事务代码SNRO修改对象名称OBJNR编号范围状态。 事务代码SM13查看数据更新记录

音频转换器哪个好?5个角度详细测评~

我们常常会用到音频转换器&#xff0c;比如因为平台和设备对某些格式的不兼容&#xff0c;需要进行格式转换&#xff1b;比如有些音频文件可能过大&#xff0c;需要转换为更高效&#xff1b;压缩格式以节省存储空间或加快传输速度&#xff1b;比如调整音频文件的比特率、采样率…

腾讯云轻量应用服务器CPU型号谁知道?

腾讯云轻量应用服务器CPU型号是什么&#xff1f;轻量服务器处理器主频&#xff1f;腾讯云服务器网txyfwq.com账号下的CPU处理器型号为2.5GHz主频的Intel(R) Xeon(R) Gold 6133 CPU和2.4GHz主频Intel(R) Xeon(R) CPU E5-26xx v4&#xff0c;腾讯云轻量应用服务器不支持指定底层物…

AMPQ和rabbitMQ

RabbitMQ 的 Channel、Connection、Queue 和 Exchange 都是按照 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;标准实现的。 AMPQ的网络部分 AMQP没有使用HTTP&#xff0c;使用TCP自己实现了应用层协议。 AMQP实现了自己特有的网络帧格式。 一个Connection…

蓝桥杯 2023 省A 更小的数

主要思路&#xff1a; 输入一个长度为n的字符串&#xff0c;用二维数组dp[i][j]来记录子串[i, j]是否需要反转一次才能满足条件。使用动态规划自底向上地填充dp数组。根据问题的要求&#xff0c;需要考虑字符串的子串中字符的大小关系来判断是否需要反转。最后统计满足条件的子…

航空实时监控

1、从Kafka中读取飞机数据&#xff0c;并进行清洗 此步骤在前面的“使用Spark清洗统计业务数据并保存到数据库中”任务阶段应该已经完成。如果没有完成&#xff0c;请参考源代码自行完成。核心类主要有三个&#xff1a;SparkStreamingApplication类、SparkUtil类和MapManager类…

Cache缓存:HTTP缓存策略解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…