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

蓝桥杯嵌入式第12届真题(完成) STM32G431

蓝桥杯嵌入式第12届真题(完成) STM32G431

题目

image-20240215012813131

image-20240215012824875

image-20240215012849030

image-20240215012900044

image-20240215012916324

image-20240215012929908

image-20240215012938452

程序

main.c

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.* All rights reserved.</center></h2>** This software component is licensed by ST under BSD 3-Clause license,* the "License"; You may not use this file except in compliance with the* License. You may obtain a copy of the License at:*                        opensource.org/licenses/BSD-3-Clause********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "led.h"
#include "key.h"
#include "usart1.h"
#include "stdio.h"
#include "string.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
uint8_t view = 1;
uint8_t carnums = 8;
uint8_t CNBRnums = 2;
uint8_t VNBRnums = 4;
uint8_t IDLEnums = 2;
float CNBRprice = 3.50f;
float VNBRprice = 2.00f;
uint8_t lcdtext[20];
extern struct Key key[4];
uint8_t pwm = 0;
extern uint8_t rxflag;
extern uint8_t rxdata[1];
extern uint8_t rxindex;
extern uint8_t rxbuffer[22];
uint8_t cartype[4];
uint8_t carnum[4];
uint8_t cartime[12];
uint8_t printtext[30];
struct Times
{int year;int month;int day;int hour;int min;
};
struct Cars // 串口接收
{char carKind[5]; //车型char carNum[5];  //车牌号char carTime[12]; //进入时间struct Times Time;
};struct Cars car;
struct Cars park[8]={0,0,0,0,0,0,0,0}; 
float stopprice;
uint8_t led,led1enable,led2enable;
int monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
uint8_t isError = 0;
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void key_process(void);
void usart1_process(void);
void lcd_process(void);
void led_process(void);
void outpark(uint8_t car_num);
void inpark(void);
void isErrorProcess(void);
void lcdclear(void);
int isLeapYear(int year);
long dateToTotalMinutes(struct Times t);
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* 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_TIM2_Init();MX_TIM17_Init();MX_USART1_UART_Init();HAL_TIM_Base_Start_IT(&htim2);HAL_UART_Receive_IT(&huart1,rxdata,1);/* USER CODE BEGIN 2 */LCD_Init();lcdclear();led_Display(0x00);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){key_process();usart1_process();lcd_process();led_process();isErrorProcess();/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Configure the main internal regulator output voltage*/HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;RCC_OscInitStruct.PLL.PLLN = 20;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}/** Initializes the peripherals clocks*/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 */
void key_process(void)
{if(key[0].key_single_flag){key[0].key_single_flag = 0;if(view==1){view = 2;}else{view = 1;}}if(key[1].key_single_flag){key[1].key_single_flag = 0;if(view==2){CNBRprice+=0.5f;VNBRprice+=0.5f;}}if(key[2].key_single_flag){key[2].key_single_flag = 0;if(view==2){CNBRprice-=0.5f;VNBRprice-=0.5f;}}if(key[3].key_single_flag){key[3].key_single_flag = 0;pwm=!pwm;if (pwm){HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,200);}else{HAL_TIM_PWM_Stop(&htim17, TIM_CHANNEL_1); // 停止PWMHAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // 设置PA7为低电平}}}
void outpark(uint8_t car_num)
{sscanf(car.carTime, "%4d%2d%2d%2d%2d", &car.Time.year, &car.Time.month, &car.Time.day, &car.Time.hour, &car.Time.min);// 计算两个时间点的总分钟数long carTimeInMin = dateToTotalMinutes(car.Time);long parkTimeInMin = dateToTotalMinutes(park[car_num].Time);// 计算经过的总时间(以分钟为单位),并转换为小时long diffInMin = carTimeInMin - parkTimeInMin;int hoursPassed = diffInMin / 60;// 如果不满一小时,则按一小时计算if(diffInMin % 60 > 0) {hoursPassed++;}// 保证至少为1小时if(hoursPassed <= 0) {hoursPassed = 1;}if(strcmp(car.carKind,"VNBR") ==0){VNBRnums --;IDLEnums ++;stopprice=hoursPassed*VNBRprice;}else if(strcmp(car.carKind,"CNBR") ==0){CNBRnums --;IDLEnums ++;stopprice=hoursPassed*CNBRprice;}memset(&park[car_num],0,sizeof(park[car_num]));sprintf((char *)printtext,"%s:%s:%d:%.2f\r\n",car.carKind,car.carNum,hoursPassed,stopprice);HAL_UART_Transmit(&huart1,printtext,strlen((char *)printtext),50);}void inpark(void)
{sscanf(car.carTime, "%4d%2d%2d%2d%2d", &car.Time.year, &car.Time.month, &car.Time.day, &car.Time.hour, &car.Time.min);for (int i = 0; i < 8; i++) {// 查找第一个空位if (park[i].carNum[0] == '\0') { // 假设未使用的车位carNum为'\0'park[i] = car;// 更新车位统计信息if (strcmp(car.carKind, "CNBR") == 0) {CNBRnums++;IDLEnums--;} else if (strcmp(car.carKind, "VNBR") == 0) {VNBRnums++;IDLEnums--;}break; // 退出循环}}}void usart1_process(void)
{if(rxflag){rxflag = 0;rxindex = 0;int parsedItems = sscanf((char*)rxbuffer,"%4s:%4s:%12s",car.carKind,car.carNum,car.carTime);if(parsedItems == 3){if(strcmp(car.carKind,"CNBR")==0||strcmp(car.carKind,"VNBR")==0)//格式正确{for(int i = 0;i < 8;i++){if(strcmp(park[i].carNum,car.carNum)==0) //车库中有,需要出库{if(strcmp(park[i].carKind,car.carKind) == 0){outpark(i);break;}else{isError = 1;}}else if(strcmp(park[i].carNum,car.carNum)!=0&&IDLEnums>0)//车库中没有需要,入库{inpark();break;}}}else{isError = 1;}}else{isError = 1;}rxflag = 0;rxindex = 0;HAL_UART_Receive_IT(&huart1,rxdata,1);}
}void isErrorProcess(void)
{if(isError == 1){sprintf((char *)printtext,"Error\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)printtext,strlen((char *)printtext),50);isError = 0;}
}
void lcd_process(void)
{switch (view){case 1://车位显示页面{sprintf((char *)lcdtext,"       Data");LCD_DisplayStringLine(Line1,lcdtext);sprintf((char *)lcdtext,"  CNBR:%d",CNBRnums);LCD_DisplayStringLine(Line3,lcdtext);sprintf((char *)lcdtext,"  VNBR:%d",VNBRnums);LCD_DisplayStringLine(Line5,lcdtext);sprintf((char *)lcdtext,"  IDLE:%d",IDLEnums);LCD_DisplayStringLine(Line7,lcdtext);}break;case 2: //费率设置页面{sprintf((char *)lcdtext,"       Para");LCD_DisplayStringLine(Line1,lcdtext);sprintf((char *)lcdtext,"  CNBR:%.2f",CNBRprice);LCD_DisplayStringLine(Line3,lcdtext);sprintf((char *)lcdtext,"  VNBR:%.2f",VNBRprice);LCD_DisplayStringLine(Line5,lcdtext);}break;}
}
void led_process(void)
{if(IDLEnums>0){led1enable = 1;}else{led1enable = 0;}if(pwm==1){led2enable = 1;}else{led2enable = 0;}if(led1enable){led|=0x01;}else{led&=~0x01;}if(led2enable){led|=0x02;}else{led&=~0x02;}led_Display(led);
}void lcdclear()
{LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);
}int isLeapYear(int year) {if (year % 4 != 0) return 0;if (year % 100 != 0) return 1;if (year % 400 == 0) return 1;return 0;
}
long dateToTotalMinutes(struct Times t) {// 添加之前的年份所包含的分钟数long totalMinutes = (t.year - 1) * 365 * 24 * 60;// 添加闰年的额外分钟数totalMinutes += ((t.year - 1) / 4 - (t.year - 1) / 100 + (t.year - 1) / 400) * 24 * 60;// 添加当前年份中之前月份的分钟数for (int i = 0; i < t.month - 1; i++) {totalMinutes += monthDays[i] * 24 * 60;}// 如果当前年份是闰年并且月份大于2,则额外添加一天的分钟数if (t.month > 2 && isLeapYear(t.year)) totalMinutes += 24 * 60;// 添加当前月份中的天数、小时和分钟totalMinutes += (t.day - 1) * 24 * 60; // 天数减1,因为当天不满24小时totalMinutes += t.hour * 60;totalMinutes += t.min;return totalMinutes;
}
/* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state *//* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

key.c

#include "key.h"
struct Key key[4]={0,0,0,0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM2){key[0].key_gpio =  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);key[1].key_gpio =  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[2].key_gpio =  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[3].key_gpio =  HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);for(int i = 0;i<4;i++){switch (key[i].key_status){case 0:{if(key[i].key_gpio==0){key[i].key_status = 1;}}break;case 1:{if(key[i].key_gpio==0){key[i].key_single_flag = 1;key[i].key_status = 2;}else{key[i].key_status = 0;}}break;case 2:{if(key[i].key_gpio==1){key[i].key_status = 0;}}break;}}}}

led.c

#include "led.h"void led_Display(uint8_t led)
{HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOC,led<<8,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

usart1.c

#include "usart1.h"
#include "usart.h"
#include "string.h"
uint8_t rxflag;
uint8_t rxdata[1];
uint8_t rxindex = 0;
uint8_t rxbuffer[22];void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance==USART1){rxbuffer[rxindex++] = rxdata[0];HAL_UART_Receive_IT(huart,rxdata,1);if(rxindex==22){rxflag = 1;}}}

程序很常规,只有串口那里处理比较麻烦,有几个注意事项

  • 使用或和与操作实现单独对led某一位进行操作
  • 需要判断闰年
  • 处理错误,有好几种
  • sscanf解析字符串

相关文章:

蓝桥杯嵌入式第12届真题(完成) STM32G431

蓝桥杯嵌入式第12届真题(完成) STM32G431 题目 程序 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body**************************…...

C#系列-多线程(4)

在C#中&#xff0c;多线程编程主要涉及使用System.Threading命名空间下的类和接口来创建和管理线程。以下是一些C#多线程编程的基本用法和示例&#xff1a; 1. 使用Thread类创建线程 csharp代码 using System; using System.Threading; class Program { static void …...

VS如何调试C运行时库

C运行时库(简称crt)是C标准库等组件的基础, 其会在进入main函数之前运行一些代码, 包括但不限于初始化堆栈, 内存分配等操作     这些代码是可以随着VC工具集一起安装到我们本地的。看一下这个情况, 就是VS调试器没找到对应的crt源码的情况, 调用堆栈是空的。为了解决这个问…...

软件工程师,超过35岁怎么办

概述 随着科技行业的飞速发展&#xff0c;软件开发工程师的职业道路充满了各种机遇和挑战。对于已经在这个行业摸爬滚打了十多年的软件开发工程师来说&#xff0c;当他们步入35岁这个年纪时&#xff0c;可能会感到一些迷茫和焦虑。许多人担忧&#xff0c;在以创新、活力、快速迭…...

通过 Prometheus 编写 TiDB 巡检脚本(脚本已开源,内附链接)

作者丨 caiyfc 来自神州数码钛合金战队 神州数码钛合金战队是一支致力于为企业提供分布式数据库 TiDB 整体解决方案的专业技术团队。团队成员拥有丰富的数据库从业背景&#xff0c;全部拥有 TiDB 高级资格证书&#xff0c;并活跃于 TiDB 开源社区&#xff0c;是官方认证合作伙…...

sql语句学习(一)--查询

【有道云笔记】基本sql语句2—查询基础 数据库表结构 DROP TABLE IF EXISTS class; CREATE TABLE class (id int(11) NOT NULL AUTO_INCREMENT,class_num varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 班级号,class_name varchar(255) CHARACTE…...

【HTML】交友软件上照片的遮罩是如何做的

笑谈 我不知道大家有没有在夜深人静的时候感受到孤苦难耐&#xff0c;&#x1f436;。于是就去下了一些交友软件来排遣寂寞。可惜的是&#xff0c;有些交友软件真不够意思&#xff0c;连一些漂亮小姐姐的图片都要进行遮罩&#xff0c;完全不考虑兄弟们的感受,&#x1f620;。所…...

【Java EE初阶十二】网络编程TCP/IP协议(一)

1. 网络编程 通过网络&#xff0c;让两个主机之间能够进行通信->就这样的通信来完成一定的功能&#xff0c;进行网络编程的时候&#xff0c;需要操作系统给咱们提供一组API&#xff0c;通过这些API来完成编程&#xff1b;API可以认为是应用层和传输层之间交互的路径&#xf…...

element-ui解决上传文件时需要携带请求数据的问题

一、问题描述 在前端使用element-ui进行文件上传时&#xff0c;需要携带请求头信息&#xff0c;比如Token。 二、问题解决 1. 表单实现 action置空添加:http-request属性覆盖默认的上传行为&#xff0c;实现自定义上传文件。注意:src后的图片路径如果是个网络请求(外链)&…...

【AI视野·今日NLP 自然语言处理论文速览 第七十九期】Thu, 18 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 18 Jan 2024 Totally 35 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Deciphering Textual Authenticity: A Generalized Strategy through the Lens of Large Language Semantics …...

Docker容器运行

1、通过--name参数显示地为容器命名&#xff0c;例如:docker run --name “my_http_server” -d httpd 2、容器重命名可以使用docker rename。 3、两种进入容器的方法&#xff1a; 3.1、Docker attach 例如&#xff1a; 每间隔一秒打印”Hello World”。 Sudo docker run…...

【计算机网络】网络层之IP协议

文章目录 1.基本概念2.协议头格式3.网段划分4.特殊的IP地址5.IP地址的数量限制6.私有IP地址和公网IP地址7.路由 1.基本概念 IP地址是定位主机的&#xff0c;具有一个将数据报从A主机跨网络可靠的送到B主机的能力。 但是有能力就一定能做到吗&#xff0c;只能说有很大的概率。…...

2024/2/17 图论 最短路入门 dijkstra 1

目录 算法思路 Dijkstra求最短路 AcWing 849. Dijkstra求最短路 I - AcWing 850. Dijkstra求最短路 II - AcWing题库 最短路 最短路 - HDU 2544 - Virtual Judge (vjudge.net) 【模板】单源最短路径&#xff08;弱化版&#xff09; P3371 【模板】单源最短路径&#xf…...

交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计…...

最适合初学者的Python入门详细攻略,一文讲清,赶紧收藏!

前言 目前python可以说是一门非常火爆的编程语言&#xff0c;应用范围也非常的广泛&#xff0c;工资也挺高&#xff0c;未来发展也极好。 Python究竟应该怎么学呢&#xff0c;我自己最初也是从零基础开始学习Python的&#xff0c;给大家分享Python的学习思路和方法。一味的买…...

幻兽帕鲁新手游戏攻略分享

在幻兽帕鲁中&#xff0c;提高实力是玩家不断追求的目标。以下是一些提高实力的攻略&#xff1a; 1、升级和进化&#xff1a;通过战斗和完成任务&#xff0c;玩家可以获得经验值&#xff0c;提升自己的等级。随着等级的提升&#xff0c;玩家可以获得技能点&#xff0c;用于提升…...

代码随想录算法训练营DAY19 | 二叉树 (6)

一、LeetCode 654 最大二叉树 题目链接&#xff1a;654.最大二叉树https://leetcode.cn/problems/maximum-binary-tree/ 思路&#xff1a;坚持左开右闭原则&#xff0c;递归划分数组元素生成左右子树。 class Solution {public TreeNode constructMaximumBinaryTree(int[] num…...

【C++】实现Date类的各种运算符重载

上一篇文章只实现了operator操作符重载&#xff0c;由于运算符较多&#xff0c;该篇文章单独实现剩余所有的运算符重载。继续以Date类为例&#xff0c;实现运算符重载&#xff1a; 1.Date.h #pragma once#include <iostream> #include <assert.h>using namespace …...

【Linux】程序地址空间 -- 详解 Linux 2.6 内核进程调度队列 -- 了解

一、程序地址空间回顾 在学习 C/C 时&#xff0c;我们知道内存会被分为几个区域&#xff1a;栈区、堆区、全局/静态区、代码区、字符常量区等。但这仅仅是在语言层面上的理解&#xff0c;是远远不够的。 如下空间布局图&#xff0c;请问这是物理内存吗&#xff1f; 不是&…...

10-通用类型、特质和生命周期

上一篇&#xff1a; 09-错误处理 每种编程语言都有有效处理概念重复的工具。在 Rust 中&#xff0c;泛型就是这样一种工具&#xff1a;具体类型或其他属性的抽象替身。我们可以表达泛型的行为或它们与其他泛型的关系&#xff0c;而不需要知道在编译和运行代码时它们的位置。 函…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...