第十届 蓝桥杯 嵌入式 省赛

一、分析

这届的真题,有点像第七届的液位检测。

这届的题目开始,貌似比赛描述的功能,逻辑上变得更好梳理了。一开始就把大致的功能给你说明一遍,不像之前都是一块一块的说明。

1. 基本功能

1)测量竞赛板上电位器 R37 输出的模拟电压信号,并通过 LCD 显示

2)通过 LED 指示灯实现超出上限、低于下限的提醒功能

3)通过按键实现阈值范围和输出提醒指示灯的设置功能

4)通过 E2PROM 实现参数的断电存储功能

2. 显示功能

显示界面有两个:数据显示界面和参数配置界面

1)数据显示界面

  • 显示 界面名称、采集的实时电压数据 和 状态
  • 电压单位为 V,保留小数点后两位
  • 状态(Status):超出上限(Upper)、低于下限(Lower)和正常(Normal)

2)参数配置界面

  • 显示:界面名称、电压上限、电压下限;电压超出上限 LD1,电压低于下限 LD2 指示灯。
  • 电压上下限:0~3.3V,设备应具备错误设置的保护功能

伪代码

typedef enum{Data_Disp,Set_Pama
}Lcd_State;
Lcd_State L_state = Data_Disp;typedef enum{Upper,Lower,Normal
} Volt_Status;
Volt_Status Status = Normal;float R37_Volt_Sum, R37_Volt, R37_Volt_AVE;
unsigned int choose_pama = 1;float Get_Volt(){//均值滤波for(int i = 0; i < 9; i++){R37_Volt = ADC_Get1();R37_Volt_Sum += R37_Volt;}//16位精度,分4096R37_Volt_Sum *= 3.3;R37_Volt_Sum /= 4096;R37_Volt_AVE = R37_Volt_AVE/10;return R37_Volt_AVE;
}
void Lcd_Proc(void){if(L_state == Data_Disp){R37_Volt_AVE = Get_Volt();//显示 界面、电压、状态Lcd_Disp(Line0, "Main");Lcd_Disp(Line2, "Volt: %fV", R37_Volt_AVE);Lcd_Disp(Line3, "%s", Status);}else if(L_state == Set_Pama){i2c_read(Save_Volt_Max_Min_Led, 0, 4);Lcd_Disp(Line0, "Setting");if(choose_pama == 1) LCD_SetBackColor(Green);Lcd_Disp(Line1, "Max Volt: %f", Save_Volt_Max_Min_Led[0]);LCD_SetBackColor(White);Lcd_Disp(Line2, "Min Volt: %f", Save_Volt_Max_Min_Led[1]);        Lcd_Disp(Line3, "Upper:LD%d",Save_Volt_Max_Min_Led[2]);Lcd_Disp(Line4, "Lower:LD%d",Save_Volt_Max_Min_Led[3]);}
}

3. 按键功能

1)B1:设置按键,用来切换2个显示界面的。退出参数设置界面时,应将参数保存到 E2PROM

2)B2:选择按键,被选中的需要高亮

3)B3:加    按键,电压增加 0.3V,LED序号+1

4)B3:减    按键,电压减少 0.3V,LED序号-1

LED 范围为:1~8.

伪代码

void Key_Proc(){if(L_state == Data_Disp){if(Key_down == 1){L_state = Set_Pama;}}else if(L_state == Set_Pama){switch (Key_down){case 1:LCD_Clear(White);i2c_write(Save_Volt_Max_Min_Led, 0 , 4);L_state = Data_Disp;break;case 2:if(++choose_pama == 5)choose_pama = 1;break;case 3:switch (choose_pama){case 1:Save_Volt_Max_Min_Led[0]+=3;if(Save_Volt_Max_Min_Led[0] >=33 && Save_Volt_Max_Min_Led[0] <40)Save_Volt_Max_Min_Led[0] = 33;break;case 2:if((Save_Volt_Max_Min_Led[1]+3)<Save_Volt_Max_Min_Led[0])Save_Volt_Max_Min_Led[1] += 3;    break;case 3://到了8以后,再加就原地不动if(++Save_Volt_Max_Min_Led[2] >= 8)Save_Volt_Max_Min_Led[2] = 8;//如果相同if(Save_Volt_Max_Min_Led[2] == Save_Volt_Max_Min_Led[3]){if(Save_Volt_Max_Min_Led[3] == 8){Save_Volt_Max_Min_Led[2]=7;}else {Save_Volt_Max_Min_Led[2] += 1;}}break;case 4:if(++Save_Volt_Max_Min_Led[3] >= 8)Save_Volt_Max_Min_Led[2] = 8;if(Save_Volt_Max_Min_Led[2] == Save_Volt_Max_Min_Led[3]){if(Save_Volt_Max_Min_Led[2] == 8){Save_Volt_Max_Min_Led[3]=7;}else {Save_Volt_Max_Min_Led[3] += 1;}}break;                    }break;case 4:switch (choose_pama){case 1:if((Save_Volt_Max_Min_Led[1]+3) < Save_Volt_Max_Min_Led[0])Save_Volt_Max_Min_Led[0] -= 3;break;case 2:Save_Volt_Max_Min_Led[1] -= 3;if(Save_Volt_Max_Min_Led[1] >= 200)//补码Save_Volt_Max_Min_Led[1] = 0;break;case 3:if(--Save_Volt_Max_Min_Led[2] == 0)Save_Volt_Max_Min_Led[2] = 1;if(Save_Volt_Max_Min_Led[2] == Save_Volt_Max_Min_Led[3]){if(Save_Volt_Max_Min_Led[3] == 1){Save_Volt_Max_Min_Led[2] = 2;}else {Save_Volt_Max_Min_Led[2] -= 1;}}break;case 4:if(--Save_Volt_Max_Min_Led[3] == 0)Save_Volt_Max_Min_Led[3] = 1;if(Save_Volt_Max_Min_Led[3] == Save_Volt_Max_Min_Led[2]){if(Save_Volt_Max_Min_Led[2] == 1){Save_Volt_Max_Min_Led[3] = 2;}else {Save_Volt_Max_Min_Led[3] -= 1;}}break;            }}}
}

4. LED 指示灯

1)R37 输出电压值超过电压上限值时,上限提醒指示灯以 0.2 秒闪烁,下限指示灯熄灭。

2)R37 输出电压值低于电压下限值时,下限提醒指示灯以 0.2 秒闪烁,上限指示灯熄灭。

3)R37 输出电压值介于上限和下限电压之间时,全灭。

伪代码

ucled = 0x0;
void Led_Proc(void){if(R37_Volt_AVE*10 >= Save_Volt_Max_Min_Led[0]){   ucled ^= (0x01 << (Save_Volt_Max_Min_Led[2]-1));Status = Upper;}else if(R37_Volt_AVE*10 <= Save_Volt_Max_Min_Led[1]){ucled ^= (0x01 << (Save_Volt_Max_Min_Led[3]-1));Status = Lower;}else if( Save_Volt_Max_Min_Led[1] <= R37_Volt_AVE <= Save_Volt_Max_Min_Led[0]){Led_Disp(0x00);Status = Normal;}}

5. 初始状态

1)重新上电,从 E2PROM 载入各个参数。

2)默认指示灯 LD1 和 LD2

3)默认阈值 2.4V 和 1.2V

unsigned int Save_Volt_Max_Min_Led[4] = {24,12,1,2};

二、CubeMx

这次只用配置 Key、LED、ADC即可。打开赛点资源包,按照原理图配置。

1. LED

2. Key

3. ADC

三、模版编写

1. LED

void Led_Disp(uint8_t ucled){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, 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, ucled << 8, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}

2. Key

uint8_t Key_Scan(){uint8_t Key_val;if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)==GPIO_PIN_RESET)Key_val = 1;if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)==GPIO_PIN_RESET)Key_val = 2;if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2)==GPIO_PIN_RESET)Key_val = 3;if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)==GPIO_PIN_RESET)Key_val = 4;return Key_val;
}

3. ADC

uint16_t Get_ADC2(){uint16_t adc = 0;HAL_ADC_Start(&hadc2);adc = HAL_ADC_GetValue(&hadc2);return adc;
}

4. I2C

void i2c_read(uint8_t* buf, uint8_t addr, uint8_t num){I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0xa1);I2CWaitAck();while(num--){*buf++ = I2CReceiveByte();if(num)I2CSendAck();elseI2CSendNotAck();}I2CStop();
}
void i2c_write(uint8_t* buf, uint8_t addr, uint8_t num){I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();while(num--){I2CSendByte(*buf++);I2CWaitAck();}I2CStop();HAL_Delay(500);
}

四、完整代码编写

1. 全局变量

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "i2c_hal.h"
#include "lcd.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/*两个界面*/
typedef enum{Data_Disp,Set_Pama
}Lcd_State;
Lcd_State L_state = Data_Disp;/*状态*/
typedef enum{Upper,Lower,Normal
} Volt_Status;const char* StatusStrings[] = {"Upper","Lower","Nomal"
};
Volt_Status Status = Normal;
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
float R37_Volt, R37_Volt_Sum, R37_Volt_AVE;
uint8_t Lcd_Str_Disp[21];
uint8_t Save_Volt_Max_Min_Led[4] = {24,12,1,2};uint8_t Key_val, Key_up, Key_down, Key_old;
uint8_t choose_pama = 1;
__IO uint32_t uwTick_Set_Lcd = 0;
__IO uint32_t uwTick_Set_Key = 0;
__IO uint32_t uwTick_Set_Led = 0;uint8_t ucled = 0x0;
/* USER CODE END PD */

2. 主函数

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_ADC2_Init();/* USER CODE BEGIN 2 */LCD_Init();LCD_Clear(White);LCD_SetBackColor(White);LCD_SetBackColor(Blue);I2CInit();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */Lcd_Proc();Key_Proc();Led_Proc();/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

3. 显示功能

void Lcd_Proc(){if((uwTick - uwTick_Set_Lcd) < 100)return;uwTick_Set_Lcd = uwTick;if(L_state == Data_Disp){//R37_Volt_AVE = Get_Volt();R37_Volt_AVE = (((float)Get_ADC2())/4096)*3.3;//显示:界面、电压、状态sprintf((char*) Lcd_Str_Disp, "Main");LCD_DisplayStringLine(Line0, Lcd_Str_Disp);sprintf((char*) Lcd_Str_Disp, "Volt: %4.2fV", R37_Volt_AVE);LCD_DisplayStringLine(Line2, Lcd_Str_Disp);sprintf((char*) Lcd_Str_Disp, "Status:%s", StatusStrings[Status]);LCD_DisplayStringLine(Line3, Lcd_Str_Disp);}else if(L_state == Set_Pama){//i2c_read(Save_Volt_Max_Min_Led, 0, 4);//Volt_Max_Min[0] = Save_Volt_Max_Min_Led[0];//Volt_Max_Min[1] = Save_Volt_Max_Min_Led[1];//ucled_Max = Save_Volt_Max_Min_Led[2];//ucled_Min = Save_Volt_Max_Min_Led[3];sprintf((char*) Lcd_Str_Disp, "Setting");LCD_DisplayStringLine(Line0, Lcd_Str_Disp);sprintf((char*) Lcd_Str_Disp, "Max Volt: %3.2f", (float)Save_Volt_Max_Min_Led[0]/10.0);if(choose_pama == 1) LCD_SetBackColor(Green);LCD_DisplayStringLine(Line1, Lcd_Str_Disp);LCD_SetBackColor(White);sprintf((char*) Lcd_Str_Disp, "Min Volt: %3.2f", (float)Save_Volt_Max_Min_Led[1]/10.0);if(choose_pama == 2) LCD_SetBackColor(Blue);LCD_DisplayStringLine(Line2, Lcd_Str_Disp);LCD_SetBackColor(White);sprintf((char*) Lcd_Str_Disp, "Upper:LD%1d", (uint8_t)Save_Volt_Max_Min_Led[2]);if(choose_pama == 3) LCD_SetBackColor(Blue);LCD_DisplayStringLine(Line3, Lcd_Str_Disp);LCD_SetBackColor(White);sprintf((char*) Lcd_Str_Disp, "Lower:LD%1d", (uint8_t)Save_Volt_Max_Min_Led[3]);if(choose_pama == 4) LCD_SetBackColor(Blue);LCD_DisplayStringLine(Line4, Lcd_Str_Disp);LCD_SetBackColor(White);}
}

4. 按键功能

void Key_Proc(){if((uwTick - uwTick_Set_Key) < 100)return;uwTick_Set_Key = uwTick;Key_val = Key_Scan();Key_down = Key_val & (Key_val ^ Key_old);	Key_up = ~Key_val & (Key_val ^ Key_old);Key_old = Key_val;if(L_state == Data_Disp){if(Key_down == 1){LCD_Clear(White);L_state = Set_Pama;}}else if(L_state == Set_Pama){switch (Key_down){case 1:LCD_Clear(White);i2c_write(Save_Volt_Max_Min_Led, 0 , 4);L_state = Data_Disp;break;case 2:if(++choose_pama == 5)choose_pama = 1;break;case 3:switch(choose_pama){case 1:Save_Volt_Max_Min_Led[0]+=3;if(Save_Volt_Max_Min_Led[0] >=33 && Save_Volt_Max_Min_Led[0] <40)Save_Volt_Max_Min_Led[0] = 33;break;case 2:if((Save_Volt_Max_Min_Led[1]+3)<Save_Volt_Max_Min_Led[0]){Save_Volt_Max_Min_Led[1] += 3;}break;case 3://到了8以后,再加就原地不动if(++Save_Volt_Max_Min_Led[2] >= 8)Save_Volt_Max_Min_Led[2] = 8;//如果相同if(Save_Volt_Max_Min_Led[2] == Save_Volt_Max_Min_Led[3]){if(Save_Volt_Max_Min_Led[3] == 8){Save_Volt_Max_Min_Led[2]=7;}else {Save_Volt_Max_Min_Led[2] += 1;}}break;case 4:if(++Save_Volt_Max_Min_Led[3] >= 8)Save_Volt_Max_Min_Led[2] = 8;if(Save_Volt_Max_Min_Led[2] == Save_Volt_Max_Min_Led[3]){if(Save_Volt_Max_Min_Led[2] == 8){Save_Volt_Max_Min_Led[3]=7;}else {Save_Volt_Max_Min_Led[3] += 1;}}break;}break;case 4:switch(choose_pama){case 1:if((Save_Volt_Max_Min_Led[1]+3) < Save_Volt_Max_Min_Led[0])Save_Volt_Max_Min_Led[0] -= 3;break;case 2:Save_Volt_Max_Min_Led[1] -= 3;if(Save_Volt_Max_Min_Led[1] >= 200)//补码Save_Volt_Max_Min_Led[1] = 0;break;case 3:if(--Save_Volt_Max_Min_Led[2] == 0){Save_Volt_Max_Min_Led[2] = 1;}if(Save_Volt_Max_Min_Led[2] == Save_Volt_Max_Min_Led[3]){if(Save_Volt_Max_Min_Led[3] == 1){Save_Volt_Max_Min_Led[2] = 2;}else {Save_Volt_Max_Min_Led[2] -= 1;}}break;case 4:if(--Save_Volt_Max_Min_Led[3] == 0){Save_Volt_Max_Min_Led[3] = 1;}if(Save_Volt_Max_Min_Led[3] == Save_Volt_Max_Min_Led[2]){if(Save_Volt_Max_Min_Led[2] == 1){Save_Volt_Max_Min_Led[3] = 2;}else {Save_Volt_Max_Min_Led[3] -= 1;}}break;}break;}}
}

5. LED 指示灯

void Led_Proc(){//ucled_Max = Save_Volt_Max_Min_Led[2];//ucled_Min = Save_Volt_Max_Min_Led[3];if((uwTick - uwTick_Set_Led) < 200)return;uwTick_Set_Led = uwTick;if(R37_Volt_AVE*10 >= Save_Volt_Max_Min_Led[0]){ucled ^= (0x01 << (Save_Volt_Max_Min_Led[2]-1));Status = Upper;}else if(R37_Volt_AVE*10 <= Save_Volt_Max_Min_Led[1]){ucled ^= (0x01 << (Save_Volt_Max_Min_Led[3]-1));	Status = Lower;		}else if( (Save_Volt_Max_Min_Led[1] <= R37_Volt_AVE*10) && (R37_Volt_AVE*10 <= Save_Volt_Max_Min_Led[0])){ucled = 0x00;Status = Normal;}Led_Disp(ucled);
}

小结

这届比赛,需要在数值边界部分要考虑考虑。本届难度一般。

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

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

相关文章

实现usb的MTP功能

前言:最终结果根据用户自主选择可实现host和device功能的切换。 效果展示: 当插入usb时设备会弹窗 当用户选择设备模式时pc端就会出现mtp设备盘符 实现mtp设备 ubuntu架构根文件系统通过uMTP-Responder实现usb的MTP功能 添加服务 /home/flynn/firfly_rootfs/lib/system…

React-05React中props属性(传递数据),propTypes校验,类式与函数式组件props的使用

1.类式组件props基本数据读取与解构运算符传递 <script type"text/babel">// 创建组件class PersonalInfo extends React.Component {render() {// 读取props属性 并读取值console.log(props,this.props);return(<ul><li>姓名&#xff1a;{this.p…

PCI认证 密钥注入 ECC算法工具 NID_secp521r1 国密算法 openssl 全套证书生成,从证书提取公私钥数组 x,y等

步骤 1.全套证书已经生成。OK 2.找国芯要ECC加密解密签名验签代码。给的逻辑说明没有示例代码很难的上。 3.集成到工具 与SP联调。 1.用openssl全套证书生成及验证 注意&#xff1a;这里CA 签发 KLD 证书用的是SHA256。因为芯片只支持SHA256算法,不支持SHA512。改成统一。…

蓝桥杯每日刷题c++

目录 P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn) P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn) P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn) P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn) P8754 [蓝桥杯 2021 省 AB2…

oracle 数据库字段类型为NUMBER(5,2)时,并且数据库值为0.1,为什么Java执行SQL查出来时为“.1“?

在 Oracle 数据库中&#xff0c;当字段类型为 NUMBER(5,2) 且存储的值为 0.1 时&#xff0c;Java 程序查询结果可能显示为 ".1"&#xff08;省略前导零&#xff09;&#xff0c;这是由 Oracle JDBC 驱动默认的数字格式化行为 导致的。以下是原因分析和解决方案&#…

3月AI论文精选十篇

1. Feature-Level Insights into Artificial Text Detection with Sparse Autoencoders[1] 核心贡献&#xff1a;通过稀疏自编码器揭示AI生成文本的检测特征&#xff0c;提出基于特征分布的鉴别方法。研究发现&#xff0c;AI文本在稀疏编码空间中呈现独特的"高频低幅"…

STM32在裸机(无RTOS)环境下,需要手动实现队列机制来替代FreeRTOS的CAN发送接收函数

xQueueSendToBackFromISR(ecuCanRxQueue, hcan->pRxMsg, &xHigherPriorityTaskWoken)&#xff0c;xQueueReceive(mscCanRxQueue,&mscRxMsg,0)和xQueueSendToBack(mscCanTxQueue, &TxMessageTemp, 0 )这3个函数&#xff0c;在裸机下实现&#xff1a; 在裸机&…

使用PX4,gazebo,mavros为旋翼添加下视的相机(仿真采集openrealm数据集-第一步)

目录 一.方法一&#xff08;没成功&#xff09; 1.运行PX4 2.运行mavros通讯 3.启动仿真世界和无人机 &#xff08;1&#xff09;单独测试相机 &#xff08;2&#xff09;make px4_sitl gazebo启动四旋翼iris无人机 二.方法二&#xff08;成功&#xff09; 1.通过 rosl…

7、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)

续前一篇文章。 3、nrfx_gpiote_in_event_enable void nrfx_gpiote_in_event_enable(nrfx_gpiote_pin_t pin, bool int_enable) {NRFX_ASSERT(nrf_gpio_pin_present_check(pin));NRFX_ASSERT(pin_in_use_by_gpiote(pin));if (pin_in_use_by_port(pin)){nrf_gpiote_polarity_t…

Java 实现插入排序:[通俗易懂的排序算法系列之三]

引言 大家好!欢迎继续关注我的排序算法系列。今天,我们要学习的是另一种非常基础且重要的排序算法——插入排序 (Insertion Sort)。 插入排序的思路非常贴近我们日常整理扑克牌的方式,理解起来相对自然。虽然它在最坏情况下的效率不高,但在某些特定场景下,它的表现甚至优…

Java的spring boot项目编译成功启动报错

问题现象&#xff1a;spring boot项目&#xff0c;候删除一些无用代码后&#xff0c;build成功&#xff0c;启动时报错&#xff1a;找不到java.util.Map或者其他对象&#xff08;用Lombok注解Data&#xff09;中的字段属性找不到等错误。解答&#xff1a; 常见是Lombok版本问题…

PyTorch参数管理详解:从访问到初始化与共享

本文通过实例代码讲解如何在PyTorch中管理神经网络参数&#xff0c;包括参数访问、多种初始化方法、自定义初始化以及参数绑定技术。所有代码可直接运行&#xff0c;适合深度学习初学者进阶学习。 1. 定义网络与参数访问 1.1 定义单隐藏层多层感知机 import torch from torch…

基于springboot+vue的课程管理系统

一、系统架构 前端&#xff1a;vue | element-ui 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql8 | maven | node v16.20.2 | idea 二、代码及数据 三、功能介绍 01. 登录 02. 管理员-首页 03. 管理员-系管理 04. 管理员-专业管理 05. 管…

ssh密钥连接远程服务器并用scp传输文件

ssh密钥连接远程服务器 私钥的权限必须是600chmod 600 id_rsa连接时在命令中加上私钥的地址ssh -i PATH_to_id_rsa usernameip -p port scp -P port -i PATH_to_id_rsa file usernameip:PATH

ElasticSearch迁移数据

一、查询索引 1、查询所有索引 curl --user elastic:123456 -XGET "http://localhost:19200/_cat/indices?v&sindex" 2、查询索引配置 以索引名称hello为例 curl --user elastic:123456 -XGET "http://localhost:19200/hello/_settings?pretty" 3…

【Unity】animator检测某state动画播放完毕方法

博主对动画系统很不熟&#xff0c;可能使用的方法比较曲折&#xff0c;但是我确实没找到更有效的方法了。 unity的这个animator在我看来简直有毛病啊&#xff0c;为什么那么难以获取某状态动画的信息呢&#xff1f;&#xff1f;&#xff1f; 想要知道动画播完没有只有用norma…

Jmeter 插件【性能测试监控搭建】

1. 安装Plugins Manager 1.1 下载路径&#xff1a; Install :: JMeter-Plugins.org 1.2 放在lib/ext目录下 1.3 重启Jmeter&#xff0c;会在菜单-选项下多一个 Plugins Manager菜单&#xff0c;打开即可对插件进行安装、升级。 2. 客户端(Jmeter端) 2.1 安装plugins manager…

ollama+open-webui本地部署自己的模型到d盘+两种open-webui部署方式(详细步骤+大量贴图)

一、ollama准备 1.官网下载ollama&#xff1a;https://ollama.com/download 2.在 d 盘创建 ollama 文件夹&#xff0c;把软件包放进去 3.管理员身份运行黑窗口 win r 弹出运行窗口 输入 cmd 后&#xff0c; ctrl shift 回车&#xff0c;以管理员身份打开 3.切换到 d 盘&a…

(学习总结33)Linux Ext2 文件系统与软硬链接

Linux Ext2 文件系统与软硬链接 理解硬件磁盘、服务器、机柜、机房磁盘物理结构磁盘的逻辑结构实际过程 CHS 与 LBA 地址转换 引入文件系统引入 " 块 " 概念引入 " 分区 " 概念引入 " inode " 概念 ext2 文件系统宏观认识Block Group 块组与其内…

Go语言sync.Mutex包源码解读

互斥锁sync.Mutex是在并发程序中对共享资源进行访问控制的主要手段&#xff0c;对此Go语言提供了非常简单易用的机制。sync.Mutex为结构体类型&#xff0c;对外暴露Lock()、Unlock()、TryLock()三种方法&#xff0c;分别用于阻塞加锁、解锁、非阻塞加锁操作&#xff08;加锁失败…