嵌入式蓝桥杯电子赛嵌入式(第14届国赛真题)总结

  1. 打开systic

 

  1. 生成工程
  2. 编译查看是否有问题
  3. 同时打开对应需要的文档

修改名称的要求 

5.简单浏览赛题

选择题,跟单片机有关的可以查相关手册

  1. 答题顺序

 先从显示开始看

1,2 

  1. 所以先打开PA1的定时器这次选TIM2

从模式、TI2FP2二通道、内部时钟、1通道设为直接2通道设置为间接、通道配置为:间接通道1设置为下降沿,直接通道设置为上升沿 

所以先打开PA7的定时器这次选TIM17_CH1

3后续再看

4 先在产品手册找到R37

检测一下J11跳线帽是否在,需要是连上的

定时器配置及参数扫描 

选择单边模式 

参数配置

连续不需要,用程序驱动就可以

配置过采样、使能过采样,3bit,方便滤波,采样时间,防止程序卡死

6、通过按键完成界面切换、参数设置等功能

按键配置

Led配置 

 

PD2设置默认为低电平

生成文件---10ms定时器用与按键使用

3.3显示界面 

  1. 实时数据界面
  1. 报警参数界面

 

  1. 报警统计界面

 

4)回放设置界面 

3.6 按键功能 

 

 

3) B3:定义为“加”按键。 ① 在报警参数界面下,按下 B3 按键: 若当前选择的是频率上限参数(FH),FH 值加 1000Hz。 若当前选择的是电压上限参数(AH),AH 值加 0.3V。 若当前选择的是温度上限参数(TH),TH 值加 1℃。 ② 在回放设置界面下,按下 B3 按键: 若当前选择的是脉冲信号回放分频系数(FP),FP 值加 1。 若当前选择的是电压信号回放最小值(VP),VP 值加 0.3V。 若当前选择的是记录回放时间(TT),TT 值加 2 秒。 ③ 在实时数据界面下,按下 B3 按键: 若设备已经完成了数据记录,则通过 PA7 引脚回放“电压信号”。

4) B4:定义为“减”按键。 ① 在报警参数界面下,按下 B4 按键: 若当前选择的是频率上限参数(FH),FH 值减 1000Hz。 若当前选择的是电压上限参数(AH),AH 值减 0.3V。 若当前选择的是温度上限参数(TH),TH 值减 1℃。 ② 在回放设置界面下,按下 B4 按键: 若当前选择的是脉冲信号回放分频系数(FP),FP 值减 1。 若当前选择的是电压信号回放最小值(VP),VP 值减 0.3V。 若当前选择的是记录回放时间(TT),TT 值减 2 秒。 ③ 在实时数据界面下,按下 B4 按键: 若设备已经完成了数据记录,则通过 PA7 引脚回放“脉冲信号”。

5) B3、B4。 在任何一个界面下,所检测到 B3、B4 按键均处于按下状态,且持续时间超- 6 - 过 2 秒,设备回到初始状态。4. 初始状态说明) 6) 通用按键要求: l 按键应进行有效的防抖处理,避免出现一次按键动作触发多次功能等 情形。 l 按键动作不应影响数据采集过程和屏幕显示效果。 l 有效区分长、短按键功能,互不影响。 l 参数调整应考虑边界值,不出现无效参数。 l 当前界面下无功能的按键按下,不触发其它界面的功能。

这里灯

LED处理完之后再写

 

要求基本符合

验证

没问题的功能标绿,

有问题的标绿

后半场难点

 

 

 

初值随便设置,在程序中也能更改

案例程序

extern struct Bkeys bkey[];
uint8_t led_sta=0x00;
char text[30];
float DS_temp;
int frq=0;
int duty=0;
float adc_data_PB15;
uint32_t time100ms;
uint8_t view=0;

uint16_t FN,AN,TN;//频率报警次数(FN)、电压报警次数(AN)和温度报警次数(TN)。
uint16_t FH=2000,TH=30;//频率上限参数\温度上限参数
float AH=3.0f;//电压上限参数
uint16_t FP=1,TT=6;//脉冲信号回放分频系数、记录回放时间
float VP=0.9;//电压信号回放最小值

int16_t FH_t=2000,TH_t=30;//频率上限参数\温度上限参数 临时显示
float AH_t=3.0f;//电压上限参数  临时显示
uint16_t FP_t=1,TT_t=6;//脉冲信号回放分频系数、记录回放时间 临时显示
float VP_t=0.9;//电压信号回放最小值  临时显示

uint8_t para_sel;//按键参数选择
uint8_t rec_en;//记录使能
uint8_t is_rec;//已记录数据
uint8_t replay_V_en;//回放电压使能
uint8_t replay_PWM_en;//回放电压使能

#define rec_maxLen 1000
float rec_V[rec_maxLen];
uint16_t rec_frq[rec_maxLen];
uint8_t  rec_duty[rec_maxLen];
uint16_t rec_pointer;//当前记录的数组下标
uint16_t rec_interval;//每两个数之间的时间间隔

 

void LED_Disp(uint8_t dsLED)
{
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void LED_Chg(uint8_t num,uint8_t sta)
{
    uint8_t pos=0x01<<(num-1);
    led_sta=(led_sta&(~pos))|(pos*sta);
    LED_Disp(led_sta);
}
float adc_read_os(ADC_HandleTypeDef *hadc)
{

//定义两个变量一个接收传回值,最后一个接收经过处理的函数
    uint16_t adc_val;
    float adc_f;
    HAL_ADC_Start(hadc);
    adc_val=HAL_ADC_GetValue(hadc);
    adc_f=adc_val*3.3f/65536.0f;
    return adc_f;
}
void LCD_Show(void)
{
    if(view==0)//实时数据界面
{
        sprintf(text,"        DATA  ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
		sprintf(text,"     F=%d   ",frq);//输入到 PA1 引脚的信号频率
		LCD_DisplayStringLine(Line3,(uint8_t *)text);
		sprintf(text,"     D=%d%%   ",duty);//占空比
		LCD_DisplayStringLine(Line4,(uint8_t *)text);
		sprintf(text,"     A=%.1f   ",adc_data_PB15);//电位器 R37 输出的实时电压值
		LCD_DisplayStringLine(Line5,(uint8_t *)text);
		sprintf(text,"     T=%.1f   ",DS_temp);//采集到的环境温度值(T)
		LCD_DisplayStringLine(Line6,(uint8_t *)text);
}

    if(view==1)//报警参数界面
	{
		sprintf(text,"        PARA  ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
		sprintf(text,"     FH=%d   ",FH_t);//频率上限参数
		LCD_DisplayStringLine(Line3,(uint8_t *)text);
		sprintf(text,"     AH=%.1f   ",AH_t);//电压上限参数
		LCD_DisplayStringLine(Line4,(uint8_t *)text);
		sprintf(text,"     TH=%d   ",TH_t);//温度上限参数
		LCD_DisplayStringLine(Line5,(uint8_t *)text);		
	}

    if(view==2)// 报警统计界面
	{
		sprintf(text,"        RECD  ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
		sprintf(text,"     FN=%d   ",FN);//频率报警次数
		LCD_DisplayStringLine(Line3,(uint8_t *)text);
		sprintf(text,"     AN=%d   ",AN);//电压报警次数
		LCD_DisplayStringLine(Line4,(uint8_t *)text);
		sprintf(text,"     TN=%d   ",TN);//温度报警次数
		LCD_DisplayStringLine(Line5,(uint8_t *)text);
	}

    if(view==3)// 回放设置界面
	{
		sprintf(text,"        FSET  ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
		sprintf(text,"     FP=%d   ",FP_t);//脉冲信号回放分频系数
		LCD_DisplayStringLine(Line3,(uint8_t *)text);
		sprintf(text,"     VP=%.1f   ",VP_t);//电压信号回放最小值
		LCD_DisplayStringLine(Line4,(uint8_t *)text);
		sprintf(text,"     TT=%d   ",TT_t);// 记录回放时间
		LCD_DisplayStringLine(Line5,(uint8_t *)text);
	}	

}
void key_proc()
{
    if(bkey[1].short_flag==1)
	{
		view++;
		if(view>3)view=0;
		LCD_Clear(Black);
		para_sel=0;
		
		if(view==2)//生效
		{
			FH=FH_t;
			AH=AH_t;
			TH=TH_t;
		}
		if(view==0)
		{
			FP=FP_t;
			VP=VP_t;
			TT=TT_t;
		}
		bkey[1].short_flag=0;
	}	
	if(bkey[2].short_flag==1)
	{
		if(view==0)
		{
			rec_en=1;
			rec_interval=(TT*1000)/rec_maxLen;
			rec_pointer=0;
			
			for(int i=0;i<rec_maxLen;i++)
			{
				rec_V[i]=0;
				rec_frq[i]=0;
				rec_duty[i]=0;
			}
		}
		if(view==1||view==3) 
		{
			para_sel++;
			if(para_sel>2)para_sel=0;
		}
		if(view==2) FN=AN=TN=0;
		bkey[2].short_flag=0;
	}		
	if(bkey[3].short_flag==1)
	{
		if(view==1)
		{
			if(para_sel==0)FH_t+=1000;
			else if(para_sel==1)AH_t+=0.3f;
			else if(para_sel==2)TH_t+=1;
			
			if(FH_t>10000)FH_t=10000;
			if(AH_t>3.3f)AH_t=3.3f;
			if(TH_t>80)TH_t=80;
		}
		if(view==3)
		{
			if(para_sel==0)FP_t+=1;
			else if(para_sel==1)VP_t+=0.3f;
			else if(para_sel==2)TT_t+=2;
			
			if(FP_t>10)FP_t=10;
			if(VP_t>3.3f)VP_t=3.3f;
			if(TT_t>10)TT_t=10;			
		}	
		if(view==0&&is_rec==1) 
		{
			replay_V_en=1;
			HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);
			
			rec_pointer=0;
		}
		bkey[3].short_flag=0;
	}		
	if(bkey[4].short_flag==1)
	{
		if(view==1)
		{
			if(para_sel==0)FH_t-=1000;
			else if(para_sel==1)AH_t-=0.3f;
			else if(para_sel==2)TH_t-=1;
			
			if(FH_t<1000)FH_t=1000;
			if(AH_t<0.0f)AH_t=0.0f;
			if(TH_t<0)TH_t=0;
		}
		if(view==3)
		{
			if(para_sel==0)FP_t-=1;
			else if(para_sel==1)VP_t-=0.3f;
			else if(para_sel==2)TT_t-=2;
			
			if(FP_t<1)FP_t=1;
			if(VP_t<0.0f)VP_t=0.0f;
			if(TT_t<2)TT_t=2;		
		}	
		if(view==0&&is_rec==1) 
		{
			replay_PWM_en=1;
			HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);
			rec_pointer=0;
		}
		
		bkey[4].short_flag=0;
	}		
	static uint8_t Llong=0;
	if(bkey[5].long_flag==1)
	{
		if(Llong==0)
		{
			FN=AN=TN=0;//频率报警次数(FN)、电压报警次数(AN)和温度报警次数(TN)。
			FH=2000;TH=30;//频率上限参数\温度上限参数
			AH=3.0f;//电压上限参数
			FP=1;TT=6;//脉冲信号回放分频系数、记录回放时间
			VP=0.9;//电压信号回放最小值		
			view=0;
			
			is_rec=0;
			replay_V_en=0;//回放电压使能
			replay_PWM_en=0;//回放电压使能
			
			FH_t=2000;TH_t=30;//频率上限参数\温度上限参数
			AH_t=3.0f;//电压上限参数
			FP_t=1;TT_t=6;//脉冲信号回放分频系数、记录回放时间
			VP_t=0.9;//电压信号回放最小值	
			
			Llong=1;
		}
		bkey[3].short_flag=0;bkey[4].short_flag=0;
	}
	else Llong=0;
}
void LED_proc()
{
	if(uwTick-time100ms>100)
	{
		static uint8_t blink=0;
		blink=!blink;
		if(rec_en) LED_Chg(1,blink);
		else LED_Chg(1,0);
		if(replay_PWM_en) LED_Chg(2,blink);
		else LED_Chg(2,0);
		if(replay_V_en) LED_Chg(3,blink);
		else LED_Chg(3,0);
		time100ms=uwTick;
	}
	
	if(frq>FH) LED_Chg(4,1);
	else       LED_Chg(4,0);
	if(adc_data_PB15>AH) LED_Chg(5,1);
	else      					 LED_Chg(5,0);	
	if(DS_temp>TH) LED_Chg(6,1);
	else    		   LED_Chg(6,0);	
}
void alarm_proc()
{
	static uint8_t LF=0,LA=0,LT=0;
	if(frq>FH)
	{
		if(LF==0)
		{
			FN++;
			LF=1;
		}
	}
	else LF=0;
	
	if(adc_data_PB15>AH)
	{
		if(LA==0)
		{
			AN++;
			LA=1;
		}
	}
	else  LA=0;
	if(DS_temp>TH)
	{
		if(LT==0)
		{
			TN++;
			LT=1;
		}
	}
	else LT=0;	
}

 

void rec_proc()
{
	adc_data_PB15=adc_read_os(&hadc2);
	frq=1000000.0f/(HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2)+1);
	duty=((HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1)+1)*100.0f/((HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2)+1)));
	
	static uint16_t time_inv=0;
	if(rec_en==1)
	{
		if(time_inv>=rec_interval)
		{
			rec_V[rec_pointer]=adc_data_PB15;
			rec_frq[rec_pointer]=frq;
			rec_duty[rec_pointer]=duty;
			rec_pointer++;	
			time_inv=0;
			if(rec_pointer>=rec_maxLen)
			{
				rec_en=0;
				is_rec=1;
			}
		}
		time_inv++;
	}
}
void replay_proc()
{
	static uint16_t time_inv=0;
	if(replay_PWM_en==1)
	{
		if(time_inv>=rec_interval)
		{
			__HAL_TIM_SET_AUTORELOAD(&htim17,(10000000/(rec_frq[rec_pointer]/FP))-1);
			__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,((10000000/(rec_frq[rec_pointer]/FP))-1)*(rec_duty[rec_pointer]/100.0f));
			rec_pointer++;
			time_inv=0;
			if(rec_pointer>=rec_maxLen)
			{
				HAL_TIM_PWM_Stop(&htim17,TIM_CHANNEL_1);
				replay_PWM_en=0;
			}
		}
		time_inv++;
	}
	if(replay_V_en==1)
	{
		__HAL_TIM_SetAutoreload(&htim17,10000-1);
		if(time_inv>=rec_interval)
		{
			uint16_t duty_temp;
			if(rec_V[rec_pointer]<VP)duty_temp=1000;
			else if(rec_V[rec_pointer]>3.3f)duty_temp=10000;
			else duty_temp=10000*((0.9f/(3.3f-VP))*(rec_V[rec_pointer]-3.3f)+1);
			
			__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,duty_temp);
			rec_pointer++;
			time_inv=0;
			if(rec_pointer>=rec_maxLen)
			{
				HAL_TIM_PWM_Stop(&htim17,TIM_CHANNEL_1);
				replay_V_en=0;
			}
		}
		time_inv++;
	}
}
void setup()
{
	HAL_TIM_Base_Start_IT(&htim6);
	//TIM2_CH2输入  PA1
	HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_1);
	HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_2);
	HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
	
	LED_Disp(0x00);//关掉所有LED
	LCD_Init();//LCD初始化
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
	ds18b20_init_x();
	
	time100ms=uwTick;
}
void loop()
{
	LCD_Show();
	key_proc();
	LED_proc();
	alarm_proc();
	
	DS_temp=ds18b20_read();
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM6)
		if(rec_en==0)key_serv_long();
}	

 ----------------------------key------------------------------------------------

#include "key.h"

struct Bkeys bkey[6]={0,0,0,0};

uint8_t key_read()
{
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0&&HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)return 5;
	else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0) return 1;
	else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0) return 2;
	else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0) return 3;
	else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0) return 4;
	else return 0;
}

/*长按快速增加功能*/
void key_serv_long()
{
	uint8_t key_sta=key_read();
	if(key_sta!=0)
	{
		bkey[key_sta].age++;
		if(bkey[key_sta].age>1) bkey[key_sta].press=1;
	}
	else
	{
		for(int i=0;i<6;i++) 
		{
			if(bkey[i].press==1&&bkey[i].long_flag==0)
				bkey[i].short_flag=1;
			bkey[i].age=0;
			bkey[i].press=0;
			bkey[i].long_flag=0;
		}
	}
	if(bkey[key_sta].age>199) bkey[key_sta].long_flag=1;
}

 

/------------------------stm32g4xx_it------------------------/

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
	rec_proc();
	replay_proc();
  /* USER CODE END SysTick_IRQn 1 */
}

 

 

 

 

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

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

相关文章

C# volatile 使用详解

总目录 前言 在多线程编程中&#xff0c;确保线程之间的正确同步和可见性是一个关键挑战。C# 提供了多种机制来处理这些挑战&#xff0c;其中之一就是 volatile 关键字。它用于指示编译器和运行时环境不要对特定变量进行某些优化&#xff0c;以保证该变量的读写操作是线程安全…

基于OSAL的嵌入式裸机事件驱动框架——整体架构调度机制

参考B站up主【架构分析】嵌入式祼机事件驱动框架 感谢大佬分享 任务ID &#xff1a; TASK_XXX TASK_XXX 在系统中每个任务的ID是唯一的&#xff0c;范围是 0 to 0xFFFE&#xff0c;0xFFFF保留为SYS_TSK_INIT。 同时任务ID的大小也充当任务调度的优先级&#xff0c;ID越大&#…

理解C++中的右值引用

右值引用&#xff0c;顾名思义&#xff0c;就是对一个右值进行引用&#xff0c;或者说给右值一个别名。右值引用的规则和左值一用一模一样&#xff0c;都是对一个值或者对象起个别名。 1. 右值引用和左值引用一样&#xff0c;在定义的同时必须立即赋值&#xff0c;如果不立即赋…

寒假1.23

题解 web&#xff1a;[极客大挑战 2019]Secret File&#xff08;文件包含漏洞&#xff09; 打开链接是一个普通的文字界面 查看一下源代码 发现一个链接&#xff0c;点进去看看 再点一次看看&#xff0c;没什么用 仔细看&#xff0c;有一个问题&#xff0c;当点击./action.ph…

分布式版本控制系统:Git

1 Git概述 Git官网&#xff1a;https://git-scm.com/ Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目Git易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库、方便的暂存区域和多个工作流分支等特性…

< OS 有关 > 阿里云:轻量应用服务器 的使用 :轻量化 阿里云 vpm 主机

原因&#xff1a; &#xff1c; OS 有关 &#xff1e; 阿里云&#xff1a;轻量应用服务器 的使用 &#xff1a;从新开始 配置 SSH 主机名 DNS Tailscale 更新OS安装包 最主要是 清除阿里云客户端这个性能杀手-CSDN博客 防止 I/O 祸害系统 操作&#xff1a; 查看进程&#x…

工业相机 SDK 二次开发-Sherlock插件

本文介绍了 sherlock 连接相机时的插件使用。通过本套插件可连接海康的工业相机。 一&#xff0e;环境配置 1. 拷贝动态库 在用户安装 MVS 目录下按照如下路径 Development\ThirdPartyPlatformAdapter 找到目 录为 DalsaSherlock 的文件夹&#xff0c;根据 Sherlock 版本找到…

为什么机器学习中梯度下降是减去斜率,而不是按照其数学意义减去斜率的倒数

做个简单假设&#xff0c;Loss函数的某一个参数的函数曲线是二次方程&#xff0c;其导数函数为 r 2 ∗ w r 2*w r2∗w 按照斜率意义来看&#xff0c;要减去斜率倒数 降低LOSS需要将w1更新为w2&#xff0c;所以更新公式为 w w − Δ L Δ w w w - \frac{\Delta L}{\Delta w…

Linux高级--3.3.2 自定义协议设计--ProtoBuf

一、自定义协议设计的必要性 自定义通信协议通常有以下几个原因&#xff0c;尤其在IM即时通信、节点服务器、HTTP协议、Nginx、Redis协议、SOME/IP协议和DoIP协议等场景中&#xff0c;设计和使用自定义协议能带来特定的优势&#xff1a; 1. 性能优化 更高效的资源利用&#…

技术总结:FPGA基于GTX+RIFFA架构实现多功能SDI视频转PCIE采集卡设计方案

目录 1、前言工程概述免责声明 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Block for PCI ExpressRIFFA驱动及其安装QT上位机HDMI输出RGB转BT…

docker 部署 java 项目详解

在平常的开发工作中&#xff0c;我们经常需要部署项目&#xff0c;开发测试完成后&#xff0c;最关键的一步就是部署。今天我们以若依项目为例&#xff0c;总结下部署项目的整体流程。简单来说&#xff0c;第一步&#xff1a;安装项目所需的中间件&#xff1b;第二步&#xff1…

动手学图神经网络(2):跆拳道俱乐部案例实战

动手学图神经网络&#xff08;2&#xff09;&#xff1a;跆拳道俱乐部案例实战 在深度学习领域&#xff0c;图神经网络&#xff08;GNNs&#xff09;能将传统深度学习概念推广到不规则的图结构数据&#xff0c;使神经网络能够处理对象及其关系。将基于 PyTorch Geometric 库&a…

Elastic Agent 对 Kafka 的新输出:数据收集和流式传输的无限可能性

作者&#xff1a;来 Elastic Valerio Arvizzigno, Geetha Anne 及 Jeremy Hogan 介绍 Elastic Agent 的新功能&#xff1a;原生输出到 Kafka。借助这一最新功能&#xff0c;Elastic 用户现在可以轻松地将数据路由到 Kafka 集群&#xff0c;从而实现数据流和处理中无与伦比的可扩…

1.25学习

web bugku-源代码 打开环境后看到了一个提交的界面&#xff0c;我们根据题目查看源代码&#xff0c;看到了js代码&#xff0c;其中有几处是url编码&#xff0c;我们对其进行解码&#xff0c;后面的unescape&#xff08;&#xff09;函数就是将p1解码以及%35%34%61%61%32p2解码…

Hive详细讲解-基础语法快速入门

文章目录 1.DDL数据库相关操作1.1创建数据库1.2指定路径下创建数据库1.3添加额外信息创建with dbproperties1.4查看数据库 结合like模糊查询 2.查看某一个数据库的相关信息2.1.如何查看数据库信息&#xff0c;extended可选2.2修改数据库 3.Hive基本数据类型4.复杂数据类型5.类型…

深度解析:基于Vue 3与Element Plus的学校管理系统技术实现

一、项目架构分析 1.1 技术栈全景 核心框架&#xff1a;Vue 3 TypeScript UI组件库&#xff1a;Element Plus&#xff08;含图标动态注册&#xff09; 状态管理&#xff1a;Pinia&#xff08;用户状态持久化&#xff09; 路由方案&#xff1a;Vue Router&#xff08;动态路…

基于Django的个人博客系统的设计与实现

【Django】基于Django的个人博客系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python作为主要开发语言&#xff0c;结合Django框架构建后端逻辑&#xff0c;并运用J…

【架构面试】一、架构设计认知

涉及分布式锁、中间件、数据库、分布式缓存、系统高可用等多个技术领域&#xff0c;旨在考查候选人的技术深度、架构设计能力与解决实际问题的能力。 1. 以 Redis 是否可以作为分布式锁为例&#xff1a; 用 Redis 实现分布式锁会存在哪些问题&#xff1f; 死锁&#xff1a;如果…

DrawDB:超好用的,免费数据库设计工具

DrawDB&#xff1a;超好用的&#xff0c;免费数据库设计工具 引言 在软件开发过程中&#xff0c;数据库设计是一个至关重要的环节。 无论是关系型数据库还是非关系型数据库&#xff0c;良好的数据库设计都能显著提升系统的性能和可维护性。 然而&#xff0c;数据库设计往往…

如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt

文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格&#xff0c;并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码&#xff08;部分&#xff09; 本文测试代码已上传&#xff0c;路径如下&#xff…