AD9371 官方例程裸机SW 和 HDL配置概述(一)

news2024/11/28 10:49:30

AD9371 系列快速入口

AD9371+ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发

ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射

AD9371 官方例程 时钟间的关系与生成 : AD9371 官方例程HDL详解之JESD204B TX侧时钟生成(一)

JESD204B相关IP端口信号 : AD9371 官方例程HDL JESD204B相关IP端口信号

裸机程序配置 AD9528、AD9371、FPGA IP 和主函数梳理: AD9371 官方例程裸机SW 和 HDL配置概述(二)

参考:
AD9371/AD9375 No-OS Setup

文章目录

  • 前言
  • 一、myk_ad9528init
  • 二、myk.c


前言

SDK或者vitis 裸机程序需要配置 AD9528、AD9371、FPGA相关IP等,根据自己项目需求,可以通过 MATLAB Profile GeneratorTransceiver Evaluation Software 生成所需的 myk.c, myk.h and myk_ad9528init.c 文件来替换

一、myk_ad9528init

AD9528 初始化文件
在这里插入图片描述

SPI 设置,通过SPI配置AD9528参数

1, //chip select Index ,AD9371 是 2,用于SPI 片选 spi_csn,ZYNQ只使用了 SPI0来配置9528和9371

static spiSettings_t clockSpiSettings = {
	1, //chip select Index
	0, //Write bit polarity
	1, //16bit instruction word
	1, //MSB first
	0, //Clock phase
	0, //Clock polarity
	0,//uint8_t enSpiStreaming;
	1,//uint8_t autoIncAddrUp;
	1 //uint8_t fourWireMode;
};

PLL1 相关配置

30720000,AD9258 PLL1 配置,refA 的频率

122880000,vcxo 频率,ADRV9371 板载的 122.88M

ad9528pll1Settings_t clockPll1Settings = {
	30720000,
	1,
	3,
	0,
	1,
	0,
	122880000,
	2,
	4
};

PLL2 相关配置

3,PLL2的M1,可选 3,4,5
PLL2的N2,应该为 10 ,这样 122.88M x 3 x 10 = 3.6864G ,满足PLL2的VCO工作频率 3.450 GHz 到 4.025 GHz
但没关系 ,主函数中的函数 AD9528_initDeviceDataStruct(clockAD9528_device,vcxo_Frequency,refA_Frequency,outFrequency[1])
会重新计算 PLL1 、 PLL2 和 SYSREF 的各个参数,得到 pll2Settings->n2Divider = 10

ad9528pll2Settings_t clockPll2Settings = {
	3,
	30
};

53237,00 1111 1111 0101,0 使能对应的OUT输出,53237 即 使能 OUT 1、3(SYSREF)、12(SYSREF)、13
{0,0,0,2,0,0,0,0,0,0,0,0,2,0}, 9528 OUT输出信号源 选择 outSource[3] = SYSREF;outSource[12] = SYSREF;
0,选择PLL2 经过 分频器 CHANNEL_DIV 产生信号
2,选择SYSREF generation 电路产生的 SYSREF 信号输出
最后一行是AD9528产生的 14路 输出信号频率,对于 ADRV9371 来说,使用了 OUT 1、3(SYSREF)、12(SYSREF)、13
outFrequency_Hz[1] 一定要设置成想得到的频率,以在 AD9528_initDeviceDataStruct 中使用,来计算各种参数

ad9528outputSettings_t clockOutputSettings = {
	53237,
	{0,0,0,2,0,0,0,0,0,0,0,0,2,0},
	{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	{10,10,10,10,10,10,10,10,10,10,10,10,10,10},
	{122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000, 122880000}
};

0,SPI,SYSREF requested 通过SPI请求 SYSREF , 1 通过 引脚
2,SYSREF 生成模式 ,2 内部产生,即 Mode 3 Internal
0,sysrefPatternMode_t,SYSREF 生成模式, N-shot = 0, CONTINUOUS = 1, PRBS = 2, STOP = 3
0,sysrefNshotMode_t ,SYSREF 输出脉冲数, ONE_PULSE = 0, TWO_PULSES = 2, FOUR_PULSES = 3
512, 16-bit K 分频 ,0 到 65535, 有一个固定 2分频,即最终分频 2 x k,如输入信号122.88M,SYSREF = 122.88M/(2 x 512)= 0.12 MHz ,得到SYSREF 频率为 120000, OUT 3 和 12 输出 0.12M 的 SYSREF 信号

ad9528sysrefSettings_t clockSysrefSettings = {
	0,
	2,
	0,
	0,
	0,
	0,
	512
};

myk_ad9528init文件 VCXO、REFA、outFrequency_Hz[1] 一定要设置对, PLL1、 PLL2、 SYSREF、Output 参数可以通过函数AD9528_initDeviceDataStruct 得到

二、myk.c

AD9371 初始化
在这里插入图片描述
AD9371内 TX 滤波器具体系数

static int16_t txFirCoefs[]

txFir 滤波器具体配置
6,滤波器增益
32, 使用多少抽头系数

static mykonosFir_t txFir = {
	6,              /* Filter gain in dB*/
	32,             /* Number of coefficients in the FIR filter*/
	&txFirCoefs[0]  /* A pointer to an array of filter coefficients*/
};

rx、obsrx、sniffer 同上
在这里插入图片描述
AD9371 RX 信号组帧配置,obsRxFramer 类似
2T2R,4个转换器,多帧有32个帧,解扰,使用外部 SYSREF 信号,0x03, 使用最低两个lane传输数据,
0 ,bitRepeat mode,RX 和 RX_OS(嗅探) 各自使用一个组帧器,采样率可以不一样,使用 Bit repeat 模式做到
0 ,/* Selects SYNCb input source,0 使用SYNCINB0(连到RX) , 1 使用SYNCINB1(连到OBSRX)

static mykonosJesd204bFramerConfig_t rxFramer = {
	0,              /* JESD204B Configuration Bank ID -extension to Device ID (Valid 0..15)*/
	0,              /* JESD204B Configuration Device ID - link identification number. (Valid 0..255)*/
	0,              /* JESD204B Configuration starting Lane ID.  If more than one lane used, each lane will increment from the Lane0 ID. (Valid 0..31)*/
	4,              /* number of ADCs (0, 2, or 4) - 2 ADCs per receive chain*/
	32,             /* number of frames in a multiframe (default=32), F*K must be a multiple of 4. (F=2*M/numberOfLanes)*/
	1,              /* scrambling off if framerScramble= 0, if framerScramble>0 scramble is enabled.*/
	1,              /* 0=use internal SYSREF, 1= use external SYSREF*/
	0x03,           /* serializerLanesEnabled - bit per lane, [0] = Lane0 enabled, [1] = Lane1 enabled*/
	0xE4,           /* serializerLaneCrossbar*/
	22,             /* serializerAmplitude - default 22 (valid (0-31)*/
	4,              /* preEmphasis - < default 4 (valid 0 - 7)*/
	0,              /* invertLanePolarity - default 0 ([0] will invert lane [0], bit1 will invert lane1)*/
	0,              /* lmfcOffset - LMFC_Offset offset value for deterministic latency setting*/
	0,              /* Flag for determining if SYSREF on relink should be set. Where, if > 0 = set, 0 = not set*/
	0,              /* Flag for determining if auto channel select for the xbar should be set. Where, if > 0 = set, '0' = not set*/
	0,              /* Selects SYNCb input source. Where, 0 = use RXSYNCB for this framer, 1 = use OBSRX_SYNCB for this framer*/
	0,              /* Flag for determining if CMOS mode for RX Sync signal is used. Where, if > 0 = CMOS, '0' = LVDS*/
	0,              /* Selects framer bit repeat or oversampling mode for lane rate matching. Where, 0 = bitRepeat mode (changes effective lanerate), 1 = overSample (maintains same lane rate between ObsRx framer and Rx framer and oversamples the ADC samples)*/
	0               /* Flag for determining if API will calculate the appropriate settings for framer lane outputs to physical lanes. Where, if '0' = API will set automatic lane crossbar, '1' = set to manual mode and the value in serializerLaneCrossbar will be used*/
};

AD9371 TX 信号解帧配置
2T2R,4个转换器,多帧有32个帧,加扰,使用外部 SYSREF 信号,0x0F, 使用全部 4 个lane传输数据,
0, /* LMFC_Offset offset,0…31,通过 LMFC 偏移调整确定性延迟

static mykonosJesd204bDeframerConfig_t deframer = {
	0,              /* bankId extension to Device ID (Valid 0..15)*/
	0,              /* deviceId  link identification number. (Valid 0..255)*/
	0,              /* lane0Id Lane0 ID. (Valid 0..31)*/
	4,              /* M  number of DACss (0, 2, or 4) - 2 DACs per transmit chain */
	32,             /* K  #frames in a multiframe (default=32), F*K=multiple of 4. (F=2*M/numberOfLanes)*/
	1,              /* scramble  scrambling off if scramble= 0.*/
	1,              /* External SYSREF select. 0 = use internal SYSREF, 1 = external SYSREF*/
	0x0F,           /* Deserializer lane select bit field. Where, [0] = Lane0 enabled, [1] = Lane1 enabled, etc */
	0xE4,           /* Lane crossbar to map physical lanes to deframer lane inputs [1:0] = Deframer Input 0 Lane section, [3:2] = Deframer Input 1 lane select, etc */
	1,              /* Equalizer setting. Applied to all deserializer lanes. Range is 0..4*/
	0,              /* PN inversion per each lane.  bit[0] = 1 Invert PN of Lane 0, bit[1] = Invert PN of Lane 1, etc).*/
	0,              /* LMFC_Offset offset value to adjust deterministic latency. Range is 0..31*/
	0,              /* Flag for determining if SYSREF on relink should be set. Where, if > 0 = set, '0' = not set*/
	0,              /* Flag for determining if auto channel select for the xbar should be set. Where, if > 0 = set, '0' = not set*/
	0,              /* Flag for determining if CMOS mode for TX Sync signal is used. Where, if > 0 = CMOS, '0' = LVDS*/
	0               /* Flag for determining if API will calculate the appropriate settings for deframer lane in to physical lanes. Where, if '0' = API will set automatic lane crossbar, '1' = set to manual mode and the value in deserializerLaneCrossbar will be used*/
};

RX 增益初始配置,orxGainControl 和 snifferGainControl 类似
MGC ,手动增益控制 ,AGC 自动增益控制
RSSI ,Rx1 RSSI 和 Rx2 RSSI

static mykonosRxGainControl_t rxGainControl = {
	MGC,            /* Current Rx gain control mode setting*/
	255,            /* Rx1 Gain Index, can be used in different ways for manual and AGC gain control*/
	255,            /* Rx2 Gain Index, can be used in different ways for manual and AGC gain control*/
	255,            /* Max gain index for the currently loaded Rx1 Gain table*/
	195,            /* Min gain index for the currently loaded Rx1 Gain table*/
	255,            /* Max gain index for the currently loaded Rx2 Gain table*/
	195,            /* Min gain index for the currently loaded Rx2 Gain table*/
	0,              /* Stores Rx1 RSSI value read back from the Mykonos*/
	0               /* Stores Rx2 RSSI value read back from the Mykonos*/
};

RX 自动增益 Peak threshold 模式参数配置 ,obsRxPeakAgc 类似

static mykonosPeakDetAgcCfg_t rxPeakAgc = {
	0x26,	/* apdHighThresh: */
	0x16,	/* apdLowThresh */
	0xB5,	/* hb2HighThresh */
	0x72,	/* hb2LowThresh */
	0x40,	/* hb2VeryLowThresh */
	0x06,	/* apdHighThreshExceededCnt */
	0x04,	/* apdLowThreshExceededCnt */
	0x06,	/* hb2HighThreshExceededCnt */
	0x04,	/* hb2LowThreshExceededCnt */
	0x04,	/* hb2VeryLowThreshExceededCnt */
	0x4,	/* apdHighGainStepAttack */
	0x2,	/* apdLowGainStepRecovery */
	0x4,	/* hb2HighGainStepAttack */
	0x2,	/* hb2LowGainStepRecovery */
	0x4,	/* hb2VeryLowGainStepRecovery */
	0x1,	/* apdFastAttack */
	0x1,	/* hb2FastAttack */
	0x1,	/* hb2OverloadDetectEnable */
	0x1,	/* hb2OverloadDurationCnt */
	0x1	/* hb2OverloadThreshCnt */
};

RX 自动增益 Power Measurement 模式参数 , obsRxPwrAgc 类似

static mykonosPowerMeasAgcCfg_t rxPwrAgc = {
	0x01,	/* pmdUpperHighThresh */
	0x03,	/* pmdUpperLowThresh */
	0x0C,	/* pmdLowerHighThresh */
	0x04,	/* pmdLowerLowThresh */
	0x4,	/* pmdUpperHighGainStepAttack */
	0x2,	/* pmdUpperLowGainStepAttack */
	0x2,	/* pmdLowerHighGainStepRecovery */
	0x4,	/* pmdLowerLowGainStepRecovery */
	0x08,	/* pmdMeasDuration */
	0x02	/* pmdMeasConfig */
};

RX AGC 配置 ,obsRxAgcConfig 类似
1, /* agcObsRxSelect , 1 选择 Sniffer
1, /* agcPeakThresholdMode ,1,Peak Threshold

static mykonosAgcCfg_t rxAgcConfig = {
	255,	/* agcRx1MaxGainIndex */
	195,	/* agcRx1MinGainIndex */
	255,	/* agcRx2MaxGainIndex */
	195,	/* agcRx2MinGainIndex: */
	255,	/* agcObsRxMaxGainIndex */
	203,	/* agcObsRxMinGainIndex */
	1,		/* agcObsRxSelect */
	1,		/* agcPeakThresholdMode */
	1,		/* agcLowThsPreventGainIncrease */
	30720,	/* agcGainUpdateCounter */
	3,	/* agcSlowLoopSettlingDelay */
	4,	/* agcPeakWaitTime */
	0,	/* agcResetOnRxEnable */
	0,	/* agcEnableSyncPulseForGainCounter */
	&rxPeakAgc,
	&rxPwrAgc
};

在这里插入图片描述

根据 Profile 文件 ,配置 rx、orx、sniffer、tx 的 IQ采样率 、信号带宽 、抽取或者内插系数、滤波器系数等

static mykonosTxProfile_t txProfile = {
	/* Tx 20/100MHz, IQrate 122.88MSPS, Dec5 */
	DACDIV_2p5,     /* The divider used to generate the DAC clock*/
	&txFir,         /* Pointer to Tx FIR filter structure*/
	2,              /* The Tx digital FIR filter interpolation (1,2,4)*/
	2,              /* Tx Halfband1 filter interpolation (1,2)*/
	1,              /* Tx Halfband2 filter interpolation (1,2)*/
	1,              /* TxInputHbInterpolation (1,2)*/
	122880,         /* Tx IQ data rate in kHz*/
	20000000,       /* Primary Signal BW*/
	100000000,      /* The Tx RF passband bandwidth for the profile*/
	710539,         /* The DAC filter 3dB corner in kHz*/
	50000,          /* Tx BBF 3dB corner in kHz*/
	0               /* Enable DPD, only valid for AD9373*/
};

9371 参考时钟
在这里插入图片描述

122.88M ,AD9525 OUT 13输出到9371的 DEV_CLK(E7 E8) , DEV_CLK参考时钟频率 10 MHz 到 320 MHz.
9830400 ,PLL VCO 工作频率,在 6 GHz 到 12 GHz
2,VCO divider,1,1.5,2,3, hsclkRate= clkPllVcoFrequency / VCO divider
4,HS Divider,4 或 5,hsDigClk = hsclkRate/ hsDiv

static mykonosDigClocks_t mykonosClocks = {
	122880,         /* CLKPLL and device reference clock frequency in kHz*/
	9830400,        /* CLKPLL VCO frequency in kHz*/
	VCODIV_2,       /* CLKPLL VCO divider*/
	4               /* CLKPLL high speed clock divider*/
};

RX 配置,txSettings 类似,Tx Attenuation ,衰减步长 和 衰减 mdB
RX1_RX2,初始化 RX 1 和 2
0, / Internal LO = 0, 本振使用内部产生的
2.5G,Rx PLL 本振频率 ,2.5GHz
0 , / 0,复数,1 实数

static mykonosRxSettings_t  rxSettings = {
	&rxProfile,     /* Rx datapath profile, 3dB corner frequencies, and digital filter enables*/
	&rxFramer,      /* Rx JESD204b framer configuration structure*/
	&rxGainControl, /* Rx Gain control settings structure*/
	&rxAgcConfig,   /* Rx AGC control settings structure*/
	RX1_RX2,        /* The desired Rx Channels to enable during initialization*/
	0,              /* Internal LO = 0, external LO*2 = 1*/
	2500000000U,    /* Rx PLL LO Frequency (internal or external LO)*/
	0               /* Flag to choose if complex baseband or real IF data are selected for Rx and ObsRx paths. Where, if > 0 = real IF data, '0' = zero IF (IQ) data*/
};

OBS_RX 配置,
MYK_ORX1_ORX2 | MYK_SNRXA_B_C,初始化 ORX1、ORX2、SNRXA、B、C
OBSLO_TX_PLL, Obs Rx 本振,0 本振由 Tx 产生, 1 本振由Sniffer 产生
2.6G,SnRx PLL 本振频率 ,2.6GHz
OBS_RXOFF , ObsRx 通道关闭,后续主函数中配置使用OBS_RX1_SNIFFERLO
MYKONOS_setObsRxPathSource(&mykDevice,OBS_RX1_SNIFFERLO)

typedef enum{
    OBS_RXOFF           = 0,
    OBS_RX1_TXLO        = 1,
    OBS_RX2_TXLO        = 2,
    OBS_INTERNALCALS    = 3,
    OBS_SNIFFER         = 4,
    OBS_RX1_SNIFFERLO   = 5,
    OBS_RX2_SNIFFERLO   = 6,
    OBS_SNIFFER_A       = 0x14,
    OBS_SNIFFER_B       = 0x24,
    OBS_SNIFFER_C       = 0x34
} 

static mykonosObsRxSettings_t obsRxSettings = {
	&orxProfile,    /* ORx datapath profile, 3dB corner frequencies, and digital filter enables*/
	&orxGainControl,/* ObsRx gain control settings structure*/
	&obsRxAgcConfig,/* ORx AGC control settings structure*/
	&snifferProfile,/* Sniffer datapath profile, 3dB corner frequencies, and digital filter enables*/
	&snifferGainControl,/* SnRx gain control settings structure*/
	&obsRxFramer,   /* ObsRx JESD204b framer configuration structure */
	(MYK_ORX1_ORX2 | MYK_SNRXA_B_C),/* obsRxChannel */
	OBSLO_TX_PLL,   /* (obsRxLoSource) The Obs Rx mixer can use the Tx Synth(TX_PLL) or Sniffer Synth (SNIFFER_PLL) */
	2600000000U,    /* SnRx PLL LO frequency in Hz */
	0,              /* Flag to choose if complex baseband or real IF data are selected for Rx and ObsRx paths. Where if > 0 = real IF data, '0' = complex data*/
	NULL,           /* Custom Loopback ADC profile to set the bandwidth of the ADC response */
	OBS_RXOFF       /* Default ObsRx channel to enter when radioOn called */
};

SPI 参数配置
2, AD9371 是 2,9528 是1,用于SPI 片选 spi_csn,ZYNQ只使用了 SPI0来配置9528和9371

static spiSettings_t mykSpiSettings = {
	2, /* chip select index - valid 1~8 */
	0, /* the level of the write bit of a SPI write instruction word, value is inverted for SPI read operation */
	1, /* 1 = 16-bit instruction word, 0 = 8-bit instruction word */
	1, /* 1 = MSBFirst, 0 = LSBFirst */
	0, /* clock phase, sets which clock edge the data updates (valid 0 or 1) */
	0, /* clock polarity 0 = clock starts low, 1 = clock starts high */
	0, /* Not implemented in ADIs platform layer. SW feature to improve SPI throughput */
	1, /* Not implemented in ADIs platform layer. For SPI Streaming, set address increment direction. 1= next addr = addr+1, 0:addr=addr-1 */
	1  /* 1: Use 4-wire SPI, 0: 3-wire SPI (SDIO pin is bidirectional). NOTE: ADI's FPGA platform always uses 4-wire mode */
};

DPD, CLGC, 和 VSWR 功能只有AD9375有,dpdConfig,clgcConfig,vswrConfig 不用管

后续 和 AD9371 交互并未通过GPIO ,armGpio,gpio3v3,gpio,mykonosAuxIo 不用管

温度传感器见 tempSensor、tempStatus

主函数 和 FPGA 中的相关 IP配置见下一节

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

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

相关文章

3 函数的升级-上

常量与宏回顾 C中的const常量可以替代常数定义&#xff0c;如: "Const int a 8; --> 等价于 #define a 8 " 宏在预编译阶段处理&#xff0c;而c const常量则在编译阶段处理&#xff0c;比宏 更为安全。 C中&#xff0c;我们可以用宏代码片段去实现某个函数&…

时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解

时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现FEEMD快速集合经验模态分解时间序列信号分解 算法新颖小众&#xff0c…

企业级SpringBoot单体项目模板 —— 使用 AOP + JWT实现登陆鉴权

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;SpringBoot、企业级、项目模板☀️每日 一言&#xff1a;没学会走就学跑从来都不是问题&#xff0c;要问问自己是不是天才&#xff0c;如果不是&#xff0c;那就要一步步来 文章目录 使用JWT实现…

docker 常用

系统 Ubuntu 20.04 64位 安装文档 ubuntu&#xff1a;https://docs.docker.com/engine/install/ubuntu/ centos&#xff1a;https://docs.docker.com/engine/install/centos/ debian&#xff1a;https://docs.docker.com/engine/install/debian/ 常用命令 查看镜像 docke…

NeRF-SLAM部署运行(3060Ti)

记录在部署运行期间遇到的一些问题&#xff0c;分享给大家~ 一、环境 RTX 3060 Ti、8G显存、Ubuntu18.04 二、部署 1. 下载代码 git clone https://github.com/jrpowers/NeRF-SLAM.git --recurse-submodules git submodule update --init --recursive cd thirdparty/insta…

Nacos 的底层实现原理 注册中心的两种调用方式

目录 1. Nacos 的底层实现原理 1.1 配置中心自动刷新实现原理 1.2 注册中心底层实现原理 2. Nacos 注册中心的两种调用方式 2.1 RestTemplate Spring Cloud LoadBalancer 的调用方式 2.2 使用 OpenFeign Spring Cloud LoadBalancer 1. Nacos 的底层实现原理 1.1 配置中心…

Python测试之Pytest详解

概要 当涉及到python的测试框架时&#xff0c;pytest是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例&#xff0c;并具有广泛的应用场景。下面是pytest的介绍和详细使用说明&#xff1a; pytest是一个用于python单元测试的框架&#xff0c;它…

node插件express(路由)的插件使用(二)——body-parser和ejs插件的基本使用

文章目录 前言一、express使用中间件body-parser获取请全体的数据1. 代码2. 效果 二、express使用ejs&#xff08;了解即可&#xff09;1.安装2.作用3.基本使用&#xff08;1&#xff09;代码&#xff08;2&#xff09;代码分析和效果 4.列表渲染&#xff08;1&#xff09;代码…

Canvas 实现进度条展示统计数据示例

canvas可以画柱状图&#xff0c;如下就是一个例子&#xff0c;主要用到了lineWidth&#xff0c;beginPath&#xff0c;lineCap等知识点。 效果图 源代码 <!DOCTYPE Html> <html> <head><title>Line Chart Demo</title><meta http-equiv&quo…

一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高

一.思路分析 这是一个简单的物理题目&#xff0c;解题思路比较明确。程序使用 for 循环来模拟球的下落和反弹过程&#xff0c;通过多次计算得到最终结果&#xff0c;最后使用 printf 函数将结果输出。 定义初始高度 height 和总共经过的米数 distance 的变量&#xff0c;初始化…

【密评】商用密码应用安全性评估从业人员考核题库(十九)

商用密码应用安全性评估从业人员考核题库&#xff08;十九&#xff09; 国密局给的参考题库5000道只是基础题&#xff0c;后续更新完5000还会继续更其他高质量题库&#xff0c;持续学习&#xff0c;共同进步。 4501 判断题 依据《信息系统密码应用高风险判定指引》&#xff0c…

服务器感染了.locked勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 网络安全威胁的不断演变使得恶意软件如.locked勒索病毒成为当今数字时代的一大挑战。.locked勒索病毒能够加密您的文件&#xff0c;然后要求支付赎金以解锁它们。本文将深入探讨.locked勒索病毒的特点&#xff0c;以及如何应对感染&#xff0c;以及预防这种类…

数据可视化:动态柱状图

终于来到最后一个数据可视化的文章拿啦~~~ 在这里学习如何绘制动态柱状图 我先整个活 (๑′ᴗ‵๑)&#xff29; Lᵒᵛᵉᵧₒᵤ❤ 什么是pyecharts&#xff1f; 答&#xff1a; Python的Pyecharts软件包。它是一个用于Python数据可视化和图表绘制的库&#xff0c;可用于制作…

安装 2023最新版本的Tableau Desktop 时出现“0x80070643”错误

安装失败的原因&#xff1a; “0x80070643”错误是Microsoft错误。 必需的安装组件无法启动&#xff0c;通常是C库&#xff0c;或者使用了无效的操作系统版本。 通过控制面板——程序与功能可以查看到自己电脑Microsoft Visual C的版本&#xff0c;像我的话是比较低的&…

第四章IDEA操作Maven

文章目录 创建父工程开启自动导入配置Maven信息创建Java模块工程创建 Web 模块工程 在IDEA中执行Maven命令直接执行手动输入 在IDEA中查看某个模块的依赖信息工程导入来自版本控制系统来自工程目录 模块导入情景重现导入 Java 类型模块 导入 Web 类型模块 创建父工程 开启自动导…

【GitHub】Watch、Star、Fork、Follow 有什么区别?

目录 一、前言二、区别1. Watch2. Star3. Fork4. Follow 一、前言 GitHub 是最受欢迎的代码托管平台之一&#xff0c;拥有大量的开源代码可供学习。 Github 中也有类似 “点赞”、“收藏”、“加关注” 的功能。 下面介绍下&#xff0c;GitHub 中 Watch、Star、Fork、Follow 有…

uni-app华为审核被拒,驳回原因:您的应用在运行时,未见向用户告知权限申请的目的

华为审核被拒&#xff1a; 您的应用在运行时&#xff0c;未见向用户告知权限申请的目的&#xff0c;向用户索取(相机存)等权限&#xff0c;不符合华为应用市场审核标准。 <uni-popup ref"perpopup" type"center" :mask-clickfalse><view class&qu…

幂等性(防重复提交)

文章目录 1. 实现原理2.使用示例3. Idempotent注解4. debug过程 主要用途&#xff1a;防止用户快速双击某个按钮&#xff0c;而前端没有禁用&#xff0c;导致发送两次重复请求。 1. 实现原理 幂等性要求参数相同的方法在一定时间内&#xff0c;只能执行一次。本质上是基于red…

Leetcode-509 斐波那契数列

使用循环 class Solution {public int fib(int n) {if(n 0){return 0;}if(n 1){return 1;}int res 0;int pre1 1;int pre2 0;for(int i 2; i < n; i){res pre1 pre2;pre2 pre1;pre1 res;}return res;} }使用HashMap class Solution {private Map<Integer,Int…

E-Office(泛微OA)前台任意文件读取漏洞复现

简介 泛微E-Office是一款企业级的全流程办公自动化软件&#xff0c;它包括协同办公、文档管理、知识管理、工作流管理等多个模块&#xff0c;涵盖了企业日常工作中的各个环节。在该产品前台登录页存在文件读取漏洞。 officeserver.php文件存在任意文件读取漏洞&#xff0c;通…