HotRC DS600遥控器+F-06A接收机

PWM原理说明
在这里插入图片描述
在这里插入图片描述

DS600遥控器说明
DS600遥控器的默认高电平是1.5ms
1通道 左右
2通道 前后
3通道 接管 上电后是1ms ,按一下是2ms,1ms和2ms切换
在这里插入图片描述
在这里插入图片描述

DS600接收机说明

在这里插入图片描述
在这里插入图片描述

*/
#include "ps2.h"
#include "common.h"

#define LEFT_RIGHT_CHANNEL 0          //DS600 Channel1   
#define FORWARD_BACKWARD_CHANNEL 1    //DS600 Channel2   
#define TAKE_OVER_CHANNEL  2          //DS600 Channel3  

uint32_t DS600_PWM_Start_Channel[5] = {0};
uint32_t DS600_PWM_End_Channel[5] = {0};
uint32_t DS600_H_level_Value_Channel[5] = {0};

uint16_t  DS600_PWM_Value_Mid_High = 1600;
uint16_t  DS600_PWM_Value_Mid_Low =  1400;

int16_t DS600_PWM_Value_Channel[5] = {0};

uint16_t DS600_Loss_Messege_Countnum_Channel[5] = {0};
uint8_t  DS600_Offline_Alarmflag_Channel[5] = {0};
		
void Initial_flysky( uint32_t period, uint32_t scale )
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure; 
	
    TIM_ICInitTypeDef TIM12_ICInitStructure_w;


	RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM12, ENABLE );
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB, ENABLE );

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init( GPIOB, &GPIO_InitStructure );

	GPIO_PinAFConfig( GPIOB, GPIO_PinSource14, GPIO_AF_TIM12 );

	TIM_TimeBaseStructure.TIM_Prescaler = scale;  
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseStructure.TIM_Period = period;
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

	TIM_TimeBaseInit( TIM12, &TIM_TimeBaseStructure );

	TIM12_ICInitStructure_w.TIM_Channel = TIM_Channel_1;
	TIM12_ICInitStructure_w.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
	TIM12_ICInitStructure_w.TIM_ICSelection = TIM_ICSelection_DirectTI;
	TIM12_ICInitStructure_w.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	TIM12_ICInitStructure_w.TIM_ICFilter = 0x00;
	TIM_ICInit( TIM12, &TIM12_ICInitStructure_w );

	TIM_ITConfig( TIM12, TIM_IT_CC1, ENABLE );

	TIM_Cmd( TIM12, ENABLE );
	//Sonar12_NVIC_Configuration();
		
	/* Enable the DMA1_Stream4_TX(UART4_TX) Interrupt */
	NVIC_InitStructure.NVIC_IRQChannel = TIM8_BRK_TIM12_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init( &NVIC_InitStructure );
}

void Flysky_DeInit( void )
{
    NVIC_InitTypeDef NVIC_InitStructure; 

	RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM12, DISABLE ); //½ûÖ¹TIM12ʱÖÓ
	TIM_ITConfig( TIM12, TIM_IT_CC1 | TIM_IT_Update, DISABLE ); //½ûÖ¹¶¨Ê±Æ÷12¸üÐÂÖжÏ
	TIM_Cmd( TIM12, DISABLE ); //½ûÖ¹¶¨Ê±Æ÷12

	NVIC_InitStructure.NVIC_IRQChannel = TIM8_BRK_TIM12_IRQn; //¶¨Ê±Æ÷12ÖжÏ
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÇÀÕ¼ÓÅÏȼ¶1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×ÓÓÅÏȼ¶0
	NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
	NVIC_Init( &NVIC_InitStructure );	
}
  
uint16_t PPM_Sample_Cnt=0;
uint32_t PPM_Time=0;
uint16_t PPM_Okay=0;
uint16_t PPM_Databuf[8]={0};
uint8_t TIM12_CH1_CAPTURE_STA=0;
void TIM8_BRK_TIM12_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM12,TIM_IT_CC1)==!RESET)//
	{
		if(TIM12_CH1_CAPTURE_STA&0x01)//
		{
			PPM_Time=TIM_GetCapture1(TIM12);
			if(PPM_Time>0)
				PPM_Time++;			
			if(PPM_Okay==1)
			{
				PPM_Databuf[PPM_Sample_Cnt]=PPM_Time;

				if( PPM_Databuf[4] < 800 )
				{
					PPM_Databuf[0] = 0;PPM_Databuf[1] = 0;
				}

				PPM_Sample_Cnt++;
				if(PPM_Sample_Cnt>8)
					PPM_Okay=0;
			}
			if(PPM_Time>3000)//
			{
				PPM_Okay=1;
				PPM_Sample_Cnt=0;
			}    

			TIM_OC1PolarityConfig(TIM12,TIM_ICPolarity_Rising);
			TIM12_CH1_CAPTURE_STA=0;//
		}
		else
		{
			TIM_SetCounter(TIM12,0);//           
			TIM12_CH1_CAPTURE_STA|=0x01;//
			TIM_OC1PolarityConfig(TIM12,TIM_ICPolarity_Falling); 
		}        
	}
	
	TIM_ClearITPendingBit(TIM12, TIM_IT_CC1|TIM_IT_Update);   
}  

void Init_DS600(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
 	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB, ENABLE ); //ʹÄÜGPIOBʱÖÓ
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE ); //ʹÄÜGPIOCʱÖÓ
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE, ENABLE ); //ʹÄÜGPIOEʱÖÓ
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊä³öģʽ
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  GPIO_Init(GPIOB, &GPIO_InitStructure);//³õʼ»¯
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊä³öģʽ
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊä³öģʽ
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  GPIO_Init(GPIOE, &GPIO_InitStructure);//³õʼ»¯

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14);//PF6 Á¬½Óµ½ÖжÏÏß6
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource9);//PF6 Á¬½Óµ½ÖжÏÏß6
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);//PF6 Á¬½Óµ½ÖжÏÏß6
		
    EXTI_InitStructure.EXTI_Line = EXTI_Line14 | EXTI_Line9 | EXTI_Line11;//LINE14
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //shangϽµÑØ´¥·¢ 
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ʹÄÜLINE6
    EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
		
	
	  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//ÍⲿÖжÏ5
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//ÇÀÕ¼ÓÅÏȼ¶3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×ÓÓÅÏȼ¶2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
    NVIC_Init(&NVIC_InitStructure);
		
		NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//ÍⲿÖжÏ5
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//ÇÀÕ¼ÓÅÏȼ¶3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×ÓÓÅÏȼ¶2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
    NVIC_Init(&NVIC_InitStructure);

}

//ÍⲿÖжϷþÎñº¯Êý
void EXTI9_5_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line9) != RESET)
  {
         if(GPIOC->IDR & GPIO_Pin_9)
         {
           DS600_PWM_Start_Channel[TAKE_OVER_CHANNEL] = micros();
         }
         else
         {
						  DS600_PWM_End_Channel[TAKE_OVER_CHANNEL]= micros();
					    DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL] = DS600_PWM_End_Channel[TAKE_OVER_CHANNEL] - DS600_PWM_Start_Channel[TAKE_OVER_CHANNEL];
					 
						 if(DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL]>900 && DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL]<2100)
							 {
								  //stop
									 DS600_PWM_Value_Channel[TAKE_OVER_CHANNEL] = DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL];
								  
								  DS600_Loss_Messege_Countnum_Channel[TAKE_OVER_CHANNEL] = 0;
								  DS600_Offline_Alarmflag_Channel[TAKE_OVER_CHANNEL] = 0;
								 
							 }
							 else
							 {
							    DS600_PWM_Value_Channel[TAKE_OVER_CHANNEL] = 1500;
							 }
         }
				 
     EXTI_ClearITPendingBit(EXTI_Line9);
  }
}

//ÍⲿÖжϷþÎñº¯Êý
void EXTI15_10_IRQHandler(void)
{
	 if(EXTI_GetITStatus(EXTI_Line11) != RESET)
  {
         if(GPIOE->IDR & GPIO_Pin_11)
         {
           DS600_PWM_Start_Channel[FORWARD_BACKWARD_CHANNEL] = micros();
         }
         else
         {
						  DS600_PWM_End_Channel[FORWARD_BACKWARD_CHANNEL]= micros();
					    DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] = DS600_PWM_End_Channel[FORWARD_BACKWARD_CHANNEL] - DS600_PWM_Start_Channel[FORWARD_BACKWARD_CHANNEL];
					 
						 if(DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL]>900 && DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL]<2100)
							 {
								 //PPMINF[5]=PPM_end[5]-INF_DAT[PPM_mid5];
								 if( (DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] > DS600_PWM_Value_Mid_Low) && (DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] < DS600_PWM_Value_Mid_High) )
								 {
								  //stop
									 DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
								 }
								 else
								 {
								  //move
									 if(DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] >= DS600_PWM_Value_Mid_High)
									 {
									   DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] - DS600_PWM_Value_Mid_High;									 
									 }
									 else
									 {
									    DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] - DS600_PWM_Value_Mid_Low;
									 }

								 }
								 	DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
								  DS600_Offline_Alarmflag_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
							 }
							else
							 {
							   DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
							 }
         }
     EXTI_ClearITPendingBit(EXTI_Line11);
  }
	
 if(EXTI_GetITStatus(EXTI_Line14) != RESET)
  {
         if(GPIOB->IDR & GPIO_Pin_14)
         {
           DS600_PWM_Start_Channel[LEFT_RIGHT_CHANNEL] = micros();
         }
         else
         {
						  DS600_PWM_End_Channel[LEFT_RIGHT_CHANNEL]= micros();
					    DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] = DS600_PWM_End_Channel[LEFT_RIGHT_CHANNEL] - DS600_PWM_Start_Channel[LEFT_RIGHT_CHANNEL];
					 
						 if(DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL]>900 && DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL]<2100)
							 {
								 //PPMINF[5]=PPM_end[5]-INF_DAT[PPM_mid5];
								 if( (DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] > DS600_PWM_Value_Mid_Low) && (DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] < DS600_PWM_Value_Mid_High) )
								 {
								  //stop
									 DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = 0;
								 }
								 else
								 {
								  //move
									 if(DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] >= DS600_PWM_Value_Mid_High)
									 {
									   DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] - DS600_PWM_Value_Mid_High;									 
									 }
									 else
									 {
									    DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] - DS600_PWM_Value_Mid_Low;
									 }

								 }
								 
								  DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL] = 0;
								  DS600_Offline_Alarmflag_Channel[LEFT_RIGHT_CHANNEL] = 0;
							 }
							else
							 {
							   DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = 0;
							 }
         }
     EXTI_ClearITPendingBit(EXTI_Line14);
  }
}

void DS600_online_check(void)
{
   DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL]++;
   DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL]++;	 
   DS600_Loss_Messege_Countnum_Channel[2]++;
	
	 if(DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL] > 10)
	 {
	    DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL] = 0;
		  DS600_Offline_Alarmflag_Channel[LEFT_RIGHT_CHANNEL] = 1;
		  DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = 0;
	 }
	 
	 if(DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL] > 10)
	 {
	    DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
		  DS600_Offline_Alarmflag_Channel[FORWARD_BACKWARD_CHANNEL] = 1;
		  DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
	 }
	 
	 if(DS600_Loss_Messege_Countnum_Channel[TAKE_OVER_CHANNEL] > 10)
	 {
	    DS600_Loss_Messege_Countnum_Channel[TAKE_OVER_CHANNEL] = 0;
		  DS600_Offline_Alarmflag_Channel[TAKE_OVER_CHANNEL] = 1;
		  DS600_PWM_Value_Channel[TAKE_OVER_CHANNEL] = 1500;
	 }
	 
}

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

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

相关文章

centos7安装开源日志系统graylog5.1.2

安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Zl5s7x1zMWpuKfaePy0gPg?pwd1eup 提取码&#xff1a;1eup 这里采用的shell脚本安装&#xff0c;脚本如下&#xff1a; 先使用命令产生2个参数代入到脚本中&#xff1a; 使用pwgen生成password_secret密码 …

数据库——事务

智能2112杨阳 一、目的与要求&#xff1a; 1.熟悉提交事务 2.回滚事务 3.检查点技术 注&#xff1a;可以用可视化软件来实现 二、内容&#xff1a; 基于现有数据库设计事务提交、事务回滚、及检查点实验&#xff0c;观察比较提交前后执行结果并分析。 源码&#xff1a…

管控品牌价格就是在维护品牌价值

当品牌各渠道中存在低价、乱价链接时&#xff0c;品牌首先应针对这些低价链接的不同现状进行管控&#xff0c;使链接不再低价&#xff0c;或者被下架删除链接&#xff0c;这些就是有效的价格管控流程&#xff0c;品牌价格被稳定住&#xff0c;也是在维护和稳定品牌价值。 品牌价…

Vue表格中鼠标移入移出input显示隐藏 ,有输入值不再隐藏

Vue表格中鼠标移入移出input显示隐藏 , 不再隐藏的效果 <el-tableref"table":data"tableDatas"borderstyle"width: 100%":span-method"arraySpanMethod"id"table"row-key"id"cell-mouse-enter"editCell&q…

mysql主从复制(在虚拟机centos的docker下)

1.安装docker Docker安装(CentOS)简单使用-CSDN博客 2.部署2个mysql docker run --name some-mysql1 -p 33061:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_cidocker run --name some-mysql2 -p 330…

Ubuntu 常用命令之 chown 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 chown 命令在 Ubuntu 系统中用于改变文件或目录的所有者和组。这个命令的基本格式是 chown [选项]... [所有者][:[组]] 文件...。 chown 命令的主要参数有 -c 或 --changes&#xff1a;类似 verbose&#xff0c;但只在发生改变时…

智能DJ软件Algoriddim djay Pro AI mac功能特点

Algoriddim djay Pro AI mac是一款具有人工智能功能的 DJ 软件&#xff0c;它可以让 DJ 在演出时更加灵活、创意和自由。 Algoriddim djay Pro AI mac主要特点 人工智能智能排列功能&#xff1a;djay Pro AI 可以根据 BPM、音调和热度等因素&#xff0c;将曲目按照最优顺序排列…

护眼台灯适合考公用吗?高口碑的护眼台灯分享

护眼台灯近年来受到越来越多人的关注和喜爱&#xff0c;还得到了一些知名博主、眼科专家和学生家长的认可和推荐&#xff0c;但是市场上存在着一些劣质产品&#xff0c;这些产品存在光线不均、频闪等问题&#xff0c;长期使用这些低劣护眼台灯可能还会导致眼睛酸痛等不适情况。…

vue:antV | G6的超级详细使用(包括基本使用、示例使用、自定义节点以及增删改查功能的灵活应用)

目录 第一章 理解基本信息 1.1 安装与引入 1.2 了解基本使用 1.2.1 创建容器 1.2.2 节点信息 1.2.3 边信息 1.2.4 图配置 1.2.5 渲染图数据 1.2.6 demo源代码 1.2.7 实现效果 第二章 g6图表示例使用 2.1 示例代码的展及解释 2.2 示例效果 第三章 自定义图demo及…

python编程(1)之通用引脚GPIO使用

在之前的章节中&#xff0c;小编带领大家学习了&#xff1a;如何构建esp32的python开发环境-CSDN博客 今天小编带领大家开始学习python编程的第一节&#xff0c;通用引脚。esp32c3核心板是一个高度集成&#xff0c;功能丰富的模块&#xff0c;来看下他的功能分布&#xff1a; 我…

『Linux升级路』基础开发工具——gdb篇

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、背景知识介绍 二、gdb指令介绍 一、背景知识介绍 在软件开发中&#xff0c…

不要再浪费时间,一键获取SolidWorks,设计革命由此开始!

不要再在网上浪费时间寻找SolidWorks的安装包了&#xff0c;一键下载安装&#xff0c;你要的一切都可以在这里找到&#xff01; 对于3D建模和计算机辅助设计的人来说&#xff0c;SolidWorks是一个不可或缺的工具。然而&#xff0c;在网上寻找合法且可靠的软件安装包却常常让人…

「工业遥测」图表控件LightningChart在水工业中的应用

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

nuxt打包占用磁盘IO

目录 前言排除过程 前言 jenkins运行打包&#xff0c;总是要卡一段时间&#xff0c;磁盘IO很高。我手动执行后的确发现了这个问题&#xff0c;如下图所示。 排除过程 我的方案很原始&#xff0c;利用git恢复到以前的版本&#xff0c;抽检&#xff0c;搞了差不多两个小时&am…

es、MySQL 深度分页问题

文章目录 es 深度分页MySQL 深度分页 es 深度分页 es 深度分页问题&#xff0c;有点忘记了&#xff0c;这里记录一下 当索引库中有10w条数据&#xff0c;比如是商品数据&#xff1b;用户就是要查在1w到后10条数据&#xff0c;怎么查询。 es查询是从各个分片中取出前1w到后10条数…

【SpringBoot篇】解决缓存击穿问题① — 基于互斥锁方式

文章目录 &#x1f339;什么是缓存击穿&#x1f33a;基于互斥锁解决问题&#x1f6f8;思路 &#x1f3f3;️‍&#x1f308;代码实现 &#x1f339;什么是缓存击穿 缓存击穿是指在使用缓存系统时&#xff0c;对一个热点数据的高并发请求导致缓存失效&#xff0c;多个请求同时访…

JavaOOP篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、构造方法能不能显式调用?二、什么是方法重载?三、构造方法能不能重写?能不能重载?四、内部类与静态内部类的区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…

软件工程快速复习(期末急救)

每个同学要假想自己是一个项目经理&#xff0c;去完成一个软件项目&#xff0c;比如医院管理系统&#xff0c;自动设备控制系统等&#xff0c;以面向结构的软件工程方法&#xff0c;说出完成项目的步骤&#xff0c;涉及到的具体技术。初步了解面向对象的方法的与面向结构的方法…

“VR全景+”理念下的智慧教育,让VR教学成为趋势

随着VR技术的发展&#xff0c;“VR全景”理念下的智慧教育&#xff0c;从智慧学习环境和新型教学模式两个方面来促进教育进一步革新。VR技术应用在教育领域&#xff0c;对于教学来说是一个飞跃的发展&#xff0c;5G课堂、VR直播教学、沉浸式教学等教学模式的创新&#xff0c;让…

安装@vue/cli时候,升级版本造成冲突的解决方法

问题&#xff1a;原来是2.X版本&#xff0c;想要升级到4.5.9版本就出错了 npm install -g vue/cli4.5.9错误原因&#xff1a;之前安装过vue的2.X版本&#xff0c;导致冲突的文件没有被正确删除 解决方法&#xff1a;安装且覆盖原来存在的文件 npm install -g vue/cli4.5.9 -…