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

飞利浦双串口51单片机485网关

主要功能将PC端的数据接收下来,分发到不同的设备,也是轮询设备数据读取回来,打包回传到PC端,数据包包头包尾识别,数据校验,接收超时处理,将协议结构化处理,协议的改动不需要改动程序,中断接收一帧完成置标志位交由上层协议程序校验并处理转发

协议格式定义,每一个位都进行了定仪

#ifndef PROTOCOL_H
#define PROTOCOL_H
#include "define.h"
//IO_EMM_31
typedef struct 
{uchar Stx;uchar Length;uchar ID;uchar TollCollectorID[3];uchar LoginDuration[2];uchar VehicleClass;union{uchar byte;struct{uchar Payment:4;uchar Axle:4;}BIT;}AxlePaymentDisplay;union{uint word;uchar byte[2];}TollFare;union{uchar byte;struct{			uchar reserved:1;uchar Exit_LSS_Rlight:1;uchar BarrierClose:1;uchar BarrierOpen:1;uchar Entry_LSS_Rlight:1;uchar Entry_LSS_Glight:1;uchar LaneLog:1;uchar zero:1;}BIT;}TMU_Control1;union{uchar byte;struct{uchar EmergencyAlarm:1;uchar EvasionAlarm:1;uchar DiscrepancyAlarm:1;uchar MisregistrationAlarm:1;uchar reserved:1;uchar AxleDectorFault:1;uchar BoothEquipmentFault:1;uchar zero:1;}BIT;}TMU_Control2;union{uchar byte;struct{uchar EmergencyAlarmRstBut:1;uchar EvalsionAlarmRstBut:1;uchar DiscrepancyAlarmRstBut:1;uchar MisregistrationAlarmRstBut:1;uchar AxleDetectorOVerride:1;uchar KeyInOverrideSelect:1;uchar reserved:1;uchar zero:1;}BIT;}ConStatus1;union{uchar byte;struct{uchar resetved:4;uchar TMUCommFail:1;uchar TMUDimmerOverAct:1;uchar AllSignageDimmming:1;uchar zero:1;}BIT;}ConStatus2;union{uchar byte;struct{uchar reserved:1;uchar CanopyBeacon:1;uchar Entry_LSS_Rlight:1;uchar Entry_LSS_Glight:1;uchar TPS_Glight:1;uchar TPS_Rlight:1;uchar DimmingNormal:1;uchar zero:1;}BIT;}SignageControl;union{uchar byte;struct{uchar TPSCommFail:1;uchar reserve2:1;uchar reserve1:1;uchar TPSTempHigher70:1;uchar CLSCommFail:1;uchar CLSPixelFaultDetect:1;uchar CLSTempHigher70:1;uchar zero:1;}BIT;}TPS_CLSFaultStatus;union{uchar byte;struct{uchar EntryCommFail:1;uchar ExitCommFail:1;uchar RlightAspectHigher50:1;uchar RlightAspectHigher25:1;uchar TempHigher70:1;uchar reseved:1;uchar Rlight:1;uchar zero:1;}BIT;}ExitLSSStatus;union{uchar byte;struct{uchar GlightAspectHigher50:1;uchar GlightAspectHigher25:1;uchar RlightAspectHigher50:1;uchar RlightAspectHigher25:1;uchar TempHigher70:1;uchar Glight:1;uchar Rlight:1;uchar zero:1;}BIT;}EntryLSSStatus;union{uchar byte;struct{uchar ShortDetect:1;uchar reserved:2;uchar KickBarAlarm:1;uchar CabinetOpen:1;uchar BarrierColse:1;uchar BarrierOpen:1;uchar zero:1;}BIT;}LocalIOInputStatus;union{uchar byte;struct{uchar Class0:1;uchar Class1:1;uchar Class2:1;uchar Class3:1;uchar Class4:1;uchar Class5:1;uchar Class6:1;uchar zero:1;}BIT;}AutoTollInputStatus1;union{uchar byte;struct{uchar Class7:1;uchar Class8:1;uchar Class9:1;uchar ClassAdd1:1;uchar LaneOpen:1;uchar LaneClose:1;uchar reserved:1;uchar zero:1;}BIT;}AutoTollInputStatus2;union{uchar byte;struct{uchar Axle1:1;uchar Axle2:1;uchar Axle3:1;uchar Axle4:1;uchar Axle5:1;uchar Axle6:1;uchar reserved:1;uchar zero:1;}BIT;}AutoTollInputStatus3;uchar Checksum;uchar Etx;
}IO_EMM_31;//IO_EMM_32
typedef struct
{uchar Stx;uchar Length;uchar ID;union{uchar byte;struct{uchar reserved:1;uchar Dimmer:3;uchar Normal:3;uchar zero:1;}BIT;}TPSSetting;union{uchar byte;struct{uchar reserved:1;uchar Dimmer:3;uchar Normal:3;uchar zero:1;}BIT;}CLSSetting;union{uchar byte;struct{uchar reserved:1;uchar Dimmer:3;uchar Normal:3;uchar zero:1;}BIT;}EntryLSSSetting;union{uchar byte;struct{uchar reserved:1;uchar Dimmer:3;uchar Normal:3;uchar Zero:1;}BIT;}ExitLSSSetting;uchar Checksum;uchar Etx;
}IO_EMM_32;//IO_TMU
typedef struct
{uchar Stx;uchar Length;uchar ID;uchar TollCollectorID[3];uchar LoginDuration[2];uchar VehicleClass;union{uchar byte;struct{uchar Payment:4;uchar Axle:4;}BIT;}AxlePaymentDisplay;union{uchar byte;struct{			uchar reserved:1;uchar Exit_LSS_Rlight:1;uchar BarrierClose:1;uchar BarrierOpen:1;uchar Entry_LSS_Rlight:1;uchar Entry_LSS_Glight:1;uchar LaneLog:1;uchar zero:1;}BIT;}TMU_Control1;union{uchar byte;struct{uchar EmergencyAlarm:1;uchar EvasionAlarm:1;uchar DiscrepancyAlarm:1;uchar MisregistrationAlarm:1;uchar reserved:1;uchar AxleDectorFault:1;uchar BoothEquipmentFault:1;uchar zero:1;}BIT;}TMU_Control2;union{uchar byte;struct{uchar EmergencyAlarmRstBut:1;uchar EvalsionAlarmRstBut:1;uchar DiscrepancyAlarmRstBut:1;uchar MisregistrationAlarmRstBut:1;uchar AxleDetectorOVerride:1;uchar KeyInOverrideSelect:1;uchar reserved:1;uchar zero:1;}BIT;}ConStatus1;union{uchar byte;struct{uchar resetved:5;uchar TMUDimmerOverAct:1;uchar AllSignageDimming:1;uchar zero:1;}BIT;}ConStatus2;uchar Checksum;uchar Etx;
}IO_TMU;//IO_TPS
typedef struct
{uchar Stx;uchar Length;uchar ID;union{uint word;uchar byte[2];}TollFare;union{uchar byte;struct{uchar DispPleasePaid:1;uchar DispThankyou:1;uchar Rlight:1;uchar Glight:1;uchar BrightnessControl:3;uchar reserved:1;}BIT;}LedDisplay;union{uchar byte;struct{uchar TempHigher70:1;uchar reserved:7;}BIT;}Status;uchar Checksum;uchar Etx;
}IO_TPS;//IO_CLS
typedef struct
{uchar Stx;uchar Length;uchar ID;uchar VehicleClass;union{uchar byte;struct{uchar Axle:3;uchar reserved1:1;uchar RelayContactClose:1;uchar reserved2:3;}BIT;}AxleCounterDisplay;union{uchar byte;struct{uchar reserved:4;uchar Brightness:3;uchar zero:1;}BIT;}BrightnessControl;union{uchar byte;struct{uchar TempHigher70:1;uchar PixelFaultDetected:1;uchar reserved:6;}BIT;}Status;uchar Checksum;uchar Etx;
}IO_CLS;//IO_LSS
typedef struct
{uchar Stx;uchar Length;uchar ID;union{uchar byte;struct{uchar Rlight:1;uchar Glight:1;uchar reserved:6;			}BIT;}SignalDisp;union{uchar byte;struct{uchar RlightAspectHigher25:1;uchar RlightAspectHigher50:1;uchar GlightAspectHigher25:1;uchar GlightAspectHigher50:1;uchar BrightnessControl:3;uchar reserved:1;			}BIT;}Status1;union{uchar byte;struct{uchar TempHigher70:1;uchar reserved:7;}BIT;}Status2;uchar Checksum;uchar Etx;
}IO_LSS;typedef struct
{uchar Dimmer;uchar Normal;
}BRIGHTNESS;
#endif

中断接收与发送

void IntUart0Rx( void ) interrupt 4
{uchar temp;static uchar MsgLen;if( RI_0 ){RI_0 = 0;temp = S0BUF;Timer1ms[TIMER_COM_DEV].Tick = 10;Timer1ms[TIMER_COM_DEV].Flg.BIT.Enable = 1;Timer[TIMER_RESPONSE].Tick = 5;ACC = temp;if( P==RB8_0 ){if( !DevStrEndFlg ){if( temp==0xaa ){									  DevStrEndFlg = 1;IO2Dev.RecvPtr = 0;IO2Dev.RecvBuf[IO2Dev.RecvPtr++] = temp;IO2Dev.Error.byte = 0;}}else{if( temp==0xab && IO2Dev.RecvPtr==MsgLen ){DevStrEndFlg = 0;IO2Dev.RecvBuf[IO2Dev.RecvPtr++] = temp;IO2Dev.Flg.BIT.Recv = 1;IO2Dev.RecvLen = IO2Dev.RecvPtr;}/*else if( temp==0xaa  && IO2Dev.RecvPtr!=MsgLen-1 ){IO2Dev.RecvPtr = 0;IO2Dev.RecvBuf[IO2Dev.RecvPtr++] = temp;}*/else if( IO2Dev.RecvPtr==2 ){IO2Dev.ID = temp;IO2Dev.RecvBuf[IO2Dev.RecvPtr++] = temp;switch( IO2Dev.ID ){case IO_TMU_ID:MsgLen = sizeof( IO_TMU )-1;break;case IO_TPS_ID:MsgLen = sizeof( IO_TPS )-1;break;case IO_CLS_ID:MsgLen = sizeof( IO_CLS )-1;break;case IO_ELSS_ID:MsgLen = sizeof( IO_LSS )-1;break;case IO_XLSS_ID:MsgLen = sizeof( IO_LSS )-1;break;default:DevStrEndFlg = 0;}}else if( IO2Dev.RecvPtr<RECVBUF_LEN ){IO2Dev.RecvBuf[IO2Dev.RecvPtr++] = temp;}else  //接收数据溢出{DevStrEndFlg = 0;IO2Dev.RecvPtr = 0;}
//				flg = IO2Dev.RecvPtr;}}else{IO2Dev.Error.BIT.Even = 1;}}else if( S0STAT&0x08 )//Framing Error{S0STAT &= ~0x08;IO2Dev.Error.BIT.Framing = 1;}else if( S0STAT&0x04 )//Break Detect{S0STAT &= ~0x04;IO2Dev.Error.BIT.BreakDetect = 1;}else if( S0STAT&0x02 )//Overrun Error{S0STAT &= ~0x02;IO2Dev.Error.BIT.Overrun = 1;}
}//串行口0的发送中断程序
void IntUart0Tx( void ) interrupt 7
{Uart0SendData();
}

以指针提取数据
在这里插入图片描述

#include "Emm2IO.h"
#include "com.h"
#include "protocol.h"
#include "systemtask.h"
#include "IOCheck.h"IO_EMM_31 IOEmm31;
extern BUF_DEF Emm2IO;
extern IO_TMU IOTmu;
extern IO_TPS IOTps;
extern IO_CLS IOCls;
extern IO_LSS IOEntryLss;
extern IO_LSS IOExitLss;
extern BRIGHTNESS TpsBrightness,ClsBrightness,EntryLssBrightness,ExitLssBrightness;extern IO_CHECK_DEF IoCheck;
extern TIMER_DEF Timer[TIMER_NUM];
extern uchar flg;
void Emm2IOInit( void )
{//31IOEmm31.Stx = 0xaa;IOEmm31.Length = 0x18;IOEmm31.ID = 0x20;IOEmm31.ConStatus1.byte = 0;IOEmm31.ConStatus2.byte = 0x10;IOEmm31.TPS_CLSFaultStatus.byte = 0x11;IOEmm31.ExitLSSStatus.byte = 0x03;IOEmm31.EntryLSSStatus.byte = 0x00;IOEmm31.LocalIOInputStatus.byte = 0x00;IOEmm31.AutoTollInputStatus1.byte = 0x00;IOEmm31.AutoTollInputStatus2.byte = 0x00;IOEmm31.AutoTollInputStatus3.byte = 0x00;IOEmm31.Etx = 0xab;Emm2IO.Flg.byte = 0;Emm2IO.SendLen = 0;Emm2IO.RecvLen = 0;Emm2IO.SendPtr = 0;Emm2IO.RecvPtr = 0;Timer[TIMER_STOP].Flg.BIT.TimeOut = 0;Timer[TIMER_STOP].Tick = 500;Timer[TIMER_STOP].Flg.BIT.Enable = 1;
}
//从Emm2IOController31的接收数据中取出需要的内容放到设备缓冲区中
void CopyEmm31ToDev( IO_EMM_31 *IoEmm31Ptr )
{//TMUIOTmu.TollCollectorID[0] = IoEmm31Ptr->TollCollectorID[0];IOTmu.TollCollectorID[1] = IoEmm31Ptr->TollCollectorID[1];IOTmu.TollCollectorID[2] = IoEmm31Ptr->TollCollectorID[2];IOTmu.LoginDuration[0] = IoEmm31Ptr->LoginDuration[0];IOTmu.LoginDuration[1] = IoEmm31Ptr->LoginDuration[1];IOTmu.VehicleClass = IoEmm31Ptr->VehicleClass;IOTmu.AxlePaymentDisplay.byte = IoEmm31Ptr->AxlePaymentDisplay.byte;IOTmu.TMU_Control1.byte = IoEmm31Ptr->TMU_Control1.byte;IOTmu.TMU_Control2.byte = IoEmm31Ptr->TMU_Control2.byte;//TPSIOTps.TollFare.byte[0] = IoEmm31Ptr->TollFare.byte[0];IOTps.TollFare.byte[1] = IoEmm31Ptr->TollFare.byte[1];IOTps.LedDisplay.BIT.Glight = IoEmm31Ptr->SignageControl.BIT.TPS_Glight;IOTps.LedDisplay.BIT.Rlight = IoEmm31Ptr->SignageControl.BIT.TPS_Rlight;if( (((IoEmm31Ptr->TollFare.byte[0]&0xf0)>>4) == 0x000c) && (IoEmm31Ptr->AxlePaymentDisplay.BIT.Payment == 0x0b) ){IOTps.LedDisplay.BIT.DispPleasePaid = 1;IOTps.LedDisplay.BIT.DispThankyou = 0;}else if( (((IoEmm31Ptr->TollFare.byte[0]&0xf0)>>4) == 0x0000c) && (IoEmm31Ptr->AxlePaymentDisplay.BIT.Payment != 0x0b) ){IOTps.LedDisplay.BIT.DispPleasePaid = 0;IOTps.LedDisplay.BIT.DispThankyou = 1;}else if( ((IoEmm31Ptr->TollFare.byte[0]&0xf0)>>4) == 0x0000b ){IOTps.LedDisplay.BIT.DispPleasePaid = 0;IOTps.LedDisplay.BIT.DispThankyou = 0;}else{IOTps.LedDisplay.BIT.DispPleasePaid = 0;IOTps.LedDisplay.BIT.DispThankyou = 0;}//CLSIOCls.VehicleClass = IoEmm31Ptr->VehicleClass;if( IoEmm31Ptr->AxlePaymentDisplay.BIT.Axle>0 && IoEmm31Ptr->AxlePaymentDisplay.BIT.Axle<7 ){IOCls.AxleCounterDisplay.BIT.Axle = IoEmm31Ptr->AxlePaymentDisplay.BIT.Axle;}else{IOCls.AxleCounterDisplay.BIT.Axle = 0;}IOCls.AxleCounterDisplay.BIT.RelayContactClose = IoEmm31Ptr->SignageControl.BIT.CanopyBeacon;//EntryLSSIOEntryLss.SignalDisp.BIT.Rlight = IoEmm31Ptr->SignageControl.BIT.Entry_LSS_Rlight;if( IoEmm31Ptr->SignageControl.BIT.Entry_LSS_Glight && IOEmm31.LocalIOInputStatus.BIT.BarrierOpen &&!IOEmm31.LocalIOInputStatus.BIT.BarrierColse ){IOEntryLss.SignalDisp.BIT.Glight = 1;IOEntryLss.SignalDisp.BIT.Rlight = 0;}else{IOEntryLss.SignalDisp.BIT.Glight = 0;IOEntryLss.SignalDisp.BIT.Rlight = 1;}//ExitLSSif( IoEmm31Ptr->SignageControl.BIT.DimmingNormal ){IOTps.LedDisplay.BIT.BrightnessControl = TpsBrightness.Dimmer;IOCls.BrightnessControl.BIT.Brightness = ClsBrightness.Dimmer;IOEntryLss.Status1.BIT.BrightnessControl = EntryLssBrightness.Dimmer;IOExitLss.Status1.BIT.BrightnessControl = ExitLssBrightness.Dimmer;}else{IOTps.LedDisplay.BIT.BrightnessControl = TpsBrightness.Normal;IOCls.BrightnessControl.BIT.Brightness = ClsBrightness.Normal;IOEntryLss.Status1.BIT.BrightnessControl = EntryLssBrightness.Normal;IOExitLss.Status1.BIT.BrightnessControl = ExitLssBrightness.Normal;}
}
//从接收的Emm2IOController31的数据更新Emm31缓冲区
void CopyEmm31ToEmm31Buf( IO_EMM_31 *IoEmm31Ptr )
{uchar *Sptr,*Dptr,i;Sptr = (uchar*)IoEmm31Ptr;Dptr = (uchar*)&IOEmm31;for( i=0; i<11; i++ ){*(Dptr+i+3) = *(Sptr+i+3);}*(Dptr+16) = *(Sptr+16);
}
//更新各设备的亮度值
void CopyEmm32ToDev( IO_EMM_32 *IoEmm32Ptr )
{//TPSTpsBrightness.Dimmer = IoEmm32Ptr->TPSSetting.BIT.Dimmer;TpsBrightness.Normal = IoEmm32Ptr->TPSSetting.BIT.Normal;//CLSClsBrightness.Dimmer = IoEmm32Ptr->CLSSetting.BIT.Dimmer;ClsBrightness.Normal = IoEmm32Ptr->CLSSetting.BIT.Normal;//EntryLSSEntryLssBrightness.Dimmer = IoEmm32Ptr->EntryLSSSetting.BIT.Dimmer;EntryLssBrightness.Normal = IoEmm32Ptr->EntryLSSSetting.BIT.Normal;//ExitLSSExitLssBrightness.Dimmer = IoEmm32Ptr->ExitLSSSetting.BIT.Dimmer;ExitLssBrightness.Normal = IoEmm32Ptr->ExitLSSSetting.BIT.Normal;
}
//判断是否已从EMM接收完整的数据包,并进行处理
void Emm2IOMain( void )
{uchar ver,*ptr;IO_EMM_31 *IoEmm31Ptr;IO_EMM_32 *IoEmm32Ptr;if( Emm2IO.Flg.BIT.Recv ){Emm2IO.Flg.BIT.Recv = 0;Timer[TIMER_STOP].Tick = 500;Timer[TIMER_STOP].Flg.BIT.Enable = 1;if( Emm2IO.Error.byte == 0 ){ver = Checksum( &Emm2IO.RecvBuf[1],Emm2IO.RecvLen-3 );if( Emm2IO.ID==EMM_IO31_ID ){IoEmm31Ptr = (IO_EMM_31 *)Emm2IO.RecvBuf;if( ver==IoEmm31Ptr->Checksum ){CopyEmm31ToDev( IoEmm31Ptr );CopyEmm31ToEmm31Buf( IoEmm31Ptr );ptr = (uchar*)&IOEmm31;ptr++;
//					IOEmm31.AutoTollInputStatus3.byte = IoCheck.SaveState.byte[3];
//					IOEmm31.LocalIOInputStatus.byte = IoCheck.SaveState.byte[0];
//					IOEmm31.AutoTollInputStatus1.byte = IoCheck.SaveState.byte[1];
//					IOEmm31.AutoTollInputStatus2.byte = IoCheck.SaveState.byte[2];
//					IOEmm31.AutoTollInputStatus3.byte = IoCheck.SaveState.byte[3];ver = Checksum( ptr,sizeof(IO_EMM_31)-3 );IOEmm31.Checksum = ver;CopyToUart1SendBuf( (uchar*)&IOEmm31, sizeof(IO_EMM_31) );}}else if( Emm2IO.ID==EMM_IO32_ID ){IoEmm32Ptr = (IO_EMM_32 *)Emm2IO.RecvBuf;if( ver==IoEmm32Ptr->Checksum ){CopyEmm32ToDev( IoEmm32Ptr );CopyToUart1SendBuf( (uchar*)IoEmm32Ptr, sizeof(IO_EMM_32) );}}}else{Emm2IO.Error.byte = 0;}Emm2IO.RecvPtr = 0;Emm2IO.ID = 0;}//When no polling with EMM > 5 seconds.if( Timer[TIMER_STOP].Flg.BIT.TimeOut ){Timer[TIMER_STOP].Flg.BIT.TimeOut = 0;//TMUIOTmu.TollCollectorID[0] = 0x0b;IOTmu.TollCollectorID[1] = 0xbb;IOTmu.TollCollectorID[2] = 0xbb;IOTmu.LoginDuration[0] = 0xbb;IOTmu.LoginDuration[1] = 0xbb;IOTmu.VehicleClass = 0xbb;IOTmu.AxlePaymentDisplay.byte = 0xbb;IOTmu.TMU_Control1.byte = 0x00;IOTmu.TMU_Control2.byte = 0x40;//TPSIOTps.TollFare.word = 0xbbbb;IOTps.LedDisplay.BIT.Rlight = 1;IOTps.LedDisplay.BIT.Glight = 0;IOTps.LedDisplay.BIT.DispPleasePaid = 0;IOTps.LedDisplay.BIT.DispThankyou = 0;//CLSIOCls.VehicleClass = 0xbb;IOCls.AxleCounterDisplay.byte = 0x00;//Entry LssIOEntryLss.SignalDisp.byte = 0x01;//Exit LssIOExitLss.SignalDisp.byte = 0x01;}
}

主程序循环,
在这里插入图片描述
代码多年前写,基于飞利浦双串口51单片机,程序结构是大循环前后台标志,就算现在用上了linux、rtos等的方式,程序接收处理方式差别不大,只是实现起来更简单

下面是完整工程连接
链接:https://pan.baidu.com/s/1bXOrMRH6Gf7kcjra4uANtA?pwd=1234
提取码:1234

相关文章:

飞利浦双串口51单片机485网关

主要功能将PC端的数据接收下来&#xff0c;分发到不同的设备&#xff0c;也是轮询设备数据读取回来&#xff0c;打包回传到PC端&#xff0c;数据包包头包尾识别&#xff0c;数据校验&#xff0c;接收超时处理&#xff0c;将协议结构化处理&#xff0c;协议的改动不需要改动程序…...

生态扩展:Flink Doris Connector

生态扩展&#xff1a;Flink Doris Connector 官网地址&#xff1a; https://doris.apache.org/zh-CN/docs/dev/ecosystem/flink-doris-connector flink的安装&#xff1a; tar -zxvf flink-1.16.0-bin-scala_2.12.tgz mv flink-1.16.0-bin-scala_2.12.tgz /opt/flinkflink环境…...

HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门

前言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;而Huawei进一步推出了ArkTS。因此在学习使用ArkTS前&#xff0c;需要掌握基本的TS开发技能。 ArkTS介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&am…...

从零开始实现神经网络(一)_NN神经网络

参考文章&#xff1a;神经网络介绍 一、神经元 这一神经网络的基本单元&#xff0c;神经元接受输入&#xff0c;对它们进行一些数学运算&#xff0c;并产生一个输出。 这里有三步。 首先&#xff0c;将每个输入&#xff08;X1&#xff09;乘以一个权重&#xff1a; 接下来&…...

C语言 每日一题 Day10

1.使用函数判断完全平方数 本题要求实现一个判断整数是否为完全平方数的简单函数。 函数接口定义&#xff1a; int IsSquare(int n); 其中n是用户传入的参数&#xff0c;在长整型范围内。如果n是完全平方数&#xff0c;则函数IsSquare必须返回1&#xff0c;否则返回0。 代码实…...

C++继承——矩形和长方体

Rectangle矩形类 /*矩形类*/ class Rectangle { private:double L 0;double W 0; public:Rectangle() default;Rectangle(double a, double b);double GetArea(); /*矩形面积*/double GetGirth(); /*矩形周长*/ }; /*构造函数*/ Rectangle::Rectangle(double a, double b) …...

代码随想录打卡第五十八天|● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 题目&#xff1a; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 题目链接&#xff1a; 583. 两个字符串的删除操作 解题思路&#xff1a; dp数组的含义&am…...

面试流程之——程序员如何写项目经验

在简历中介绍IT项目经验&#xff0c;你可以遵循以下步骤&#xff1a; 明确项目目标&#xff1a;首先&#xff0c;清晰地阐述项目的目标。这可以是提升某个软件的性能&#xff0c;改进某个系统的用户界面&#xff0c;或者增加某款产品的功能。让读者了解你的工作与项目的整体目…...

框架安全-CVE 漏洞复现DjangoFlaskNode.jsJQuery框架漏洞复现

目录 服务攻防-框架安全&CVE复现&Django&Flask&Node.JS&JQuery漏洞复现中间件列表介绍常见语言开发框架Python开发框架安全-Django&Flask漏洞复现Django开发框架漏洞复现CVE-2019-14234&#xff08;Django JSONField/HStoreField SQL注入漏洞&#xff…...

基于SSM的理发店管理系统

基于SSM的理发店管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 公告信息 管理员界面 用户界面 摘要 基于SSM&#xff08;Spring、Spring MVC、…...

2.Spark的工作与架构原理

概述 目标&#xff1a; spark的工作原理spark数据处理通用流程rdd 什么是rddrdd 的特点 spark架构 spark架构相关进程spark架构原理 spark的工作原理 spark 的工作原理&#xff0c;如下图 图中中间部分是spark集群&#xff0c;也可以是基于 yarn 的&#xff0c;图上可以…...

qt-C++笔记之带有倒计数显示的按钮,计时期间按钮锁定

qt-C笔记之带有倒计数显示的按钮&#xff0c;计时期间按钮锁定 code review! 文章目录 qt-C笔记之带有倒计数显示的按钮&#xff0c;计时期间按钮锁定1.运行2.main.cc3.main.pro 1.运行 2.main.cc 代码 #include <QApplication> #include <QPushButton> #includ…...

HTML全局属性(global attribute)有哪些?

HTML全局属性是指在HTML元素上可用的基本属性&#xff0c;它们适用于所有HTML元素。以下是一些常见的HTML全局属性&#xff1a; 1&#xff1a;class&#xff1a;为元素指定一个或多个类名&#xff0c;用于与CSS样式表关联。 2&#xff1a;id&#xff1a;:为元素指定唯一的标识…...

MyBatis-Plus返回getOne返回null疑惑

getOne返回null 问题描述分析过程总结 问题描述 在数据库建了一张表主要包括两个字段master_id和slave_id;主要的额外字段max_lots 默认值是null&#xff1b; 当调用getOne进行查询结果是null&#xff0c;但实际情况是数据库时应该返回值的&#xff1b; AotfxMasterSlave ex…...

Physics2DPlugin3加载后会跳转gsap官网解决

因工作需要使用Physics2DPlugin3库&#xff0c;目标效果 加载他里面的在线js&#xff0c;使用效果正常&#xff0c;但是几秒会跳转官网&#xff0c;我们app内部、浏览器都会这样。 于是研究js代码&#xff0c;发现里面有setTimeout跳转。 删掉就好了 分享我改好的文件&#x…...

【AI视野·今日Sound 声学论文速览 第三十二期】Tue, 24 Oct 2023

AI视野今日CS.Sound 声学论文速览 Tue, 24 Oct 2023 Totally 20 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;nvas3d, 基于任意录音和室内3D信息合成重建不同听角&#xff08;位置&#xff09;处的新的声音。(from apple cmu) website: htt…...

在Linux上编译gdal3.1.2指南

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 以Ubuntu 18编译gdal3.1.2为例,编译gdal3.1.2需要先编译proj库和geos库(可选)。我选择的proj库版本为proj-7.1.0,编译proj-7.1.0需要先编译tiff库和sqlite3。我选择的sqlite3的版本为…...

73. 矩阵置零 --力扣 --JAVA

题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解题思路 通过二层循环找出元素为0所在的行和列&#xff1b;设置标志位记录当前行是否存在元素为0的&#xff0c;设置列表存储列为0的列&#…...

(笔记)Kotlin——Android封装ViewBinding之二 优化

0. 在app模块的build.gradle文件中添加如下配置开启ViewBinding android {.......viewBinding {enabled true}} 1. 新建一个Ext.kt文件 添加两个扩展函数&#xff0c;分别对应Activity和Fragment inline fun <T : ViewBinding> AppCompatActivity.viewBinding(cross…...

MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)(八)

目录 前言 几个高频面试题目 机器视觉如何获取到好图像 常见的视觉光源 各种视觉打光方式...

day50 随机函数与广播机制

目录 一、随机张量的生成 1.1 torch.randn() 函数 1.2 其他随机函数 1.3 输出维度测试 二、广播机制 2.1 广播机制的规则 2.2 加法的广播机制 二维张量与一维向量相加 三维张量与二维张量相加 二维张量与标量相加 高维张量与低维张量相加 2.3 乘法的广播机制 批量…...

ESP-Brookesia:融合 AI 大模型,全新一代 GUI 开发与管理平台

乐鑫信息科技 (688018.SH) 推出 ESP-Brookesia ——一款专为物联网设备打造、集成 AI 交互能力的 UI 开发与管理框架。 ESP-Brookesia 深度融合 AI 大模型技术&#xff0c;为智能屏显应用赋予语音识别、自然语言对话、拟人化反馈等能力&#xff0c;帮助开发者构建更智能、更具…...

Excel自动分列开票工具推荐

软件介绍 本文介绍一款基于Excel VBA开发的自动分列开票工具&#xff0c;可高效处理客户对账单并生成符合要求的发票清单。 软件功能概述 该工具能够将客户对账单按照订单号自动拆分为独立文件&#xff0c;并生成可直接导入发票清单系统的标准化格式。 软件特点 这是一款体…...

Ubuntu下有关UDP网络通信的指令

1、查看防火墙状态&#xff1a; sudo ufw status # Ubuntu 2、 检查系统全局广播设置 # 查看是否忽略广播包&#xff08;0表示接收&#xff0c;1表示忽略&#xff09; sysctl net.ipv4.icmp_echo_ignore_broadcasts# 查看是否允许广播转发&#xff08;1表示允许&#xff09…...

【西门子杯工业嵌入式-5-串口实现数据收发】

西门子杯工业嵌入式-5-串口实现数据收发 一、通信基础1.1 什么是通信1.2 嵌入式系统中的通信 二、串行通信原理2.1 串行通信简介2.2 通信参数约定 三、GD32F470 串口资源与性能3.1 串口硬件资源 四、串口通信的实现4.1 串口初始化流程4.2 串口发送函数编写4.3 使用 printf 实现…...

WireShark相关技巧

文章目录 1 Wireshark如何设置解析SIP 1 Wireshark如何设置解析SIP 编辑->首选项->protocols->sip 选中sip 2 点击“编辑”->“首选项”->“protocol”->ESP ,按照如下红框显示&#xff0c;进行勾选&#xff0c;点击应用...

BeanFactory 和 FactoryBean 有何区别与联系?

导语&#xff1a; Spring 是后端面试中的“常青树”&#xff0c;而 BeanFactory 与 FactoryBean 的关系更是高频卡人点。很多候选人混淆两者概念&#xff0c;答非所问&#xff0c;轻则失分&#xff0c;重则直接被“pass”。本文将从面试官视角&#xff0c;深入剖析这一经典问题…...

Linux安全机制:从SELinux到Intel SGX的堡垒

Linux安全机制&#xff1a;从SELinux到Intel SGX的堡垒 数字世界的钢铁长城 引言&#xff1a;操作系统的"防御工事" 当服务器每天承受数百万次攻击尝试时&#xff0c;Linux内核的安全机制如同精密的防御系统&#xff0c;在纳秒级时间内做出响应。现代Linux安全架构已…...

利用Pandas AI完成Excel大模型的结合实现自然语言问数

需求说明 实现对Excel工具的自然语言问数&#xff0c;即可以通过界面上传Excel文件&#xff0c;然后在文本框里通过语言对话的形式问出要统计的内容。比如&#xff1a; 用户数有多少&#xff1f; 语文成绩低于90的用户有多少&#xff1f; ..... 实现思路 Pandas AI是基于…...

2025年6月6日第一轮

2025年6月6日 The rapid in Chiese industdy is developnig e,and it is From be in a enjoy a deep is developing The drone industry in China is developing The drone industy in china develops rapidly and is in a leading position in in the world. The dro…...