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

news2024/11/27 19:55:10

温馨提示:

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

解题记录:

草稿:

功能分析:

主要流程和全局变量: 

 功能函数分析:

过程中遇到的问题:

  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

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

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

相关文章

了解 LoadRunner 性能测试软件及其基础使用

目录 一、了解LoadRunner 1、什么是Loadrunner&#xff1f; 2、Loadrunner包括什么组件&#xff1f; &#xff08;1&#xff09;前台组件 &#xff08;2&#xff09;后台组件 二、LoadRunner三大组件 1、VuGen&#xff08;虚拟用户脚本生成器&#xff09; &#xff08;…

2024全开源小狐狸ai付费创作系统V2.8.0

源码介绍 小狐狸GPT付费体验系统的开发基于国外很火的ChatGPT&#xff0c;这是一种基于人工智能技术的问答系统&#xff0c;可以实现智能回答用户提出的问题。相比传统的问答系统&#xff0c;ChatGPT可以更加准确地理解用户的意图&#xff0c;提供更加精准的答案。同时&#x…

算法---动态规划练习-10(删除并获得点数)

题目 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 rob_s函数&#xff1a;这个函数实现了经典的"打家劫舍"问题的算法。使用动态规划的思想&#xff0c;通过填表的方式计算在给定范围内能够获取的最大点数。 f和…

Windows入侵排查

目录 0x00 前言 0x01 入侵排查思路 1.1 检查系统账号安全 1.2 检查异常端口、进程 1.3 检查启动项、计划任务、服务 0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时&#xff0c;急需第一时间进行处理&#xff0c;使企业的网络信息系统在最短时…

PAT(多路复用)配置

PAT&#xff08;多路复用&#xff09; 核心&#xff1a;多个内网IP对应一个公共IP 如下图&#xff1a; 配置命令&#xff1a; 第一步&#xff08;定义访问控制列表&#xff09; access-list 编号 permit 网络地址 反掩码 第二步&#xff08;定义合法的外部IP&#xff09; ip …

杰发科技——Jlink插件使用

0. 简介 杰发自带的烧录工具是ATCLink&#xff0c;基于DapLink适配。个人不太喜欢ATCLink&#xff0c;推荐使用Jlink&#xff0c;毕竟自己买&#xff0c;不用问原厂要&#xff0c;而且带Jlink&#xff0c;至少5Mhz以上。 V9烧录器使用7.50以下版本驱动。 V11烧录器可以使用7…

JavaSE:继承和多态(下篇)

目录 一、前言 二、多态 &#xff08;一&#xff09;多态的概念 &#xff08;二&#xff09;多态实现条件 &#xff08;三&#xff09;多态的优缺点 三、重写 &#xff08;一&#xff09;重写的概念 &#xff08;二&#xff09;重写的规则 &#xff08;三&#xff09;重…

AtCoder+ABC129_Typical Stairs

题目描述 有一个有 N 级台阶的楼梯。高桥现在站在楼梯的脚下&#xff0c;也就是第0个台阶上。他可以一次爬上一个或两个台阶。 但是&#xff0c;编号为a[1] ~ a[m]台阶的踏板都坏了&#xff0c;所以踏上这些台阶很危险。 在不踏上坏掉的台阶的情况下&#xff0c;有多少中方案…

《书生·浦语大模型全链路开源开放体系》学习笔记

书生浦语大模型全链路开源开放体系-学习笔记 大模型成为发展通用人工智能的重要途径专用模型通用大模型 书生大模型开源历程InternLM2回归语言建模的本质主要亮点性能全方位提升强大的内生计算能力 从模型到应用典型流程全链条开源开放体系数据数据集获取预训练微调XTuner 评测…

unipush 2.0流程及踩坑记录(后端调用接口,前端推送)

unipush 在线离线示例 在DCLOUD开发者中心里面创建unipush的应用 如果遇到选择Android 包名后没有自动生成Android 应用签名的话&#xff0c;就是下图这样的。 这个情况多半就是通过直接创建云端证书造成的&#xff0c;没有编辑应用信息 没有云端证书的看这里 在我的应用&…

62岁「御用变态佬」近况曝光。

现年62岁的吴毅将于90年代活跃于香港影坛&#xff0c;因经常扮演黑社会大佬、变态色魔等角色&#xff0c;而被封为影坛御用恶人&#xff0c;其反派形象亦深入民心。北上发展多年的吴毅将&#xff0c;近年不时在内地登台&#xff0c;不过日前却有一段他在台上发恶闹观众的片段被…

作业 二维数组-定位问题

图形相似度 描述 给出两幅相同大小的黑白图像&#xff08;用0-1矩阵&#xff09;表示&#xff0c;求它们的相似度。 说明&#xff1a;若两幅图像在相同位置上的像素点颜色相同&#xff0c;则称它们在该位置具有相同的像素点。 两幅图像的相似度定义为相同像素点数占总像素点数…

Linux下开发调试C++代码的三种方法

目录 准备程序配置vscode的json文件调试使用GDB命令行调试使用core文件调试 一般来说&#xff0c;Linux下做C开发都是用vscode远程连接的方式&#xff0c;这时候调试有三种方式&#xff1a;配置vscode的json文件调试、GDB命令行调试、通过core文件调试。 关于这三种调试方法的…

ssm停车场管理系统

点赞收藏关注 → 私信领取本源代码、数据库 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于停车场管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了停…

【PHP编程使用UI框架】——GET和POST的请求方法

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

VIVADO IBERT学习

V7的IBERT可以用来测试误码&#xff0c;但是使用中有诸多限制&#xff0c;例化工程测试下效果。 1.IP中例化一个IBERT 2.QUAD代表包含几个4lane的PLL&#xff0c;因为QPLL下面挂4个lane&#xff0c;一个bank包含4条&#xff0c;所以就是bank数量。如果协议层例化为2个&#x…

SQLite版本3中的文件锁定和并发(七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;自己编译SQLite或将SQLite移植到新的操作系统&#xff08;六&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 正文&#xff1a; 1.0 SQLite 版本 3 中的文件锁定和并发 SQLite 版本 3.0.0 引入了新的锁…

MySQL(常用函数、多表查询)

文章目录 1.数据库函数1.count函数案例答案count&#xff08;*&#xff09;与count&#xff08;列&#xff09;的区别 2.sum函数案例答案 3.avg函数案例答案 4.max/min函数案例答案 5.group by 分组统计案例答案 6.字符串相关函数演示练习 7.数学相关函数演示 8.日期相关函数演…

基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400

摘 要 付费自习室管理系统采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的java进行编写&#xff0c;使用了springboot框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户…

Chatopera 云服务的智能问答引擎实现原理,如何融合 #聊天机器人 技术 #Chatbot #AI #NLP

观看视频 Bilibili: https://www.bilibili.com/video/BV1pZ421q7EH/YouTube: https://www.youtube.com/watch?vx0d1_0HQa8o 内容大纲 提前在浏览器打开网址&#xff1a; Chatopera 云服务&#xff1a;https://bot.chatopera.comChatopera 入门教程&#xff1a;https://dwz…