【蓝桥杯嵌入式】六、真题演练(一)-1演练篇:第 届真题

温馨提示:

        真题演练分为模拟篇和研究篇。本专栏的主要作用是记录我的备赛过程,我打算先自己做一遍,把遇到的问题和不同之处记录到演练篇,然后再返回来仔细研究一下,找到最佳的解题方法记录到研究篇

解题记录:

草稿:

功能分析:

主要流程和全局变量: 

 功能函数分析:

过程中遇到的问题:

  1. 很明显第一个问题就是草稿太乱,需要规范化一下。
  2. 之前没想过需要获取定时器状态或定时时间,以实现长按、判断时长等功能。
  3. 根据题目,要把PCB设置为80MHz会更方便,在自己开发的时候我习惯设置为100MHz。
  4. 准确的毫秒级延时,由于预分频系数不可以大于65535,所以只能填7999,这样计数10000时就是1s。
  5. 忘记打开中断,设置优先级。
  6. 还是会漏掉某些变量的设置。
  7. 写草稿没有清谁是谁,重新查找浪费时间。

源代码:

main.c

/* USER CODE BEGIN PV */
uint8_t B1_key=1;
uint8_t PWMOut_MOde=1;//1:µÍƵ
uint32_t PWMOut_Pluse=10;
uint32_t PWMIn_f=0;

uint8_t PARA_mode=1;
uint16_t PARA_R=1;
uint16_t PARA_K=1;

uint8_t changeMode=1;
uint32_t changeNum=0;
uint8_t PWM_C=1;
uint32_t volt=0;

char LCD_str[20];
uint16_t PWMChangeTim=0;
uint32_t Period=200;

float Data_V=0.0;//(uint32_t)((PWMIn_f*6.28*PARA_R)/(100*PARA_K));
uint8_t V_change=1;
float V_Hmax=0.0;
float V_Lmax=0.0;
/* USER CODE END PV */

//LED函数
void LED_Switch(uint16_t GPIO_Pin,GPIO_PinState PinState)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_Pin,PinState);
	HAL_GPIO_WritePin(GPIOD,LED_LE_Pin,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,LED_LE_Pin,GPIO_PIN_RESET);
}


//PWM渐变函数
void PWM_Change()
{
	for(uint16_t i=0;i<50;i++)
	{
			HAL_TIM_Base_Start(&htim7);
	}
}

//读ADC并改变占空比
void Read_ADC()
{
	if(PWM_C==1)
	{
		volt=(3300*HAL_ADC_GetValue(&hadc2))>>12;
		if(volt<=1000)
			PWMOut_Pluse=10;
		else if(volt>=3000)
			PWMOut_Pluse=85;
		else
			PWMOut_Pluse=(volt-1000)/(27*100);
		
		if(PWMOut_MOde==1)
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,PWMOut_Pluse*2);
		else
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,PWMOut_Pluse);
	}
	
}

//计算速度
void Set_V()
{
	if(V_change==0)
	{
		HAL_TIM_Base_Stop(&htim4);
		V_change=1;
	}
	PWMIn_f=80000000/__HAL_TIM_GetCompare(&htim3,TIM_CHANNEL_1);
	Data_V=(PWMIn_f*6.28*PARA_R)/(100*PARA_K);
	HAL_TIM_Base_Start(&htim4);
	V_change=0;
}


//按键1功能函数
void B1Fun()
{
	B1_key++;

	if(B1_key>3)
		B1_key=1;
}

//按键2功能函数
void B2Fun()
{
	if(B1_key==1&&changeMode==1)
	{
		changeNum++;
		changeMode=0;
		PWM_Change();		
	}
	else if(B1_key==2)
	{
		if(PARA_mode==1)
			PARA_mode=0;
		else 
			PARA_mode=1;
	}
}

//按键3功能函数
void B3Fun()
{
	if(B1_key==2)
	{
		if(PARA_mode==1)
			PARA_R++;
		else
			PARA_K++;
	}
}

///按键4功能函数
void B4Fun()
{
	if(B1_key==2)
	{
		if(PARA_mode==1)
			PARA_R--;
		else
			PARA_K--;
	}
	else if(B1_key==3)
	{
		if(PWM_C==1)//³¤°´
		{
			HAL_TIM_Base_Start(&htim6);
			while(HAL_TIM_Base_GetState(&htim6)==HAL_TIM_STATE_BUSY)
			{
				if(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin)==GPIO_PIN_SET)
				{
					HAL_TIM_Base_Stop(&htim6);
					return;
				}
			}
		}
		else
		{
				PWM_C=1;
		}
	}
}

//按键扫描函数
void KeyScan()
{
	if(HAL_GPIO_ReadPin(B1_GPIO_Port,B1_Pin)==GPIO_PIN_RESET)
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(B1_GPIO_Port,B1_Pin)==GPIO_PIN_RESET)
		{
			B1Fun();
		}
	}
	
	if(HAL_GPIO_ReadPin(B2_GPIO_Port,B2_Pin)==GPIO_PIN_RESET)
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(B2_GPIO_Port,B2_Pin)==GPIO_PIN_RESET)
		{
			B2Fun();
		}
	}
	
	if(HAL_GPIO_ReadPin(B3_GPIO_Port,B3_Pin)==GPIO_PIN_RESET)
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(B3_GPIO_Port,B3_Pin)==GPIO_PIN_RESET)
		{
			B3Fun();
		}
	}
	
	if(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin)==GPIO_PIN_RESET)
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin)==GPIO_PIN_RESET)
		{
			B4Fun();
		}
	}
}


int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
	LCD_Init();
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
	LCD_Clear(Black);
  /* 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_ADC2_Init();
  MX_TIM2_Init();
  MX_TIM3_Init();
  MX_TIM6_Init();
  MX_TIM7_Init();
  MX_TIM15_Init();
  MX_TIM4_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
	LED_Switch(LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin,GPIO_PIN_SET);
	Set_V();
	
  while (1)
  {
		KeyScan();
		Read_ADC();
		if(B1_key==1)
		{
			LCD_Clear(Black);
			LED_Switch(LED1_Pin,GPIO_PIN_RESET);
			
			LCD_DisplayStringLine(Line2,"        DATA");
			if(PWMOut_MOde==1)
				LCD_DisplayStringLine(Line4,"     M=L");
			else
				LCD_DisplayStringLine(Line4,"     M=H");
			
			sprintf(LCD_str,"     P=%d%",PWMOut_Pluse);
			LCD_DisplayStringLine(Line5,LCD_str);
			
			sprintf(LCD_str,"     V=%.1f",Data_V);
			LCD_DisplayStringLine(Line6,LCD_str);
			
			LED_Switch(LED1_Pin,GPIO_PIN_SET);
		}
		else if(B1_key==2)
		{
			LCD_Clear(Black);
			LCD_DisplayStringLine(Line2,"        PARA");

			sprintf(LCD_str,"     R=%d",PARA_R);
			LCD_DisplayStringLine(Line4,LCD_str);
			
			sprintf(LCD_str,"     K=%d",PARA_K);
			LCD_DisplayStringLine(Line5,LCD_str);
		}
		else if(B1_key==3)
		{
			Set_V();
			LCD_Clear(Black);
			LCD_DisplayStringLine(Line2,"        RECD");

			sprintf(LCD_str,"     N=%d",changeNum);
			LCD_DisplayStringLine(Line4,LCD_str);
			
			sprintf(LCD_str,"     MH=%.1f",V_Hmax);
			LCD_DisplayStringLine(Line5,LCD_str);			
			
						sprintf(LCD_str,"     MH=%.1f",V_Lmax);
			LCD_DisplayStringLine(Line6,LCD_str);		
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
//省略

main.h

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.h
  * @brief          : Header for main.c file.
  *                   This file contains the common defines of the application.
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2024 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32g4xx_hal.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "lcd.h"
#include <stdio.h>
/* USER CODE END Includes */

/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */

/* USER CODE END ET */

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */

/* USER CODE END EC */

/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */

/* USER CODE END EM */

/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);

/* USER CODE BEGIN EFP */

/* USER CODE END EFP */

/* Private defines -----------------------------------------------------------*/
#define LED6_Pin GPIO_PIN_13
#define LED6_GPIO_Port GPIOC
#define LED7_Pin GPIO_PIN_14
#define LED7_GPIO_Port GPIOC
#define LED8_Pin GPIO_PIN_15
#define LED8_GPIO_Port GPIOC
#define B4_Pin GPIO_PIN_0
#define B4_GPIO_Port GPIOA
#define B1_Pin GPIO_PIN_0
#define B1_GPIO_Port GPIOB
#define B2_Pin GPIO_PIN_1
#define B2_GPIO_Port GPIOB
#define B3_Pin GPIO_PIN_2
#define B3_GPIO_Port GPIOB
#define LED1_Pin GPIO_PIN_8
#define LED1_GPIO_Port GPIOC
#define LED2_Pin GPIO_PIN_9
#define LED2_GPIO_Port GPIOC
#define LED3_Pin GPIO_PIN_10
#define LED3_GPIO_Port GPIOC
#define LED4_Pin GPIO_PIN_11
#define LED4_GPIO_Port GPIOC
#define LED5_Pin GPIO_PIN_12
#define LED5_GPIO_Port GPIOC
#define LED_LE_Pin GPIO_PIN_2
#define LED_LE_GPIO_Port GPIOD

/* USER CODE BEGIN Private defines */
extern uint8_t B1_key;
extern uint8_t PWMOut_MOde;
extern uint32_t PWMOut_Pluse;
extern uint32_t PWMIn_f;

extern uint8_t PARA_mode;
extern uint16_t PARA_R;
extern uint16_t PARA_K;
extern float Data_V;//(uint32_t)((PWMIn_f*6.28*PARA_R)/(100*PARA_K));

extern uint8_t changeMode;
extern uint32_t changeNum;
extern uint8_t PWM_C;
extern char LCD_str[];
extern uint16_t PWMChangeTim;
extern uint32_t Period;
extern uint8_t V_change;
extern float V_Hmax;
extern float V_Lmax;
/* USER CODE END Private defines */

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

stm32g4xx_it.c

//前面的内容省略

/******************************************************************************/
/* STM32G4xx Peripheral Interrupt Handlers                                    */
/* Add here the Interrupt Handlers for the used peripherals.                  */
/* For the available peripheral interrupt handler names,                      */
/* please refer to the startup file (startup_stm32g4xx.s).                    */
/******************************************************************************/

/**
  * @brief This function handles ADC1 and ADC2 global interrupt.
  */
void ADC1_2_IRQHandler(void)
{
  /* USER CODE BEGIN ADC1_2_IRQn 0 */

  /* USER CODE END ADC1_2_IRQn 0 */
  HAL_ADC_IRQHandler(&hadc2);
  /* USER CODE BEGIN ADC1_2_IRQn 1 */

  /* USER CODE END ADC1_2_IRQn 1 */
}

/**
  * @brief This function handles TIM1 break interrupt and TIM15 global interrupt.
  */
void TIM1_BRK_TIM15_IRQHandler(void)
{
  /* USER CODE BEGIN TIM1_BRK_TIM15_IRQn 0 */

  /* USER CODE END TIM1_BRK_TIM15_IRQn 0 */
  HAL_TIM_IRQHandler(&htim15);
  /* USER CODE BEGIN TIM1_BRK_TIM15_IRQn 1 */

  /* USER CODE END TIM1_BRK_TIM15_IRQn 1 */
}

/**
  * @brief This function handles TIM2 global interrupt.
  */
void TIM2_IRQHandler(void)
{
  /* USER CODE BEGIN TIM2_IRQn 0 */

  /* USER CODE END TIM2_IRQn 0 */
  HAL_TIM_IRQHandler(&htim2);
  /* USER CODE BEGIN TIM2_IRQn 1 */

  /* USER CODE END TIM2_IRQn 1 */
}

/**
  * @brief This function handles TIM3 global interrupt.
  */
void TIM3_IRQHandler(void)
{
  /* USER CODE BEGIN TIM3_IRQn 0 */

  /* USER CODE END TIM3_IRQn 0 */
  HAL_TIM_IRQHandler(&htim3);
  /* USER CODE BEGIN TIM3_IRQn 1 */

  /* USER CODE END TIM3_IRQn 1 */
}

/**
  * @brief This function handles TIM4 global interrupt.
  */
void TIM4_IRQHandler(void)
{
  /* USER CODE BEGIN TIM4_IRQn 0 */

  /* USER CODE END TIM4_IRQn 0 */
  HAL_TIM_IRQHandler(&htim4);
  /* USER CODE BEGIN TIM4_IRQn 1 */
	V_change=1;
	if(PWMOut_MOde==1)
	{
		if(Data_V>V_Lmax)
			V_Lmax=Data_V;
	}
	else
	{
		if(Data_V>V_Hmax)
			V_Hmax=Data_V;		
	}
  /* USER CODE END TIM4_IRQn 1 */
}

/**
  * @brief This function handles TIM6 global interrupt, DAC1 and DAC3 channel underrun error interrupts.
  */
void TIM6_DAC_IRQHandler(void)
{
  /* USER CODE BEGIN TIM6_DAC_IRQn 0 */

  /* USER CODE END TIM6_DAC_IRQn 0 */
  HAL_TIM_IRQHandler(&htim6);
  /* USER CODE BEGIN TIM6_DAC_IRQn 1 */

  /* USER CODE END TIM6_DAC_IRQn 1 */
}

/**
  * @brief This function handles TIM7 global interrupt.
  */
void TIM7_IRQHandler(void)
{
  /* USER CODE BEGIN TIM7_IRQn 0 */

  /* USER CODE END TIM7_IRQn 0 */
  HAL_TIM_IRQHandler(&htim7);
  /* USER CODE BEGIN TIM7_IRQn 1 */
	PWMChangeTim++;
	if(PWMChangeTim==50)
	{
		PWMChangeTim=0;
		
		if(PWMOut_MOde==1)
			__HAL_TIM_SetAutoreload(&htim2,100);
		else
			__HAL_TIM_SetAutoreload(&htim2,200);
		
		HAL_TIM_Base_Stop(&htim7);
	}
	else 
	{
		if(PWMOut_MOde==1)
			Period=200-PWMChangeTim*2;
		else
			Period=100+PWMChangeTim*2;
		
		__HAL_TIM_SetAutoreload(&htim2,Period);
		__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,(uint32_t)(Period/PWMOut_Pluse));

		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_GPIO_WritePin(GPIOD,LED_LE_Pin,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,LED_LE_Pin,GPIO_PIN_RESET);
	}
  /* USER CODE END TIM7_IRQn 1 */
}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

更新:24-3-29

下载后,发现如下问题:(应该简单在草稿上列出,这样可以理清思路)

  1. 屏幕一直闪,原因是LCD驱动函数响应较慢,所以不能总是清屏,应该改成在按下B1后清屏
  2. LED灯全亮,之前只在进入循环前关LED,这样是不行的,因为操作LCD会改变引脚的状态,所以进入每次都要关LED。而且不可以离点亮LED灯的位置太远,不然会闪;
  3. 没有打印‘%’,将语句改为如下代码:
     sprintf(LCD_str,"     P=%d%c",PWMOut_Pluse,'%');
  4. 按键有粘滞现象,修改后反应时间又过长,再次下载后粘滞消失,说明硬件不稳定,按键延时就设置为50就行,不快也不慢
  5. PARA模式下R和K等于0还可以减小,从十位数减到个位数没有清行,在减小值的位置添加清屏
  6. 没有仔细读题
    1. R和K的范围是1到10
    2. 而且B4的长按是在数据界面,我一直以为是统计界面,太粗心。幸好我模块化做的可以,需要改动的代码比较少。
  7. 计算要从简:计算速度,频率不是8k就是4k,只要判断模式即可,不用计算频率。
  8. 关于时间的操作可以在TIM中断服务函数中进行的,就不要拿出来,比如PWM频率转换,和长按。
  9. 长按后,要等待按键松开:
    if(PWM_C==1)//³¤°´
    		{
    			HAL_TIM_Base_Start_IT(&htim6);
                //等待定时器到2s,若中途松开,就关闭定时器
    			while(HAL_TIM_Base_GetState(&htim6)==HAL_TIM_STATE_BUSY)
    			{
    				if(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin)==GPIO_PIN_SET)
    				{
    					HAL_TIM_Base_Stop_IT(&htim6);
    					HAL_Delay(50);
    					return;
    				}
    			}
                //等待按键松开
    			while(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin)==GPIO_PIN_RESET);
    		}

  10. 看来最后的问题就是PWM的读取和输出了。
  11. 基础,但是致命的错误:
    1. 要使用定时器中断服务函数,就必须用中断方式打开或关闭定时器!
    2. PWM输出的定时器需要打开对应定时器、打开PWM输出!
    3. PWM输入的定时器也需要打开,还有对应的两个通道!
        /* USER CODE BEGIN WHILE */
      	HAL_TIM_Base_Start(&htim2);
      	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
      	
      	HAL_TIM_Base_Start(&htim3);
      	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
      	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
        while (1)
  12. 修改后发现计算占空比有问题,修改如下:
    PWMOut_Pluse=(volt-1000)/27+10;
  13. 还有时间的话就先保存一份,然后优化代码,消除所有警告,如LCD显示里,把强制类型转换加上。

未解决的问题:

按键长按的实现没有成功,要学习一下。

反思总结

        我们自己学习的时候使用的都是高性能的芯片和开发板,比赛用的设备没有那么好,所以需要我们适应这种设备。而且,实际应用中一般为了降低成本,也需要我们使用较低性能的设备。

  1. 不能总是清屏,应该改成在按下B1后清屏
  2.  每次都要关LED。而且不可以离点亮LED灯的位置太远,不然会闪;
  3. 按键延时就设置为50就行,不快也不慢如果开发板反复无常,就是硬件有问题,要求更换!
  4. 减小值的位置添加清屏或者在写显示函数的时候格式化数字的位数。
  5. 计算要从简
  6. 关于时间的操作可以在TIM中断服务函数中进行的,就不要拿出来
  7. 要使用定时器中断服务函数,就必须用中断方式打开或关闭定时器!
  8. PWM输出的定时器需要打开对应定时器、打开PWM输出!
  9. PWM输入的定时器也需要打开,还有对应的两个通道!

之前没有记住的函数:

  1. 改变周期的函数
__HAL_TIM_SetAutoreload

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

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

相关文章

Yarn的安装及使用(1):安装

一、Yarn的安装 在不同操作系统上安装Yarn的步骤和注意事项&#xff1a; 1、Windows 1.1 通过.msi安装程序安装&#xff1a; 步骤&#xff1a; 访问 Yarn官方网站 下载适用于Windows的.msi安装包。 运行下载好的.msi文件&#xff0c;按照向导进行安装。 在安装过程中&#…

Apache Hive的基本使用语法(一)

一、数据库操作 创建数据库 create database if not exists myhive;查看数据库 use myhive; desc database myhive;创建数据库并指定hdfs存储 create database myhive2 location /myhive2;删除空数据库&#xff08;如果有表会报错&#xff09; drop database myhive;…

爱上数据结构:栈和队列的概念及使用

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;数据结构 ​ 一、栈 1.栈的基本概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;…

酒店管理系统项目用例图及用例说明

1、系统功能模块图 2、部分系统功能模块说明 &#xff08;1&#xff09;查询房间剩余 模块名称&#xff1a;管理员登录 编号&#xff1a;1-1 主要功能&#xff1a;验证管理员登录用户名及密码 上级调用模块&#xff1a;无 下级调用模块&#xff1a; 约束&#xff1a; &a…

强化基础-Java-泛型基础

什么是泛型&#xff1f; 泛型其实就参数化类型&#xff0c;也就是说这个类型类似一个变量是可变的。 为什么会有泛型&#xff1f; 在没有泛型之前&#xff0c;java中是通过Object来实现泛型的功能。但是这样做有下面两个缺陷&#xff1a; 1 获取值的时候必须进行强转 2 没有…

音视频开发之旅(80)- AI数字人-腾讯开源AniPortrait-音频驱动的肖像动画

目录 1、前言 2、效果展示 3、原理学习 4、遇到的问题与解决方案 5、资料 一、前言 一个月前阿里Emo发布&#xff0c;通过音频驱动的非常自然的肖像视频&#xff0c;引起很大反响。具体看下面的视频&#xff0c;但是并没有开源其代码。 这两天腾讯开源了其音频驱动的肖像…

2024年美团笔试题(1)

一.题目描述 小美拿到了一个排列&#xff0c;其中初始所有元素都是红色&#xff0c;但有些元素被染成了白色。 小美每次操作可以选择交换任意两个红色元素的位置。她希望操作尽可能少的次数使得数组变成非降序&#xff0c;你能帮帮她吗? 排列是指:一个长度为n的数组&#…

Java | Leetcode Java题解之第1题两数之和

题目&#xff1a; 题解&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map new HashMap<>();for(int i 0; i< nums.length; i) {if(map.containsKey(target - nums[i])) {return new int[] {map.get(tar…

【React】vite + react 项目,进行配置 eslint

安装与配置 eslint 1 安装 eslint babel/eslint-parser2 初始化配置 eslint3 安装 vite-plugin-eslint4 配置 vite.config.js 文件5 修改 eslint 默认配置 1 安装 eslint babel/eslint-parser npm i -D eslint babel/eslint-parser2 初始化配置 eslint npx eslint --init相关…

应急物资管理系统|实现应急物资的全生命周期管理和监控

应急物资管理系统是一种现代化、智能化、可视化的物资管理平台&#xff0c;主要用于实现对应急物资的全生命周期管理和监控&#xff0c;并提供可靠的应急响应支持。 应急物资管理系统功能 准入控制&#xff1a;东识应急物资管理系统可以实现准入控制&#xff0c;确保只有经过授…

C语言----strcmp()函数:比较两个字符串

C语言中strcmp&#xff08;&#xff09;用于对两个字符串进行比较&#xff08;区分大小&#xff09;。 头文件&#xff1a;string.h 语法原型 int strcmp(const char*str1,const char*str2) 参数str1和str2是参与比较的两个字符串。 strcmp()是根据ASCLL编码依次比较str1和str…

MP设置动态表名

Mybatis设置动态表名 Mybatis设置动态表名1.动态表名插件2.传递表名3.注意事项 Mybatis设置动态表名 1.动态表名插件 MybatisPlus中提供了一个动态表名的插件&#xff1a;https://baomidou.com/pages/2a45ff/#dynamictablenameinnerinterceptor 插件的部分源码如下&#xff…

大模型面试准备(十):大模型数据处理方法及优秀的开源数据介绍

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 合集在这…

【Consul】Linux安装Consul保姆级教程

【Consul】Linux安装Consul保姆级教程 大家好 我是寸铁&#x1f44a; 总结了一篇【Consul】Linux安装Consul保姆级教程✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天要把编写的go程序放到linux上进行测试Consul服务注册与发现&#xff0c;那怎么样才能实现这一过程&am…

内网渗透之域环境探索和简单提权

参考文章&#xff1a;http://t.csdnimg.cn/AZ2OR 一个简单的域环境可以这样子搭建&#xff1a; 其中边界服务器有两张网卡&#xff0c;一个是对外的公网网卡&#xff0c;另一张是对内的局域网网卡。一般渗透过程中&#xff0c;拿下这个作为跳板机&#xff0c;进而继续渗透。 …

P23—P25:标识符和关键字

标识符 什么是标识符&#xff1f; 在java源程序中&#xff0c;程序员有权自己命名的单词都是标识符在EditPlus编译器中&#xff0c;表示符以黑色高亮字体显示 标识符可以标识什么元素&#xff1f; 类名方法名变量名接口名常量名 … 标识符的命名规则&#xff1a; 只能由**数…

C++学习随笔(8)——模板初阶

本章我们来学习一下C的模版部分&#xff01; 目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通…

Android vehicle车辆属性新增demo

目录 前言一、Vehicle模块1.1 简介1.2 Vehicle框架1.3 主要功能和特点1.4 重要服务CarService1.4.1 简介1.4.2 组成1.4.3 启动时序1.4.4 作用 二、车辆属性新增demo2.1 CarPropertyService2.1.1 简介2.1.2 架构2.1.3 车辆属性 API2.1.4 CarPropertyService 初始化流程 2.2 App …

鸿蒙ARKTS--简易的购物网站

目录 一、media 二、string.json文件 三、pages 3.1 登录页面&#xff1a;gouwuPage.ets 3.2 PageResource.ets 3.3 商品页面&#xff1a;shangpinPage.ets 3.4 我的页面&#xff1a;wodePage.ets 3.5 注册页面&#xff1a;zhucePage.ets 3. 购物网站主页面&#xff…

在GitHub上上传项目(Idea)

repository创建好后&#xff0c;GitHub会提示相应的命令 在Idea的终端执行这些命令&#xff0c;就OK了 在GitHub上查看&#xff0c;已经上传成功