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

航芯ACM32G103开发板评测 08 ADC Timer外设测试

航芯ACM32G103开发板评测 08 ADC Timer外设测试

1. 软硬件平台

  1. ACM32G103 Board开发板
  2. MDK-ARM Keil

2. 定时器Timer

在一般的MCU芯片中,定时器这个外设资源是非常重要的,一般可以分为SysTick定时器(系统滴答定时器)、常规定时器(基本定时器,通用定时器,高级定时器)、专用定时器(看门狗定时器,RTC)
在这里插入图片描述

在ACM32G103中有着丰富的定时器资源,还包括低功耗定时器lptimer,具体资源如下
在这里插入图片描述

基础定时器最简单,就只是普通的计数、定时功能。通用定时器在基础定时器的功能上,增加了输入捕获和输出比较等功能。高级定时器在通用定时器的功能上,造假了包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM)的功能。
接下来进行基本的定时器定时功能测试。在官方给的SPL库里面只有两个例程,感觉有点少,与stm32相比较,许多的库函数没有完善。原本打算使用HC-SR04超声波模块进行定时器测试,但是发现有不少问题,而且定时精度比较高就放弃了,以后有时间再看看吧,或者看看其他人的东西。
在这里插入图片描述

基本定时器包含一个16 位自动装载计数器,由各自的可编程预分频器驱动。
在这里插入图片描述

//嵌套向量中断控制器配置 
void NVIC_Configuration(void)
{NVIC_ClearPendingIRQ(TIM6_IRQn);   NVIC_EnableIRQ(TIM6_IRQn);   
} 
//时钟配置使能
void Clock_Configuration(void)
{__RCC_TIM6_CLK_ENABLE();   
}  

定时器配置函数
定时器的定时时间主要取决于预分频系数和定时周期。重要的参数Prescaler,Period
如果需要修改定时器定时时间,只需要修改

TIM_TimeBaseStructure.Period = (TIM_CLOCK_FREQ/1000)*500 - 1;  // 500ms 

修改为

TIM_TimeBaseStructure.Period = (TIM_CLOCK_FREQ/1000)*1000 - 1;  // 1000ms=1s 
void TIM6_Init(void)  
{uint32_t timer_clock; timer_clock = RCC_GetPCLK1Freq(); if (RCC_GetHCLKFreq() != timer_clock)  // if hclk/pclk != 1, then timer clk = pclk * 2  {timer_clock =  timer_clock << 1;     }TIM_TimeBaseStructure.ClockDivision = TIM_CLOCKDIVISION_DIV1; TIM_TimeBaseStructure.CounterMode = TIM_COUNTERMODE_UP; TIM_TimeBaseStructure.RepetitionCounter = 0;  TIM_TimeBaseStructure.Prescaler = (timer_clock/TIM_CLOCK_FREQ) - 1;  TIM_TimeBaseStructure.Period = (TIM_CLOCK_FREQ/1000)*500 - 1;  // 500ms TIM_TimeBase_Init(TIM6, &TIM_TimeBaseStructure);           /* TIM IT enable */TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);  /* TIM6 enable counter */TIM_Cmd(TIM6, ENABLE);          
}

3.模数转换器ADC

1. ADC简介

将模拟信号(连续信号)转换为数字信号(离散信号)的器件就叫模数转换器(ADC)。
按原理可分为:并行比较型A/D转换器(FLASH ADC)、逐次比较型A/D转换器(SAR ADC)和双积分式A/D转换器(Double Integral ADC)。
A/D转换过程通常为4步:采样、保持、量化和编码。如图所示。
在这里插入图片描述

ADC的主要有三个性能指标:分辨率、转换时间和转换精度。

1.1 分辨率

分辨率:又称为转换精度,指ADC能分辨的最小电压,通常使用二进制有效位表示,反应了ADC对输入模拟量微小变化的分辨能力。当最大输入电压一定时,位数越多,量化单位越小,误差越小,分辨率越高。比如一个12位的ADC,参考电压为3.3V,则其能分辨的最小电压为:
在这里插入图片描述

1.2 转换时间

转换时间:其倒数为转换速率,指ADC从控制信号到来开始,到输出端得到稳定的数字信号所经历的时间。转换时间通常与ADC类型有关,双积分型ADC的转换时间一般为几十毫秒,属于低速ADC;逐次逼近型ADC的转换时间一般为几十微妙,属于中速ADC;并联比较型ADC的转换时间一般为几十纳秒,属于高速ADC。

1.3 转换精度

转换精度:指ADC输出的数字量所表示的模拟值与实际输入的模拟量之间的偏差,通常为1个或半个最小数字量的模拟变化量,表示为1LSB或1/2LSB。

2.ACM32G103 ADC资源

ACM32G103芯片有2个12位逐次逼近型ADC。ADC1与ADC2紧密耦合,可在双重模式下运行(ADC1 为主器件,ADC2为从器件)。

  1. 12 位分辨率,可配置10 位、8 位或6 位分辨率
  2. 转换速率最高可达3Msps
  3. 20 个可用通道,包括外部信号源和内部信号源
3. ADC初始化配置

首先需要定义需要使用的ADC 通道数量,以及具体的ADC 通道号。确定需要使用到的工作模式(独立模式、双ADC 模式、单端、差分或者是否支持DMA 等),设置ADC CLK,根据需求进行初始化配置。
ADC采集方式有下面四种:轮询方式,中断方式,外部触发方式,DMA 方式。
以DMA为案例进行处理。
ADC_DMA驱动函数

void ADC_DMA_Drive_Iint(void)
{ADC_GPIO_Config();//ADC_GPIO端口引脚初始化配置ADC_Common_Register_Config();//ADC通用寄存器配置ADC_Config();//ADC工作模式配置ADC_DMA_Config();//ADC_DMA请求配置ADC_RegularStart();//使能ADC,开始常规通道的转换
}

ADC_GPIO端口引脚初始化配置

void ADC_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;__RCC_GPIOC_CLK_ENABLE();/* Configure ADC Channel_13 pin as analog input */GPIO_InitStruct.Pin       = GPIO_PIN_3;GPIO_InitStruct.Mode      = GPIO_MODE_ANALOG;GPIO_InitStruct.Pull      = GPIO_NOPULL;GPIO_Init(GPIOC, &GPIO_InitStruct); 
}

ADC通用寄存器配置

void ADC_Common_Register_Config(void)
{ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_CommonInitStructure.ADC_Mode = ADC_MODE_INDEPENDENT;//双ADC模式选择ADC_CommonInitStructure.ADC_Prescaler = ADC_CLOCK_DIV4;//ADC_CLK分频选择ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAACCESSMODE_DISABLED;//双ADC下DMA功能选择ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_5CYCLES;//2个采样阶段之间的延迟ADC_CommonInit(&ADC_CommonInitStructure);
}

ADC工作模式配置

void ADC_Config(void)
{ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Resolution = ADC_RESOLUTION_12B;//分辨率ADC_InitStructure.ADC_ContinuousConvMode = ADC_CONT_DISABLE;//连续转换模式ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;//外部触发边沿选择ADC_InitStructure.ADC_ExternalTrigConv = ADC_EXTERNAL_TIG0;//触发模式ADC_InitStructure.ADC_DataAlign = ADC_DATAALIGN_RIGHT;//数据对齐ADC_InitStructure.ADC_NbrOfConversion = ADC_NUM;//规则通道序列长度 传输的数据长度为:每个通道采集30次 * 1个通道ADC_Init(ADCX, &ADC_InitStructure);//规则通道设置ADC_RegularChannelConfig(ADCX, ADC_CHANNEL_13, ADC_SEQUENCE_SQ1, ADC_SMP_CLOCK_320);
}

ADC_DMA请求配置

void ADC_DMA_Config(void)
{__RCC_DMA1_CLK_ENABLE();DMA_BigEndianConfig(DMA1, DISABLE);DMA_DeInit(DMA1_Channel3);DMA_InitStruct.Mode = DMA_MODE_CIRCULAR;    DMA_InitStruct.DataFlow = DMA_DATAFLOW_P2M;DMA_InitStruct.ReqID = DMA1_REQ0_ADC1;DMA_InitStruct.RawInt = DMA_RAWINT_ENABLE;DMA_InitStruct.SrcInc = DMA_SRCINC_DISABLE;DMA_InitStruct.DestInc = DMA_DESTINC_ENABLE;DMA_InitStruct.SrcWidth = DMA_SRCWIDTH_WORD;   DMA_InitStruct.DestWidth = DMA_DESTWIDTH_WORD;DMA_InitStruct.SrcBurst = DMA_SRCBURST_1;DMA_InitStruct.DestBurst = DMA_DESTBURST_1;DMA_InitStruct.SrcAddr     = (uint32_t)&ADC1->DR;DMA_InitStruct.DestAddr    = (uint32_t)gadcBuffer;DMA_InitStruct.Size        = 1;    DMA_Init(DMA1_Channel3, &DMA_InitStruct);// Enable interruptDMA_ClearFlag(DMA1_Channel3, DMA_FLAG_RTC);DMA_ITConfig(DMA1_Channel3, DMA_IT_TC, ENABLE);// Enable NVIC IRQNVIC_ClearPendingIRQ(DMA1_IRQn);NVIC_SetPriority(DMA1_IRQn, 0x00);NVIC_EnableIRQ(DMA1_IRQn); DMA_Cmd(DMA1_Channel3, ENABLE); 
}

使能ADC,开始常规通道的转换

void ADC_RegularStart(void)
{/* Enable ADC DMA mode */ADC_DMACmd(ADCX, ENABLE);/* Enable the ADC peripheral */ADC_Cmd(ADCX, ENABLE);/* Clear the SR register */ADC_ClearFlag(ADCX, ADC_IT_FLAG_ALL);      /* Start conversion */ADC_SoftwareStartConv(ADCX);}

中断服务函数

void DMA1_IRQHandler(void)
{ADC_DMA_ITC_Callback();
}
void ADC_DMA_ITC_Callback(void)
{ /* Transfer complete interrupt */if (SET == DMA_GetFlagStatus(DMA1_Channel3, DMA_FLAG_TC)){gadc1ItcConunt = 1;DMA_ClearFlag(DMA1_Channel3, DMA_FLAG_TC);}     
}

4.测试

  1. Timer测试函数
#define TIM_CLOCK_FREQ            (10000)  TIM_Base_InitTypeDef TIM_TimeBaseStructure;    volatile uint32_t Timer_Update_Flag;    void Clock_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);   void NVIC_Configuration(void)
{NVIC_ClearPendingIRQ(TIM6_IRQn);   NVIC_EnableIRQ(TIM6_IRQn);   
} void Clock_Configuration(void)
{__RCC_TIM6_CLK_ENABLE();   
}  void GPIO_Configuration(void)  
{// do nothing here 
}/************************************************************************* function   : TIM6_Update_IRQ* Description: TIM6 user Interrupt Handler ************************************************************************/ 
void TIM6_Update_IRQ(void)
{if (TIM6->SR & TIMER_SR_UIF)  {Timer_Update_Flag = 1;  }}void TIM6_Init(void)  
{uint32_t timer_clock; timer_clock = RCC_GetPCLK1Freq(); if (RCC_GetHCLKFreq() != timer_clock)  // if hclk/pclk != 1, then timer clk = pclk * 2  {timer_clock =  timer_clock << 1;     }TIM_TimeBaseStructure.ClockDivision = TIM_CLOCKDIVISION_DIV1; TIM_TimeBaseStructure.CounterMode = TIM_COUNTERMODE_UP; TIM_TimeBaseStructure.RepetitionCounter = 0;  TIM_TimeBaseStructure.Prescaler = (timer_clock/TIM_CLOCK_FREQ) - 1;  TIM_TimeBaseStructure.Period = (TIM_CLOCK_FREQ/1000)*500 - 1;  // 500ms TIM_TimeBase_Init(TIM6, &TIM_TimeBaseStructure);           /* TIM IT enable */TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);  /* TIM6 enable counter */TIM_Cmd(TIM6, ENABLE);          
}void Timer_Update_Test(void)
{/* Module Clocks Configuration */Clock_Configuration();/* NVIC Configuration */   NVIC_Configuration();Timer_Update_Flag = 0;   TIM6_Init(); while(1){if(Timer_Update_Flag) {printfS("Timer Update Occurs\n"); Timer_Update_Flag = 0;   }}
}
  1. ADC_DMA测试函数
//采样通道数 
#define ADC_NUM    (1)uint32_t gadcBuffer[ADC_NUM]; 
static volatile uint32_t gadc1ItcConunt = 0;                 #define ADCX    (ADC1)DMA_InitTypeDef DMA_InitStruct;//需配置为全局变量,不然DMA只会触发一次/******************************************************************************
* @brief : DMA adc to memory transfer complete interrupt Callback.
* @param : None
* @return: None
******************************************************************************/ 
void ADC_DMA_ITC_Callback(void)
{ /* Transfer complete interrupt */if (SET == DMA_GetFlagStatus(DMA1_Channel3, DMA_FLAG_TC)){gadc1ItcConunt = 1;DMA_ClearFlag(DMA1_Channel3, DMA_FLAG_TC);}     
}/******************************************************************************
* @brief : ADC GPIO config.
* @param : None
* @return: None
******************************************************************************/
void ADC_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;__RCC_GPIOC_CLK_ENABLE();/* Configure ADC Channel_13 pin as analog input */GPIO_InitStruct.Pin       = GPIO_PIN_3;GPIO_InitStruct.Mode      = GPIO_MODE_ANALOG;GPIO_InitStruct.Pull      = GPIO_NOPULL;GPIO_Init(GPIOC, &GPIO_InitStruct); 
}/******************************************************************************
* @brief : ADC Common register config.
* @param : None
* @return: None
******************************************************************************/
void ADC_Common_Register_Config(void)
{ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_CommonInitStructure.ADC_Mode = ADC_MODE_INDEPENDENT;//双ADC模式选择ADC_CommonInitStructure.ADC_Prescaler = ADC_CLOCK_DIV4;//ADC_CLK分频选择ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAACCESSMODE_DISABLED;//双ADC下DMA功能选择ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_5CYCLES;//2个采样阶段之间的延迟ADC_CommonInit(&ADC_CommonInitStructure);
}/******************************************************************************
* @brief : ADC config.
* @param : None
* @return: None
******************************************************************************/
void ADC_Config(void)
{ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Resolution = ADC_RESOLUTION_12B;//分辨率ADC_InitStructure.ADC_ContinuousConvMode = ADC_CONT_DISABLE;//连续转换模式ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;//外部触发边沿选择ADC_InitStructure.ADC_ExternalTrigConv = ADC_EXTERNAL_TIG0;//触发模式ADC_InitStructure.ADC_DataAlign = ADC_DATAALIGN_RIGHT;//数据对齐ADC_InitStructure.ADC_NbrOfConversion = ADC_NUM;//规则通道序列长度 传输的数据长度为:每个通道采集30次 * 1个通道ADC_Init(ADCX, &ADC_InitStructure);//规则通道设置ADC_RegularChannelConfig(ADCX, ADC_CHANNEL_13, ADC_SEQUENCE_SQ1, ADC_SMP_CLOCK_320);
}/******************************************************************************
* @brief : ADC DMA config.
* @param : None
* @return: None
******************************************************************************/
void ADC_DMA_Config(void)
{__RCC_DMA1_CLK_ENABLE();DMA_BigEndianConfig(DMA1, DISABLE);DMA_DeInit(DMA1_Channel3);DMA_InitStruct.Mode = DMA_MODE_CIRCULAR;    DMA_InitStruct.DataFlow = DMA_DATAFLOW_P2M;DMA_InitStruct.ReqID = DMA1_REQ0_ADC1;DMA_InitStruct.RawInt = DMA_RAWINT_ENABLE;DMA_InitStruct.SrcInc = DMA_SRCINC_DISABLE;DMA_InitStruct.DestInc = DMA_DESTINC_ENABLE;DMA_InitStruct.SrcWidth = DMA_SRCWIDTH_WORD;   DMA_InitStruct.DestWidth = DMA_DESTWIDTH_WORD;DMA_InitStruct.SrcBurst = DMA_SRCBURST_1;DMA_InitStruct.DestBurst = DMA_DESTBURST_1;DMA_InitStruct.SrcAddr     = (uint32_t)&ADC1->DR;DMA_InitStruct.DestAddr    = (uint32_t)gadcBuffer;DMA_InitStruct.Size        = 1;    DMA_Init(DMA1_Channel3, &DMA_InitStruct);// Enable interruptDMA_ClearFlag(DMA1_Channel3, DMA_FLAG_RTC);DMA_ITConfig(DMA1_Channel3, DMA_IT_TC, ENABLE);// Enable NVIC IRQNVIC_ClearPendingIRQ(DMA1_IRQn);NVIC_SetPriority(DMA1_IRQn, 0x00);NVIC_EnableIRQ(DMA1_IRQn); DMA_Cmd(DMA1_Channel3, ENABLE); 
}/******************************************************************************
* @brief:  Enable ADC, start conversion of regular channle 
* @param:  None 
* @return: None
******************************************************************************/
void ADC_RegularStart(void)
{/* Enable ADC DMA mode */ADC_DMACmd(ADCX, ENABLE);/* Enable the ADC peripheral */ADC_Cmd(ADCX, ENABLE);/* Clear the SR register */ADC_ClearFlag(ADCX, ADC_IT_FLAG_ALL);      /* Start conversion */ADC_SoftwareStartConv(ADCX);}void ADC_DMA_Drive_Iint(void)
{ADC_GPIO_Config();ADC_Common_Register_Config();ADC_Config();ADC_DMA_Config();ADC_RegularStart();
}/******************************************************************************
* @brief : ADC function test.
* @param : None
* @return: None
******************************************************************************/
void APP_ADC_Test(void)
{uint32_t i;float vol=0.0;printfS("ADC DMA test \r\n");ADC_DMA_Drive_Iint();while(1){ADC_SoftwareStartConv(ADCX);while(!gadc1ItcConunt);gadc1ItcConunt =0;for (i = 0; i < ADC_NUM; i++){//  printfS("Channel_%d = %d\r\n", ((gadcBuffer[i] >> 16) & 0xFF), (gadcBuffer[i] & 0xFFF));vol = (gadcBuffer[i]&0xFFF)*3.3/4095;printf("PA1 Voltage is: %0.1f V \r\n", vol);}DelayMs(1000);}
}
  1. 测试结果

在这里插入图片描述

在这里插入图片描述

相关文章:

航芯ACM32G103开发板评测 08 ADC Timer外设测试

航芯ACM32G103开发板评测 08 ADC Timer外设测试 1. 软硬件平台 ACM32G103 Board开发板MDK-ARM Keil 2. 定时器Timer 在一般的MCU芯片中&#xff0c;定时器这个外设资源是非常重要的&#xff0c;一般可以分为SysTick定时器&#xff08;系统滴答定时器&#xff09;、常规定时…...

【Linux学习】生产者-消费者模型

目录 22.1 什么是生产者-消费者模型 22.2 为什么要用生产者-消费者模型? 22.3 生产者-消费者模型的特点 22.4 BlockingQueue实现生产者-消费者模型 22.4.1 实现阻塞队列BlockQueue 1) 添加一个容器来存放数据 2)加入判断Blocking Queue情况的成员函数 3)实现push和pop方法 4)完…...

三、案例 - MySQL数据迁移至ClickHouse

MySQL数据迁移至ClickHouse 一、生成测试数据表和数据1.在MySQL创建数据表和数据2.在ClickHouse创建数据表 二、生成模板文件1.模板文件内容2.模板文件参数详解2.1 全局设置2.2 数据读取&#xff08;Reader&#xff09;2.3 数据写入&#xff08;Writer&#xff09;2.4 性能设置…...

[WinForm开源]概率计算器 - Genshin Impact(V1.0)

创作目的&#xff1a;为方便旅行者估算自己拥有的纠缠之缘能否达到自己的目的&#xff0c;作者使用C#开发了一款小型软件供旅行者参考使用。 创作说明&#xff1a;此软件所涉及到的一切概率与规则完全按照游戏《原神》(V4.4.0)内公示的概率与规则&#xff08;包括保底机制&…...

vscode 代码调试from IPython import embed

一、讲解 这种代码调试方法非常的好用。 from IPython import embed上面的代码片段是用于Python中嵌入一个交互式IPython shell的方法。这可以在任何Python脚本或程序中实现&#xff0c;允许在执行到该点时暂停程序&#xff0c;并提供一个交互式环境&#xff0c;以便于检查、…...

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目&#xff0c;在纠结一个注册中心是在双活机房都准备一个&#xff0c;那主机房的数据如果传过去呢&#xff0c;查了一些资料&#xff0c;最终在官网查到了一个NacosSync 的组件&#xff0c;主要用来做数据传输的&#xff0c;并且支持在线替换注册中心的&a…...

5G NR 信道号计算

一、5G NR的频段 增加带宽是增加容量和传输速率最直接的方法&#xff0c;目前5G最大带宽将会达到400MHz&#xff0c;考虑到目前频率占用情况&#xff0c;5G将不得不使用高频进行通信。 3GPP协议定义了从Sub6G(FR1)到毫米波(FR2)的5G目标频谱。 其中FR1是5G的核心频段&#xff0…...

01-Spring实现重试和降级机制

主要用于在模块调用中&#xff0c;出现失败、异常情况下&#xff0c;仍需要进行重复调用。并且在最终调用失败时&#xff0c;可以采用降级措施&#xff0c;返回一般结果。 1、重试机制 我们采用spring 提供的retry 插件&#xff0c;其原理采用aop机制&#xff0c;所以需要额外…...

docker部署showdoc

目录 安装 1.拉取镜像 2.创建容器 使用 1.选择语言 2.默认账户/密码:showdoc/123456​编辑 3.登陆 4.首页 安装 1.拉取镜像 docker pull star7th/showdoc 2.创建容器 mkdir -p /opt/showdoc/html docker run -d --name showdoc --userroot --privilegedtrue -p 1005…...

2.14作业

1.请编程实现二维数组的杨辉三角。 2.请编程实现二维数组计算每一行的和以及列和。 3.请编程实现二维数组计算第二大值。 4.请使用非函数方法实现系统函数strcat,strcmp,strcpy,strlen. strcat: strcmp: strcpy: strlen:...

01.数据结构篇-链表

1.找出两个链表的交点 160. Intersection of Two Linked Lists (Easy) Leetcode / 力扣 例如以下示例中 A 和 B 两个链表相交于 c1&#xff1a; A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 但是不会出现以下相交的情况&#xff0c;因为每个节点只有一个…...

揭秘产品迭代计划制定:从0到1打造完美迭代策略

产品迭代计划是产品团队确保他们能够交付满足客户需求的产品以及实现其业务目标的重要工具。开发一个成功的产品迭代计划需要仔细考虑产品的目标、客户需求、市场趋势和可用资源。以下是帮助您创建产品迭代计划的一些步骤&#xff1a;建立产品目标、收集客户反馈、分析市场趋势…...

Python进阶--下载想要的格言(基于格言网的Python爬虫程序)

注&#xff1a;由于上篇帖子&#xff08;Python进阶--爬取下载人生格言(基于格言网的Python3爬虫)-CSDN博客&#xff09;篇幅长度的限制&#xff0c;此篇帖子对上篇做一个拓展延伸。 目录 一、爬取格言网中想要内容的url 1、找到想要的内容 2、抓包分析&#xff0c;找到想…...

C语言--------数据在内存中的存储

1.整数在内存中的存储 整数在内存是以补码的形式存在的&#xff1b; 整型家族包括char,int ,long long,short类型&#xff1b; 因为char类型是以ASCII值形式存在&#xff0c;所以也是整形家族&#xff1b; 这四种都包括signed,unsigned两种&#xff0c;即有符号和无符号&am…...

【Java】零基础蓝桥杯算法学习——线性动态规划(一维dp)

线性dp——一维动态规划 1、考虑最后一步可以由哪些状态得到&#xff0c;推出转移方程 2、考虑当前状态与哪些参数有关系&#xff0c;定义几维数组来表示当前状态 3、计算时间复杂度&#xff0c;判断是否需要进行优化。 一维动态规划例题&#xff1a;最大上升子序列问题 Java参…...

Excel模板1:彩色甘特图

Excel模板1&#xff1a;彩色甘特图 分享地址 当前效果&#xff1a;只需要填写进度&#xff0c; 其余效果都是自动完成的 。 阿里网盘永久分享&#xff1a;https://www.alipan.com/s/cXhq1PNJfdm ​省心。能用公式的绝不使用手动输入。 ​​ 这个区域以及标题可以手动输入…...

如何重新安装 macOS

你可以使用电脑的内建恢复系统“macOS 恢复”来重新安装 Mac 操作系统。不但简单快捷&#xff0c;而且重新安装后不会移除你的个人数据。 将 Mac 关机 选取苹果菜单  >“关机”&#xff0c;然后等待 Mac 关机。如果你无法将 Mac 关机&#xff0c;请按住它的电源按钮最长 …...

论文阅读-Pegasus:通过网络内一致性目录容忍分布式存储中的偏斜工作负载

论文名称&#xff1a;Pegasus: Tolerating Skewed Workloads in Distributed Storage with In-Network Coherence Directories 摘要 高性能分布式存储系统面临着由于偏斜和动态工作负载引起的负载不平衡的挑战。本文介绍了Pegasus&#xff0c;这是一个利用新一代可编程交换机…...

【PTA|编程题|期末复习】字符串(一)

【C语言/期末复习】字符和字符串函数&#xff08;附思维导图/例题) 目录 7-1 组织星期信息 输入样例 (repeat3) : 输出样例: 代码 7-2 查找指定字符 输入格式&#xff1a; 输出格式&#xff1a; 输入样例1&#xff1a; 输出样例1&#xff1a; 输入样例2&#xff1a; …...

数据库基本操作2

一.DML&#xff08;Data Manipulation Language&#xff09; 用来对数据库中表的数据记录进行更新 关键字&#xff1a;增删改 插入insert 删除delete 更新update 1.数据插入 insert into 表&#xff08;列名1&#xff0c;列名2&#xff0c;列名3……&#xff09;values&a…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...