STM32H750时钟频率和功耗以及RTC功能测试

news/2024/5/20 10:50:36

STM32H750时钟频率和功耗和RTC功能测试


  • 📌相关篇《STM32H750片外QSPI启动配置简要》
✨在使用STM32CubeMX修改STM32H750时钟树参数时,如果使用软件自动求解,这是一个非常耗时的操作,有时候还不一定成功,还是推荐使用手动方式进行配置,这一点和STM32其他系列不同,像STM32F1系列,输入频率参数回车确认后,自动求解很快就自动配置完成了。可能和时钟配置参数的复杂度有关。

🔰STM32H750时钟频率和功耗粗略统计对比

  • 🔖以下是在的单片机正常运行模式下的测试数据。(以个人自制的STM32H750核心板测试为例,数据不代表所有实际使用的STM32H750的运行状态能耗)
  • 🌿外部晶振25MHz , 480MHz主频,电流220mA,1.1w,芯片发热很大
  • 🌿外部晶振 25MHz,400MHz,电流164mA,0.82w,芯片发热比较大
  • 🌿 外部晶振25MHz, 250MHz,电流75mA,0.4w,芯片稍微发热
  • 功耗主要源头和主频关系非常大,与是否使能的外设多少,测试没有明显的影响。
  • 如果跑满单片机主频(480MHz),长期运行,最好贴个散热片辅助散热,供电方面,至少500mA或以上输出能力的电源。
  • 🎉STM32H750工程编译器推荐使用AC6版本的编译器,编译速度会比AC5版本快很多,在STM32H7上,这一点体现尤为明显。

📙时钟频率配置参数

  • 🔧25MHz外部晶振,配置480MHz
    在这里插入图片描述
/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Supply configuration update enable*/HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);/** Configure the main internal regulator output voltage*/__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}__HAL_RCC_SYSCFG_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}/** Configure LSE Drive Capability*/HAL_PWR_EnableBkUpAccess();__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.LSEState = RCC_LSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 5;RCC_OscInitStruct.PLL.PLLN = 192;RCC_OscInitStruct.PLL.PLLP = 2;RCC_OscInitStruct.PLL.PLLQ = 2;RCC_OscInitStruct.PLL.PLLR = 2;RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;RCC_OscInitStruct.PLL.PLLFRACN = 0;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK){Error_Handler();}
}
  • 🔧25MHz外部晶振,配置400MHz
    在这里插入图片描述
/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Supply configuration update enable*/HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);/** Configure the main internal regulator output voltage*/__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}/** Configure LSE Drive Capability*/HAL_PWR_EnableBkUpAccess();__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.LSEState = RCC_LSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 5;RCC_OscInitStruct.PLL.PLLN = 160;RCC_OscInitStruct.PLL.PLLP = 2;RCC_OscInitStruct.PLL.PLLQ = 2;RCC_OscInitStruct.PLL.PLLR = 2;RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;RCC_OscInitStruct.PLL.PLLFRACN = 0;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}
  • 🔧8MHz外部晶振,配置480MHz
    在这里插入图片描述
/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Supply configuration update enable*/HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);/** Configure the main internal regulator output voltage*/__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}__HAL_RCC_SYSCFG_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}/** Configure LSE Drive Capability*/HAL_PWR_EnableBkUpAccess();__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.LSEState = RCC_LSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 32;RCC_OscInitStruct.PLL.PLLN = 240;RCC_OscInitStruct.PLL.PLLP = 2;RCC_OscInitStruct.PLL.PLLQ = 2;RCC_OscInitStruct.PLL.PLLR = 2;RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;RCC_OscInitStruct.PLL.PLLFRACN = 7753;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK){Error_Handler();}
}
  • 🔧8MHz外部晶振,配置400MHz:RCC_OscInitStruct.PLL.PLLN = 240;
    在这里插入图片描述

📘RTC时钟功能

  • 🔖在使能RTC日历,配置参数时,最好选择RTC_FORMAT_BIN数据格式,在使用RTC_FORMAT_BCD数据格式,在读取数据就可以省去转换。
    在这里插入图片描述

  • 🌿如果使用RTC_FORMAT_BCD数据格式,转换为常规的十进制数参考代码:


RTC_HandleTypeDef hrtc;void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc)
{/* Enable RTC clock */__HAL_RCC_RTC_ENABLE();
}void RTC_BCDToDecimal(RTC_TimeTypeDef *sTime)
{sTime->Hours = ((sTime->Hours & 0xF0) >> 4) * 10 + (sTime->Hours & 0x0F);sTime->Minutes = ((sTime->Minutes & 0xF0) >> 4) * 10 + (sTime->Minutes & 0x0F);sTime->Seconds = ((sTime->Seconds & 0xF0) >> 4) * 10 + (sTime->Seconds & 0x0F);
}int main(void)
{RTC_TimeTypeDef sTime;/* Initialize RTC *//* Get RTC time */HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BCD);/* Convert BCD to decimal */RTC_BCDToDecimal(&sTime);/* Use sTime.Hours, sTime.Minutes, sTime.Seconds as decimal values */while (1){/* Application code */}
}

📗RTC功能测试代码

  • ✨个人采用的是外部flash运行程序,下载算法和程序地址,和常规片内运行的程序有所不同,这一点需要注意。
int main(void)
{/* USER CODE BEGIN 1 */uint8_t Rtctmp=0;RTC_DateTypeDef GetData = {0}; //获取日期结构体RTC_TimeTypeDef GetTime = {0}; //获取时间结构体SCB->VTOR = 0x90000000; /*设置中断向量表偏移地址  *//* USER CODE END 1 *//* Enable the CPU Cache *//* Enable I-Cache---------------------------------------------------------*/SCB_EnableICache();/* Enable D-Cache---------------------------------------------------------*/SCB_EnableDCache();/* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_RTC_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 *//* 使能 PWR 时钟 */
//		__HAL_RCC_RTC_ENABLE();/* PWR_CR:DBF置1,使能RTC、RTC备份寄存器和备份SRAM的访问 */
//		HAL_PWR_EnableBkUpAccess();/* 等待 RTC APB 寄存器同步 */
//		HAL_RTC_WaitForSynchro(&hrtc);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1) {/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);//RTC_FORMAT_BCDHAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);  //RTC_FORMAT_BIN// 每秒打印一次if(Rtctmp != GetTime.Seconds){printf("Data:%04d-%02d-%02d\r\n", 2000 + GetData.Year, GetData.Month, GetData.Date);printf("Time:%02d:%02d:%02d\r\n", GetTime.Hours, GetTime.Minutes, GetTime.Seconds);HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);printf("STM32H750 SysClockFreq:%d \r\n", SystemCoreClock);
//			printf("STM32H750 SysClockFreq:%d \r\n", HAL_RCC_GetSysClockFreq());
//			(void)RTC->DR;}Rtctmp = GetTime.Seconds;}/* USER CODE END 3 */
}

在这里插入图片描述

📒RTC不走时的相关原因分析

  • 🌿在调用读取时间数据 接口函数时,需要同时一起调用时间和日期对应的函数:
        HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);  
  • 🌿在调用上面两个接口函数时,注意第一个形参,该形参是rtc被初始化过的句柄,被定义在:rtc.c中:
RTC_HandleTypeDef hrtc;/* RTC init function */
void MX_RTC_Init(void)
{/* USER CODE BEGIN RTC_Init 0 *//* USER CODE END RTC_Init 0 */RTC_TimeTypeDef sTime = {0};RTC_DateTypeDef DateToUpdate = {0};/* USER CODE BEGIN RTC_Init 1 *//* USER CODE END RTC_Init 1 *//** Initialize RTC Only*/hrtc.Instance = RTC;hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}/* USER CODE BEGIN Check_RTC_BKUP *//* USER CODE END Check_RTC_BKUP *//** Initialize RTC and set the Time and Date*/sTime.Hours = 0x20;sTime.Minutes = 0x35;sTime.Seconds = 0x35;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;DateToUpdate.Month = RTC_MONTH_APRIL;DateToUpdate.Date = 0x22;DateToUpdate.Year = 0x24;if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}/* USER CODE BEGIN RTC_Init 2 *//* USER CODE END RTC_Init 2 */}
  • 🔖如果传递的是一个自己定义的一个rtc句柄(例如:RTC_HandleTypeDef Rtc_Handle;),而未进行初始化操作,直接作为形参传入该句柄,将会导致不走时。
  • 🎉设置RTC时间的时候,用的那个变量作为句柄的,在调用读取时间信息的时候,也必须要使用相同的变量作为句柄来读取。
  • 🔱如果必须要需使用自己定义的句柄,参考代码如下来做:
RTC_HandleTypeDef Rtc_Handle;/*** @brief  设置时间和日期* @param  无* @retval 无*/
void RTC_TimeAndDate_Set(void)
{RTC_DateTypeDef  RTC_DateStructure;RTC_TimeTypeDef  RTC_TimeStructure;// 初始化时间RTC_TimeStructure.TimeFormat = RTC_HOURFORMAT12_AM;RTC_TimeStructure.Hours = 8;        RTC_TimeStructure.Minutes = 12;      RTC_TimeStructure.Seconds = 26;      HAL_RTC_SetTime(&Rtc_Handle,&RTC_TimeStructure, RTC_FORMAT_BIN);// 初始化日期	RTC_DateStructure.WeekDay = RTC_WEEKDAY_TUESDAY;       RTC_DateStructure.Date = 23;         RTC_DateStructure.Month = RTC_MONTH_APRIL;         RTC_DateStructure.Year = 24;        HAL_RTC_SetDate(&Rtc_Handle,&RTC_DateStructure, RTC_FORMAT_BIN);}/*** @brief  显示时间和日期* @param  无* @retval 无*/
void RTC_TimeAndDate_Show(void)
{uint8_t Rtctmp=0;RTC_TimeTypeDef RTC_TimeStructure;RTC_DateTypeDef RTC_DateStructure;while(1){// 获取日历HAL_RTC_GetTime(&Rtc_Handle, &RTC_TimeStructure, RTC_FORMAT_BIN);HAL_RTC_GetDate(&Rtc_Handle, &RTC_DateStructure, RTC_FORMAT_BIN);// 每秒打印一次if(Rtctmp != RTC_TimeStructure.Seconds){// 打印日期printf("The Date :  Y:20%0.2d - M:%0.2d - D:%0.2d - W:%0.2d\r\n", RTC_DateStructure.Year,RTC_DateStructure.Month, RTC_DateStructure.Date,RTC_DateStructure.WeekDay);// 打印时间printf("The Time :  %0.2d:%0.2d:%0.2d \r\n\r\n", RTC_TimeStructure.Hours, RTC_TimeStructure.Minutes, RTC_TimeStructure.Seconds);}Rtctmp = RTC_TimeStructure.Seconds;}	
}
  • 🌿另一个时钟不走时的可能就是,在使用外部低速时钟源作为时钟源时,外部32.756KHz晶振没有起振所致。排查此原因也很简单,将低速时钟源改为内部时钟32KHz进行验证。

http://www.mrgr.cn/p/48766471

相关文章

数据库中间件-He3Proxy

什么是数据库中间件? 随着互联网行业的蓬勃发展,业务访问量、数据量激增,传统数据库的单库、大表已成为业务发展的瓶颈,进而衍生出数据库主从实例、分库分表等方案,为减少数据库层变动对业务开发带来的复杂性,一种连接应用与数据库桥梁的工具孕育而生,即数据库中间件,它…

JAVA前端快速入门基础_javascript入门(01)

写在前面:本文用于快速学会简易的JS,仅做扫盲和参考作用 1.JS是什么 JavaScript是一门跨平台,面向对象的脚本语言(即不需要编译,可以直接通过浏览器进行解释)。JS和Java是两门完全不相同的语言,但是基础的语法是类似的 2.JS的引…

MySQL学习之explain

from之后的查询得到的表叫做衍生表,是临时表数据,生成临时表之后的数据是无法使用索引的,如果数据量大查询效率就会比较低,这就是查询要尽量少使用子查询这些临时表。explain详解 id: 表示查询序号,也可以表示优先级;当值都不一样的时候,值越大表示优先级越高,越先执行…

实验12-使用keras预训练模型完成猫狗识别

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果: 这里我用Gpu进行加速,训练一回9秒,如果不启用gpu,训练一回会很慢。 代码:#-*- codeing = utf-8 -*- #@Time : 2022/10/2 11:44 #@Author : 程浩 #@File : 猫狗识别.py #@Software: PyCharm import tensor…

KVM虚拟机迁移(静态)

1.查看虚拟机状态,确认关闭状态 virsh list --all 2.查看虚拟机文件位置 virsh domblklist zabbix3.导出配置文件并查看导出文件 virsh dumpxml zabbix > /root/zabbix.xml 4.把刚导出的配置文件传到目的服务制定路径(路径为虚拟机配置文件位置)scp zabbix.xml 10.10.7.1…

实验11-使用keras完成逻辑回归

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果: 代码:import numpy as npfrom keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten import matplotlib.pyplot as plt from sklearn import datasets# 样本数据集…

【工具-PyCharm】

工具-PyCharm ■ PyCharm-简介■ PyCharm-安装■ PyCharm-使用■ 修改主题■ 设置字体■ 代码模板■ 解释器配置■ 文件默认编码■ 快捷键■ 折叠■ 移动■ 注释■ 编辑■ 删除■ 查看■ 缩进■ 替换 ■ PyCharm-简介 官方下载地址 Professional:专业版&#xff0…

Linux KASAN使用与实现原理

一、KASAN工具使用 KASAN工具:Kernel Address SANitizer(KASAN)是一种动态内存安全错误检测工具,主要功能是检查内存越界访问和使用已释放内存的问题。 1.1 KASAN宏控开关 KASAN有三种模式:1.通用KASAN;2.基于软件标签的KASAN&…

实验8-1tensorboard可视化+实验8-2tensorboard案例

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 实验8-1tensorboard可视化运行结果:代码:import tensorflow as tf# 创建默认图 graph = tf.compat.v1.get_default_graph()# 定义命名空间 with graph.as_default():with tf.name_scope(input):# fetch:就是同时运行多…

科技论文网站:中国科技论文在线

文章目录 1. Intro2. Main3. Cons Evaluation彩蛋:科学素质 这是作者最后一次发 这种类型的宣传 科普文章 1. Intro 中国科技论文在线是经教育部批准,由教育部科技发展中心主办, 利用现代信息技术手段,打破传统出版物的概念&…

虚方法

若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法。虚方法与非虚方法的最大不同是,虚方法的实现可以由派生类所取代,这种取代是通过方法的重写实现的(以后再讲)虚方法的特点:虚方法前不允许有static,abstract,或override修饰符虚方法不能是私有的,因此不能…

【Vue】如何使用Webpack实现打包操作

一、Webpack介绍 Webpack最主要的作用就是打包操作,由两个核心部分构成分别是“出口”与“入口”。wbepack是现在比较热门的打包工具了,它可以将许多松散耦合的模块按照依赖和规则打包成符合生产环境部署的前端资源。说的直白一点,通过webpac…

RPC(远程过程调用)详解

一、RPC是什么 RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。 二、RPC需要解决的问题 1、Call ID映射 我们怎么告诉远…

【基础算法总结】双指针算法二

双指针 1.有效三角形的个数2.和为S的两个数字3.和为S的两个数字4.四数之和 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.有效三角形的个数…

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版)

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版) 此篇仅为踩坑记录,并未成功更换高速镜像源,实际解决方法见文末跳转链接。 1.自身源镜像 自身镜像源创建Vue项目下载速度感人 2.更改镜像源 2.1 通过命令行配置 前提…

京东web端h5st—4.7逆向分析

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6Ly93d3cuamQuY29tLw== 分析流程了解h5st 看了sha256相关加密算法逻辑b…

API和微服务设计的优化方式有哪些?

在构建响应迅速、用户体验良好的应用程序中,API性能的优化至关重要。在构建高性能的API时,采取综合策略是至关重要的。通过采用一系列策略,我们可以确保API在处理请求时高效运行,提供流畅的服务。 一、API和微服务设计的优化可以…

XYCTF2024-web-wp

怎么全是傻逼绕过题。 不想评价,就随便打着玩,除了最后一道java反序列化搞心态,其他的ak了:简单题不想说,http注意一下代理是用Via就行,warmup直接:http://xyctf.top:37034/?val1=240610708&val2=QNKCDZO&md5=0e215962017&XYCTF=240610708&XY=24061070…

深入mysql索引

1. 索引 索引是对数据库表中一列或多列的值进行排序的一种结构。 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。 简单类比…

平衡树炫酷科技

炫酷平衡树科技标题是吸引你点进来的 Case 1 LCT 的 access 操作应该可以实现某种区间覆盖的操作(听同学讲的,具体的还待讨论) Case 2 众所周知,可并堆中左偏树合并是这样写的(记 \(dist\) 为 \(rd\)): merge(A, B)if !A: return Bif !B: return Aif B.val > A.valsw…