盲盒识别装置-2022TI杯10月联赛D题

这篇具有很好参考价值的文章主要介绍了盲盒识别装置-2022TI杯10月联赛D题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

   为备战2023国赛,在2022TI杯的10月联赛赛题中选择了D题盲盒识别装置作为训练题目。期间查询了很多金属探测的方式,基本是通过电磁感应来检测金属,通过比较不同金属对线圈电感的不同影响程度,加入振荡电路来测出振荡频率,进而比较不同的硬币情况。
   TI公司有给出专门用于电感测量的数字转换器。本文章选择了LDC1314作为检测芯片,通过不同硬币对LC振荡电路的不同影响,由单片机读取到不同的数据,来进行硬币的识别。
   在题目的完成过程中,查询了诸多LDC1314的驱动代码,但是基本上都不是使用裸芯片和MSP430F5529单片机进行控制的。进行多次修改后,完成了对LDC1314的数据读取。本文章侧重MSP430F5529对芯片的软件读取代码。文末给出了CCS工程文件链接。
   本代码显示使用了LCD12864液晶屏进行显示,板子为最小开发板。屏幕代码在文章中不再给出,在CCS工程文件中有相关说明。

总体方案描述

   本系统以MSP430F5529作为控制核心,设计并制作了盲盒识别装置,实现了检测盲盒的有无,进而通过电磁检测技术判断不同种类盲盒内硬币的种类以及摆放方式。系统通过光敏传感器LED灯的亮灭来判断是否有盲盒放置,当检测到有盲盒时,LC振荡器谐振频率发生变化,系统通过LDC1314传感器来测量LC振荡器的谐振频率,不同的谐振频率对应不同种类的盲盒,进而判断盲盒内硬币的种类和摆放方式。系统通过扩展板OLED屏显示传感区域盲盒“有”“无”,以及工作状态,识别完成后能够显示识别完成和硬币种类和硬币组合。
   全部硬件的实物图片如下图所示:

LDC1314模块原理图

   LDC1314模块的原理图大致如下图所示:
盲盒识别装置-2022TI杯10月联赛D题
   由于模块中在通道连接出已经有100pF电容,后续连接LC传感器的时候需要注意电容的值。
   该模块在淘宝中有现成的,建议可以直接买该模块:LDC1314转接板。
   不太建议自己去焊接这个模块(自己血泪的教训)。其一、该芯片封装是WQFN(RGH)|16,芯片引脚全在下面,手焊很难;其二、该PCB资料还需要自己去画,进行打板,周期很长。

硬件大致连接情况

   硬件主要是一个LDC1314模块和光电传感器模块。光电传感器模块淘宝上应该几块钱就能买到,主要是以一个VDD电源接口、一个GND接口和一个DO数字输出接口,模拟接口AO不需要接。用5529读取数字输出接口,判断有无盲盒遮挡就行;LDC1314需要用到I2C通信的引脚SCL和SDA,I2C地址选择端ADDR,以及工作状态引脚SD。
  LDC1314CLKIN采用了外部40M时钟。

LDC1314介绍

   LDC1314读取LC振荡器的振荡频率,转化成相应的12位数字量,通过I2C通信来进行数据的读取。
   这篇文章介绍了LDC1314的各个引脚的功能以及连接情况,链接在这里:LDC1314中文引脚说明。
   这篇文章介绍了LDC1314的使用方法,各个流程。以及一些寄存器的意义。LDC1314的使用。
   两篇文章都是对TI官网上LDC1314数据手册的中文翻译,更具体的使用方法可以直接在数据手册上进行查找。

用MSP430F5529驱动LDC1314(代码)

驱动代码

   具体的I2C通信代码写法在此不再介绍,如有需要可以自行搜索I2C通信进行相关了解。直接给出LDC1314驱动全部代码。

ldc1314.h文件如下:

#ifndef SRC_LDC1314_H_
#define SRC_LDC1314_H_

typedef unsigned char uint8_t;
typedef unsigned int uint16_t;

extern unsigned int SENSOR_CH;              //数组声明 存储四个通道的电感线圈采样值

//PORT_SET
#define SCL_DIR  P6DIR |=BIT1
#define SDA_DIR  P6DIR |=BIT2
#define ADDR_DIR P6DIR|=BIT3
#define SD_DIR   P6DIR|=BIT5

#define ADDR_0 P6OUT&=~BIT3
#define SD_0   P6OUT&=~BIT5
#define SCL1 P6OUT |=BIT1
#define SCL0 P6OUT &=~BIT1
#define SDA1 P6OUT |=BIT2           //IIC数据引脚
#define SDA0 P6OUT &=~BIT2
#define SDAIN P6DIR &=~BIT2
#define SDAOUT P6DIR |=BIT2
#define SDADATA (P6IN & BIT2)


// I2C
void I2C_INIT(void);
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Ack(void);
void IIC_NAck(void);
unsigned char IIC_Wait_Ack(void);
unsigned char IIC_Read_Byte(unsigned char ack);
void IIC_Send_Byte(unsigned char txd);
unsigned int Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned int REG_data);
unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address,unsigned int *Read);

// LDC1314 COMMANDS
#define LDC13xx16xx_CMD_DATA_MSB_CH0          0x00
#define LDC13xx16xx_CMD_DATA_LSB_CH0          0x01
#define LDC13xx16xx_CMD_DATA_MSB_CH1          0x02
#define LDC13xx16xx_CMD_DATA_LSB_CH1          0x03
#define LDC13xx16xx_CMD_DATA_MSB_CH2          0x04
#define LDC13xx16xx_CMD_DATA_LSB_CH2          0x05
#define LDC13xx16xx_CMD_DATA_MSB_CH3          0x06
#define LDC13xx16xx_CMD_DATA_LSB_CH3          0x07
#define LDC13xx16xx_CMD_REF_COUNT_CH0         0x08     //参考计数设置
#define LDC13xx16xx_CMD_REF_COUNT_CH1         0x09
#define LDC13xx16xx_CMD_REF_COUNT_CH2         0x0A
#define LDC13xx16xx_CMD_REF_COUNT_CH3         0x0B
#define LDC13xx16xx_CMD_OFFSET_CH0          0x0C     //补偿值
#define LDC13xx16xx_CMD_OFFSET_CH1          0x0D
#define LDC13xx16xx_CMD_OFFSET_CH2          0x0E
#define LDC13xx16xx_CMD_OFFSET_CH3          0x0F
#define LDC13xx16xx_CMD_SETTLE_COUNT_CH0      0x10     //解决参考计数
#define LDC13xx16xx_CMD_SETTLE_COUNT_CH1    0x11
#define LDC13xx16xx_CMD_SETTLE_COUNT_CH2      0x12
#define LDC13xx16xx_CMD_SETTLE_COUNT_CH3      0x13
#define LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH0  0x14     //参考和传感器分频设置
#define LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH1  0x15
#define LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH2  0x16
#define LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH3  0x17
#define LDC13xx16xx_CMD_STATUS              0x18
#define LDC13xx16xx_CMD_ERROR_CONFIG        0x19     //错误报告配置
#define LDC13xx16xx_CMD_CONFIG              0x1A     //转换配置
#define LDC13xx16xx_CMD_MUX_CONFIG          0x1B     //通道复用
#define LDC13xx16xx_CMD_RESET_DEVICE        0x1C     //复位设备
#define LDC13xx16xx_CMD_SYSTEM_CLOCK_CONFIG 0x1D     //
#define LDC13xx16xx_CMD_DRIVE_CURRENT_CH0     0x1E     //当前驱动设置
#define LDC13xx16xx_CMD_DRIVE_CURRENT_CH1   0x1F     //
#define LDC13xx16xx_CMD_DRIVE_CURRENT_CH2   0x20     //
#define LDC13xx16xx_CMD_DRIVE_CURRENT_CH3     0x21     //
#define LDC13xx16xx_CMD_MANUFACTID          0x7E     //制造商ID
#define LDC13xx16xx_CMD_DEVID                 0x7F     //设备ID

#define EVM_MIN_I2CADDR     0x2A
#define EVM_MAX_I2CADDR     0x2B
#define EVM_DEFAULT_I2CADDR  EVM_MIN_I2CADDR                        //EVM_MIN_I2CADDR
#define EVM_DEFAULTS_SIZE 24 // 13 registers, 0x08 - 0x14



void LDC1314_INIT(void);
void LDC1314_Read(void);


#endif /* SRC_LDC1314_H_ */

ldc1314.c文件如下:

#include <msp430.h>
#include "ldc1314.h"
typedef unsigned char u8;
unsigned int SENSOR_CH;                //存储四个通道的电感线圈采样值
static uint8_t default_addr;

#define CPU_F ((double)1000000)
#define DelayMS(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))    //宏定义延时函数
#define IIC_Delay(x) { unsigned char y; y = x; while(--y);}

//I2C start/
unsigned char I2C_SDA_READ()
{
    unsigned char s;
    SDAIN;
    s=SDADATA;
    SDAOUT;
    return s;
}

void I2C_INIT(void)
{

}


/*******************************************************************************
* Function Name  : IIC_Start
* Description    : Master Start Simulation IIC Communication
* Input          : None
* Output         : None
* Return         : Wheather  Start
****************************************************************************** */
void IIC_Start(void)
{
    SDA1;
    SCL1;
    IIC_Delay(7);
    IIC_Delay(7);
    SDA0; ;
    IIC_Delay(7);
    SCL0;
}
/*******************************************************************************
* Function Name  : IIC_Stop
* Description    : Master Stop Simulation IIC Communication
* Input          : None
* Output         : None
* Return         : None
****************************************************************************** */
void IIC_Stop(void)
{
    SCL0;
    SDA0;//STOP:when CLK is high DATA change form low to high
    IIC_Delay(7);
    SCL1;
    SDA1;//??I2C??????
    IIC_Delay(7);
}

/*******************************************************************************
* Function Name  : IIC_Ack
* Description    : Master Send Acknowledge Single
* Input          : None
* Output         : None
* Return         : None
****************************************************************************** */
void IIC_Ack(void)
{
    SDA0;
    IIC_Delay(7);
    SCL1;
    IIC_Delay(7);
    SCL0;
    SDA1;
    IIC_Delay(1);
    SDA0;
    SCL0;
}
/*******************************************************************************
* Function Name  : IIC_NAck
* Description    : Master Send No Acknowledge Single
* Input          : None
* Output         : None
* Return         : None
****************************************************************************** */
void IIC_NAck(void)
{
    SCL0;
    SDA1;
    IIC_Delay(7);
    SCL1;
    IIC_Delay(7);
    SCL0;
    SDA0;
}

/*******************************************************************************
* Function Name  : I2C_Wait_Ack
* Description    : Master Reserive Slave Acknowledge Single
* Input          : None
* Output         : None
* Return         : Wheather  Reserive Slave Acknowledge Single
****************************************************************************** */
unsigned  char IIC_Wait_Ack(void)
{
    unsigned int ucErrTime = 0;
    SDA1;
    IIC_Delay(7);
    SCL1;
    IIC_Delay(7);

    while(I2C_SDA_READ())
    {
        ucErrTime++;
        if(ucErrTime>250)
        {
            IIC_Stop();
            return 1;
        }
    }
    SCL0;
    SDA0;
    IIC_Delay(7);
    return 0;
}

/*******************************************************************************
* Function Name  : IIC_Send_Byte
* Description    : Master Send a Byte to Slave
* Input          : Will Send Date
* Output         : None
* Return         : None
****************************************************************************** */
void IIC_Send_Byte(unsigned  char Dat)
{
    unsigned  char t;

    for(t=0;t<8;t++)
    {
                if(Dat & 0x80)
                {
                    SDA1;
                }
                else
                {
                    SDA0;
                }
        Dat<<=1;
                IIC_Delay(7);
                SCL1;
                IIC_Delay(7);
                SCL0;
    }
}
/*******************************************************************************
* Function Name  : I2C_Read_Byte
* Description    : Master Reserive a Byte From Slave
* Input          : None
* Output         : None
* Return         : Date From Slave
****************************************************************************** */
unsigned  char IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;

        SDA1;
        for(i=0;i<8;i++ )
        {
            SCL0;
            IIC_Delay(7);
            SCL1;
            IIC_Delay(3);
      receive<<=1;
      if(I2C_SDA_READ())receive++;
            IIC_Delay(3);
            SCL0;
    }
    if (!ack)
        IIC_NAck();
    else
        IIC_Ack();
    return receive;
}
//ZRX
//单字节写入*******************************************

uint16_t Single_Write(unsigned  char SlaveAddress, unsigned  char REG_Address,uint16_t REG_data)             //void
{
        static unsigned  char buffer[2];

        buffer[0] = (REG_data >> 8);
        buffer[1] = (unsigned  char)(REG_data & 0x00ff);

    IIC_Start();

    IIC_Send_Byte(SlaveAddress << 1);

    if (IIC_Wait_Ack() == 1)
        {
            return 0;
        }

    IIC_Send_Byte(REG_Address);
        if (IIC_Wait_Ack() == 1)
        {
            return 0;
        }

        IIC_Send_Byte(buffer[0]);
        if (IIC_Wait_Ack() == 1)
        {
            return 0;
        }

        IIC_Send_Byte(buffer[1]);
        if (IIC_Wait_Ack() == 1)
        {
            return 0;
        }

        IIC_Stop();

        return 1;
}


//单字节读取*****************************************
unsigned char Single_Read(unsigned  char SlaveAddress, unsigned  char reg_add,unsigned int *Read)
{
    unsigned  char Dat_L = 0;
    unsigned  char Dat_H = 0;

    /* 器件地址 */
    IIC_Start();
    IIC_Send_Byte(SlaveAddress << 1);
    if (IIC_Wait_Ack() == 1)
    {
        return 0;
    }

    /* 寄存器地址 */
    IIC_Send_Byte(reg_add);
    if (IIC_Wait_Ack() == 1)
    {
        return 0;
    }

    /* 器件地址(读)*/
    IIC_Start();

    IIC_Send_Byte((SlaveAddress << 1) + 1);
    if (IIC_Wait_Ack() == 1)
    {
        return 0;
    }


    Dat_H = IIC_Read_Byte(1);   //ack
    Dat_L = IIC_Read_Byte(0);   //Nack

    IIC_Stop();

    *Read = ((Dat_H << 8) | Dat_L);

    return 1;
}
//I2C/




/***************************************
 * 函数名:InitLDC1314
 * 描述  :初始化LDC1314
 * 输入  :无
 * 输出  :无
 ***************************************/
void LDC1314_INIT(void)
{
    uint8_t retVal=1;     //执行错误标志

    //IO_SET
    SCL_DIR  ;
    SDA_DIR  ;
    ADDR_DIR ;
    SD_DIR   ;

    //init begin
    ADDR_0;
    default_addr = EVM_DEFAULT_I2CADDR;
    SD_0;
    Single_Write(default_addr,LDC13xx16xx_CMD_RESET_DEVICE,0x8000);
    DelayMS(10);                  //此处延时10MS
    do
    {
        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH0,0x04D6);     // 4 clock periods
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH1,0xFFFF);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH2,0xFFFF);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH3,0xFFFF);

        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_OFFSET_CH0,0x0000);        //补偿值
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_OFFSET_CH1,0x0000);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_OFFSET_CH2,0x0000);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_OFFSET_CH3,0x0000);

        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH0,0x000A);  // 1 clock period
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH1,0x0400);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH2,0x04FF);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH3,0x0400);

        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH0,0x1001); // 1000
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH1,0x0000);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH2,0x0000);
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH3,0x0000);

        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_STATUS,0x0000); // report only DRDYs to INT
        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_CONFIG,0x1601); // CLKIN pin1281
        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_MUX_CONFIG,0x020D); // ch0, ch1,ch2,ch3-> Wipro for 4 ch
        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_SYSTEM_CLOCK_CONFIG,0x0200); // default, divide by 2

        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH0,0xF000); //
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH1,0x0000); //
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH2,0x0000); //
//        retVal &= Single_Write(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH3,0x0000); //
    }while(retVal==0);         //若执行出错,则继续循环初始化

}
/***************************************
 1. 函数名:LDC1314_Read
 2. 描述  :读取寄存器数据
 3. 输入  :无
 4. 输出  :无
 **************************************/
void LDC1314_Read()
{
    uint8_t retVal;
    do
    {
      retVal = 1;
      retVal &= Single_Read(default_addr,LDC13xx16xx_CMD_DATA_MSB_CH0,&SENSOR_CH);
//      retVal &= Single_Read(default_addr,LDC13xx16xx_CMD_DATA_MSB_CH1,&SENSOR_CH[1]);
//      retVal &= Single_Read(default_addr,LDC13xx16xx_CMD_DATA_MSB_CH2,&SENSOR_CH[2]);
//      retVal &= Single_Read(default_addr,LDC13xx16xx_CMD_DATA_MSB_CH3,&SENSOR_CH[3]);
    }while( retVal == 0);
    //消除四个通道之间本身存在的采样误差值,归一化处理
//    SENSOR_CH[0]+=2;
//    SENSOR_CH[1]+=3;
//    SENSOR_CH[2]+=3;
//    SENSOR_CH[3]+=3;
}

示例main函数如下:

#include <msp430.h>
#include "ldc1314.h"
#define SlaveAddress 0x2A   //ADDR需要接地
unsigned int i=0;
unsigned int temp=0;  //传感器结果

int main(void)
 {
    WDTCTL = WDTPW | WDTHOLD;     // Stop watchdog timer
    SCL_DIR  ;   //6.1
    SDA_DIR  ;   //6.2
    ADDR_DIR ;   //6.3
    SD_DIR   ;   //6.5
    LDC1314_INIT();                //LDC1314初始化后需要延时

      _delay_cycles(1000000);      //1s  ldc线圈工作安全时间
  	LDC1314_Read();
    while(1)
  {

                for(i=0;i<20;i++)
                {
                    LDC1314_Read();
                    temp=temp+SENSOR_CH;
                    if(i==19)
                    {
                        temp=temp/20;
                    }
                }
                temp=0;
  }
  return 0;
 }

代码运行后应该可以在temp中读取到传感器输出结果。

代码使用说明

1、代码首先需要使用LDC1314_INIT()函数进行初始化,本代码中初始化是针对CH0单通道检测进行的,里面对LDC1314的控制可以根据前面给出的LDC1314使用链接或者数据手册进行配置和修改。
2、LDC1314_Read()函数是对检测数据进行读取,读取结果在SENSOR_CH()中。

提升方面

   在完成过程中只实现了盲盒A和盲盒B的识别,并且盲盒B的识别效果并不理想。可以提升的方面有以下几点:
1、LC传感器线圈的设计,推荐在用Ti给的适配LC传感器生成时将线圈设计的大一点,至少半径应该要大于所识别硬币的最大半径。
2、选择使用LDC1614芯片作为电感检测芯片,该芯片使用方式和LDC1314完全相同,但是测量精度更高,可能能够更好的识别不同硬币间的差异。

完整工程文件链接

百度网盘链接:https://pan.baidu.com/s/14ISwsRxe3vFO6HXqM75A4Q?pwd=o7nv
提取码:o7nv
   显示采用LCD12864,自己可以根据自己的屏幕对相关的显示代码进行更改。文章来源地址https://www.toymoban.com/news/detail-441001.html

到了这里,关于盲盒识别装置-2022TI杯10月联赛D题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【02】2022.11最新超详细Vuforia图片识别教程

    【前提:Unity 2019.4.34 + Visual Studio 2019 +Vuforia 8.1.12】 现在,我们先创建一个Unity 3D 项目,项目名称例如(AR Third),进入后 我们开始以下步骤完成环境搭建 前期有非常详细教程介绍Vuforia Engine AR 插件的安装方法 不明白可以点击:https://blog.csdn.net/m0_57495651/article/details/128107903

    2023年04月11日
    浏览(44)
  • 哈工大 2022春 模式识别与深度学习 期末试题

    虽然此课程未开卷考试,但往年题还是很有参考价值的,就像今年的题和2021年就有很多到相似的题。但考的知识点肯定比题多,考试前还是需要把PPT都过一遍的。 已知条件概率和先验概率,求基于最小错误率的贝叶斯分类器 如果你有一个朋友在外地…(HMM PPT上的原题改很少

    2024年02月09日
    浏览(39)
  • 顶刊TPAMI 2022!基于不同数据模态的行为识别:最新综述

    点击下方 卡片 ,关注“ CVer ”公众号 AI/CV重磅干货,第一时间送达 点击进入—  CV 微信技术交流群 论文:https://arxiv.org/abs/2012.11866 1. 介绍 人类 行为识别 旨在了解人类的行为,并为行为指定标签,例如,握手、吃东西、跑步等。它具有广泛的应用前景,因此在计算机视觉

    2024年02月06日
    浏览(55)
  • 李宏毅2022机器学习HW10解析

    准备工作 作业十是 黑箱攻击(Blackbox Attack) ,完成作业需要助教代码和数据集,运行代码过程中保持联网可以自动下载数据集,已经有数据集的情况可关闭助教代码中的下载数据部分。关注本公众号,可获得代码和数据集(文末有方法)。 提交地址 JudgeBoi: https://ml.ee.nt

    2024年02月07日
    浏览(42)
  • 2022-渗透测试-OWASP TOP10详细讲解

    2024年02月14日
    浏览(42)
  • Jpeg-9e源码编译(Win10,VS2022)

    Jpeg-9e源代码下载网址 http://www.ijg.org/ 下载后得到文件 解压缩到“D:SourceCodesjpeg-9e” 在目录“D:SourceCodesjpeg-9e”中创建文本文件,并改名为“win32.mak”,其内容如附注所示。 使用命令行,进入VS2022开发者命令行窗口 cd D:ProgramsMicrosoft Visual Studio2022CommunityVCAuxiliaryBuild D

    2024年02月04日
    浏览(55)
  • 2022-10-11(一、远程命令执行和系统命令执行)

    命令执行漏洞是指攻击者可以随意执行系统命令 分为 RCE (远程命令执行(远程代码执行)) 系统命令执行两类。 程序应用有时候需要调用一些系统命令的函数,如PHP中的 system 、 exec 、 shell_exec 、 passthru 、 popen 、 proc_popen 等,当用户能控制这些函数中的参数时,就可以将恶

    2024年02月13日
    浏览(37)
  • 解决WIN10打开XBOX闪退问题(2022)

    方案一: 打开电脑的设置-时间和语言-地区,将地区保持在其他地区,比如香港。 方案二: 重置游戏服务: 进入电脑设置-应用-找到游戏服务(或者英文Gaming service)-高级选项-重置,如果没有游戏服务需要重置系统或者重新安装系统。 方案三: 重置Xbox App和MS商城: 进入电

    2024年02月12日
    浏览(40)
  • 2022-10-26 Unity 2进制2——文件流操作

    一、文件流 ​ 在 C# 中提供了一个文件流类 FileStream 类,它主要作用是用于读写文件的细节 ​ 我们之前学过的 File 只能整体读写文件,而 FileStream 可以以读写字节的形式处理文件 ​ 我们可以通过 FileStream 一部分一部分的读写数据流 ​ 比如我可以先存一个 int(4 个字节)再

    2024年02月06日
    浏览(26)
  • 2023“钉耙编程”中国大学生算法设计超级联赛(1)

    给出一颗树,两人在树上特定两点来回走,问最早在那个节点相遇。 两条路径相交,则一条路径的LCA一定在另一条路径上。我们可以预处理一个dfs时间戳,结合LCA来判断路径相交。 由于本题的点数较小,所以我们可以枚举相交链上的每一个点,然后计算他们在这个点最早相遇

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包