VL6180X传感器驱动

2023-11-09

vl6180x_i2c.c

I2C通信

获取VL6180x地址

这里写图片描述
可以知道7位地址为0x29
写: 0x52
读: 0x53

写入数据

这里写图片描述

/*
 * 通过I2C总线向某一寄存器写入一个字节数据
 *  成功 0
 *  失败 1 
 */
uint8 VL6180X_WriteBytes(uint8 I2C_addr,uint16 index,uint8 dat)
{
	uint8 Index_H = (uint8)(index >> 8);
        uint8 Index_L = (uint8)(index & 0xff);

	start();
	iic_write(I2C_addr | 0X00); //WRITE i2c
	if (check_ack()==0) {
		goto err;
	}
	iic_write(Index_H); //TDOS'register
	if (check_ack()==0) {
		goto err;
	}
        iic_write(Index_L); //TDOS'register
	if (check_ack()==0) {
		goto err;
	}
        
	iic_write(dat); //发送数据字节
	if (check_ack()==0) {
		goto err;
	}
        stop();
        return 0;
err:
	stop();
        return 1;
}

读出数据

读单个数据

/*
 * 通过I2C总线读出某一寄存器的数据
 */
uint8 VL6180x_ReadBytes(uint8 I2C_addr, uint16 index) {
	uint8 dat;
        uint8 Index_H = (uint8)(index >> 8);
        uint8 Index_L = (uint8)(index & 0xff);

	start();
	iic_write(I2C_addr | 0X00); //WRITE i2c
	if (check_ack()==0) {
		goto err;
	}
	iic_write(Index_H); //TDOS'register
	if (check_ack()==0) {
		goto err;
	}
        iic_write(Index_L); //TDOS'register
	if (check_ack()==0) {
		goto err;
	}
        
	start(); //重发起动信号
	iic_write(I2C_addr | 0X01); //READ
	if (check_ack()==0) {
		goto err;
	}
	dat = iic_read();	//接收读出的数据
	stop();
        return dat;
err:
	stop();
	return 0;
}

读两组数据

/*
 * 通过I2C总线读出某一寄存器的数据
 */
uint16 VL6180x_Read_Two_Bytes(uint8 I2C_addr, uint16 index) {
	uint8 t;
        uint16 data_res;
	uint8 Index_H = (uint8)(index >> 8);
        uint8 Index_L = (uint8)(index & 0xff);

	start();
	iic_write(I2C_addr | 0X00); //WRITE i2c
	if (check_ack()==0) {
		goto err;
	}
	iic_write(Index_H); //TDOS'register
	if (check_ack()==0) {
		goto err;
	}
        iic_write(Index_L); //TDOS'register
	if (check_ack()==0) {
		goto err;
	}
        stop();
        
	start(); //重发起动信号
	iic_write(I2C_addr | 0X01); //READ
	if (check_ack()==0) {
		goto err;
	}
	t = iic_read();	//接收读出的数据
 	send_ack();      
        data_res = t; 
        
	t = iic_read();	//接收读出的数据
 	send_ack();       
        data_res = ((data_res<<8) | t);
        
//	t = iic_read();	//接收读出的数据     
// 	send_ack();   
//        data_res = ((data_res<<16) | t);
//        
//        t = iic_read();	//接收读出的数据     
// 	send_ack();   
//        data_res = ((data_res<<24) | t);
        
	stop();
        return data_res;
err:
	stop();
	return 0;
}

检测ID

从文档中获取ID地址:
这里写图片描述
地址:0x000
默认值: 0xB4

/*
*********************************************************************************************************
 1. 函 数 名: VL6180X_CheckID
 2. 功能说明: 获取VL6180X的ID
 3. 返 回 值: VL6180X_ID
*********************************************************************************************************
*/
uint8 VL6180X_CheckID(void)
{
    uint8 data_ID;
    data_ID = VL6180x_ReadBytes(DEV_ADDR, VL6180X_IDENTIFICATION_MODEL_ID);
    return data_ID;
}

获取芯片的ID目的:

  1. 检测通信是否成功
  2. 检测芯片是否正常工作

初始化

这里写图片描述

void VL6180X_Init(void)
{
    uint8 reset=0, timeOut=0;
    GPIO_0_OUTPUT;
    GPIO_1_OUTPUT;
//    Power_PIN_OUTPUT;
//    Power_PIN_PORT=0;
//    GPIO_0_PIN_PORT = 0;
//    GPIO_1_PIN_PORT = 0;
//    DelayMS(5);
//    Power_PIN_PORT=1;
//    DelayMS(5);
//    GPIO_0_PIN_PORT = 1;
//    GPIO_1_PIN_PORT = 1;
//    DelayMS(5);
    GPIO_0_PIN_PORT = 0;
    GPIO_1_PIN_PORT = 0;
    DelayMS(10);
    GPIO_0_PIN_PORT = 1;
    GPIO_1_PIN_PORT = 1;
    DelayMS(1);
    
    while(!(VL6180X_CheckID() == 0xB4));
    DelayMS(5);
    
    VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSTEM_FRESH_OUT_OF_RESET, 0x01);  
    while (reset!=1 && timeOut<100) {
        reset = VL6180x_ReadBytes(DEV_ADDR, VL6180X_SYSTEM_FRESH_OUT_OF_RESET);  // read fresh_out_of_reset bit
        if(reset == 1) {  // if if fresh_out_of_reset bit set, then device has been freshly initialized

            // SR03 settings AN4545 24/27 DocID026571 Rev 19 SR03 settings
            // http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00122600.pdf
            // Below are the recommended settings required to be loaded onto the VL6180X during the
            // initialisation of the device (see Section 1.3).
            // Mandatory : private registers


            VL6180X_WriteBytes(DEV_ADDR, 0x0207, 0x01);
            data_reg = VL6180x_ReadBytes(DEV_ADDR, 0x0207);

            VL6180X_WriteBytes(DEV_ADDR, 0x0208, 0x01);
            VL6180X_WriteBytes(DEV_ADDR, 0x0096, 0x00);
            VL6180X_WriteBytes(DEV_ADDR, 0x0097, 0xFD);
            VL6180X_WriteBytes(DEV_ADDR, 0x00e3, 0x00);
            VL6180X_WriteBytes(DEV_ADDR, 0x00e4, 0x04);
            data_reg = VL6180x_ReadBytes(DEV_ADDR, 0x00e4);

            VL6180X_WriteBytes(DEV_ADDR, 0x00e5, 0x02);
            VL6180X_WriteBytes(DEV_ADDR, 0x00e6, 0x01);
            VL6180X_WriteBytes(DEV_ADDR, 0x00e7, 0x03);
            VL6180X_WriteBytes(DEV_ADDR, 0x00f5, 0x02);
            VL6180X_WriteBytes(DEV_ADDR, 0x00d9, 0x05);
            VL6180X_WriteBytes(DEV_ADDR, 0x00db, 0xce);
            VL6180X_WriteBytes(DEV_ADDR, 0x00dc, 0x03);
            VL6180X_WriteBytes(DEV_ADDR, 0x00dd, 0xf8);
            VL6180X_WriteBytes(DEV_ADDR, 0x009f, 0x00);
            VL6180X_WriteBytes(DEV_ADDR, 0x00a3, 0x3c);
            VL6180X_WriteBytes(DEV_ADDR, 0x00b7, 0x00);
            VL6180X_WriteBytes(DEV_ADDR, 0x00bb, 0x3c);
            VL6180X_WriteBytes(DEV_ADDR, 0x00b2, 0x09);
            VL6180X_WriteBytes(DEV_ADDR, 0x00ca, 0x09);
            VL6180X_WriteBytes(DEV_ADDR, 0x0198, 0x01);
            VL6180X_WriteBytes(DEV_ADDR, 0x01b0, 0x17);
            VL6180X_WriteBytes(DEV_ADDR, 0x01ad, 0x00);
            VL6180X_WriteBytes(DEV_ADDR, 0x00ff, 0x05);
            VL6180X_WriteBytes(DEV_ADDR, 0x0100, 0x05);
            VL6180X_WriteBytes(DEV_ADDR, 0x0199, 0x05);
            VL6180X_WriteBytes(DEV_ADDR, 0x01a6, 0x1b);
            VL6180X_WriteBytes(DEV_ADDR, 0x01ac, 0x3e);
            VL6180X_WriteBytes(DEV_ADDR, 0x01a7, 0x1f);
            VL6180X_WriteBytes(DEV_ADDR, 0x0030, 0x00);
            data_reg = VL6180x_ReadBytes(DEV_ADDR, 0x0030);
            

            // configure range measurement for low power
            // Specify range measurement interval in units of 10 ms from 0 (= 10 ms) - 254 (= 2.55 s)

            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_INTERMEASUREMENT_PERIOD, 0x0A); // 100 ms interval in steps of 10 ms
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_VHV_REPEAT_RATE, 0xFF); // sets number of range measurements after which autocalibrate is performed
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_VHV_RECALIBRATE, 0x01); // perform temperature calibration of the ranging sensor

            // Set Early Convergence Estimate for lower power consumption
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_MAX_CONVERGENCE_TIME, 0x32); // set max convergence time to 50 ms (steps of 1 ms)
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_RANGE_CHECK_ENABLES, 0x10 | 0x01);  // enable (0x01) early convergence estimate
            // This ECE is calculated as follows:
            // [(1 - % below threshold) x 0.5 x 15630]/ range max convergence time
            // This is ~123 ms for 50 ms max convergence time and 80% below threshold
            // This is a sixteen bit (2 byte) register with the first byte MSByte and the second LSByte
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_EARLY_CONVERGENCE_ESTIMATE, 0x00); // set early convergence estimate to 5%
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_EARLY_CONVERGENCE_ESTIMATE + 1, 0x7B); // set early convergence estimate to 5%

            // Configure ALS
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSALS_INTERMEASUREMENT_PERIOD, 0x0A);   // set to 100 ms
            data_reg = VL6180x_ReadBytes(DEV_ADDR, VL6180X_SYSALS_INTERMEASUREMENT_PERIOD);
            
            // Following is a 16-bit register with the first MSByte reserved

            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSALS_INTEGRATION_PERIOD, 0x00);
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSALS_INTEGRATION_PERIOD+1, 0x63);        // set ALS integration time to 100 ms in steps of 1 ms

            // The internal readout averaging sample period can be adjusted from 0 to 255. Increasing the sampling
            // period decreases noise but also reduces the effective max convergence time and increases power consumption:
            // Effective max convergence time = max convergence time - readout averaging period (see
            // Section 2.5: Range timing). Each unit sample period corresponds to around 64.5 ?s additional
            // processing time. The recommended setting is 48 which equates to around 4.3 ms
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_READOUT_AVERAGING_SAMPLE_PERIOD, 0x30);  // compromise between low noise and increased execution time
            // Gain can be 0 = 20, 1 = 10, 2 = 5, 3 = 2.5, 4 = 1.67, 5 = 1.25, 6 = 1.0 and 7 = 40
            // These are value possible for the lower nibble. The upper nibble must be 4
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSALS_ANALOGUE_GAIN, 0x40 | 1);   // Sets light and dark gain (don't change upper nibble)
            data_reg = VL6180x_ReadBytes(DEV_ADDR, VL6180X_SYSALS_ANALOGUE_GAIN);
            
            // Scalar (1 - 32, bits 4:0) to multiply raw ALS count for additonal gain, if necessary
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_FIRMWARE_RESULT_SCALER, 0x01);

            // Configure the interrupts
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSTEM_MODE_GPIO0, 0x00);                // set up GPIO 0 (set to high impedence for now)
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSTEM_MODE_GPIO1, 0x00);                // set up GPIO 1 (set to high impedence for now)
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSTEM_INTERRUPT_CONFIG_GPIO, 0x24);     // enable sample ready interrupt

#if 0
            // enable continuous range mode
            if(VL6180XMode == contRangeMode) {
                VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_START, 0x03);  // start auto range mode

            }
            // enable continuous ALS mode
            if(VL6180XMode == contALSMode) {
                // Configure ALS
                VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSALS_INTERMEASUREMENT_PERIOD, 0x32);   // set to 100 ms
                // Following is a 16-bit register with the first MSByte reserved
                VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSALS_INTEGRATION_PERIOD+1, 0x32);        // set ALS integration time to 50 ms in steps of 1 ms
                VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSALS_START, 0x03);                     // start auto range mode
            }
#endif
            // Clear reset bit
            VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSTEM_FRESH_OUT_OF_RESET, 0x00);        // reset fresh_out_of_reset bit to zero
        } else {
            timeOut++;
        }
    }
    reset=0;
   
}

这段代码可以移植官方例程,配置寄存器的值,初始化I\O口

获取光强值

这里写图片描述

uint16 ligthPollingRead(void) 
{
    uint8 status;
    uint16 alsraw;
    
    /* Wait for device ready. */
    do {
        status = VL6180x_ReadBytes(DEV_ADDR, VL6180X_RESULT_ALS_STATUS);
    } while ((status & (1 << 0)) == 0);
    
    VL6180X_WriteBytes(DEV_ADDR,VL6180X_SYSALS_START, START_SINGLE_MODE);
    data_reg = VL6180x_ReadBytes(DEV_ADDR, VL6180X_SYSALS_START);

    status = VL6180x_ReadBytes(DEV_ADDR,VL6180X_RESULT_INTERRUPT_STATUS_GPIO);
    status = status & ALS_SINGLE_MODE_MASK;

//     while (status != ALS_SINGLE_MODE_READY) {
//        status =  VL6180x_ReadBytes(DEV_ADDR, VL6180X_RESULT_INTERRUPT_STATUS_GPIO);
//        status = status & ALS_SINGLE_MODE_MASK;
//        DelayMS(1);
//    }

    alsraw = VL6180x_Read_Two_Bytes(DEV_ADDR, VL6180X_RESULT_ALS_VAL);
    //als = 0.32f * ((float) alsraw / 10.32) * (100.0f/100.0f);
    VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSTEM_INTERRUPT_CLEAR, CLEAR_ALS_INT);

    return alsraw;
}

获取距离数据

这里写图片描述

uint8 RangePollingRead(void)
{
    uint8 status;
    uint8  distance;

    /* Wait for device ready. */
    do {
        status = VL6180x_ReadBytes(DEV_ADDR, VL6180X_RESULT_RANGE_STATUS);
    } while ((status & (1 << 0)) == 0);
    
    VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSRANGE_START, START_SINGLE_MODE);
    data_reg = VL6180x_ReadBytes(DEV_ADDR, VL6180X_SYSRANGE_START);
    
    status = VL6180x_ReadBytes(DEV_ADDR, VL6180X_RESULT_INTERRUPT_STATUS_GPIO);
    status = status & RANGE_SINGLE_MODE_MASK;
    
     /* Wait for measurement ready. */
    while (status != RANGE_SINGLE_MODE_READY) {
        status = VL6180x_ReadBytes(DEV_ADDR, VL6180X_RESULT_INTERRUPT_STATUS_GPIO);
        status = status & RANGE_SINGLE_MODE_MASK;
        DelayMS(1);
    }
    
    DelayMS(10);
    distance = VL6180x_ReadBytes(DEV_ADDR, VL6180X_RESULT_RANGE_VAL);
    VL6180X_WriteBytes(DEV_ADDR, VL6180X_SYSTEM_INTERRUPT_CLEAR, CLEAR_ALS_INT);
    return distance;
}

GitHub工程源代码:

https://github.com/lanhaixuan/CC2541_VL6180X_BMA250

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VL6180X传感器驱动 的相关文章

  • 数字IC验证:ARM总线协议AMBA中AHB、APB的简介、区别与联系

    写在前面 最近实习项目里用到这2个协议 因此简单整理一下 内容大多来自ARM官方文档与网络上的 我主要做一个整合 加上自己的理解补充 内容来源都会分别标出 如有侵权请指出 立刻删帖 官方文档入口 AMBA 包括AHB ASB APB 文章目
  • 下一代MOM,这你让MES+MRP情何以堪?

    MOM是Manufacturing Operation Management的缩写 中文就是制造运营管理 这个词是美国仪器 系统和自动化协会 Instrumentation System and Automation Society ISA
  • 蓝桥杯嵌入式创建第一个工程(点亮led灯)

    蓝桥杯嵌入式创建第一个工程 点亮led灯 一 keil导入stm32G431RX板级芯片包 1 1 下载板级芯片包 1 2 导入芯片包 1 2 1 我们首先打开keil 点击Pack installer 如图 1 2 2 然后选中file
  • LVGL-tileview控件

    控件特点 以page为基础扩展的控件 增加了释放后会有动画定格效果 lv tileview set tile act tileview ext gt act id x x move ext gt act id y y move true 切
  • STM32F407基于RT-Thread连接ESP8266WiFi模块

    1 连接规则 STM32F4连接ESP8266无线通信 串口通信 首先 本次用到两个串口 我使用的是普中STM32F407 第一个串口为USART1 PA2 PA3 串口一 就是数据线连接单片机和电脑时用的口 串口三USART3 PB10T
  • esp8266与stm32、手机通讯(原子云)——hal库(有代码)

    本文所讲 正点原子的wifi模块esp8266与正点原子开发板战舰V3 stm32f103zet6 及手机app通讯 esp8266分为三种工作模式 STA 8266连接到网络比如wifi 手机热点等 AP 8266作为热点 由手机连接到8
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方SPI FLASH demo中功能的复现 进行相关内容的学习及探讨 实现功能 功能 lua快速驱动 W25QXX XX代
  • 程序源码分享-STM32的PID实验(含DAC和ADC)

    一 PID 算法原理 在工业应用中 PID 及其衍生算法是应用最广泛的算法之一 是当之无愧的万能算法 如果能够熟练掌握 PID 算法的设计与实现过程 对于一般的研发人员来讲 应该是足够应对一般研发问题了 在我所接触的控制算法当中 PID 控
  • 使用Arduino开发ESP32(17):固件更新演示

    文章目录 目的 基础说明 使用演示 通过SD卡更新固件 通过网页更新固件 总结 目的 很多时候我们会有因为bug修复 功能增加等情况需要对已投产使用的设备更新固件 这种情况下再使用工具通过串口烧录固件就不是那么方便了 比较常用的是通过网络或
  • HT1621B液晶驱动(附电路图)

    最近做了一个项目用到了HT1621 电路图 datasheet code HT1621B datasheet include ht1621 h void ht1621 send high order data UCHAR data UCHA
  • STM32F4单片机ADC采样及ARM-DSP库的FFT

    模拟信号经过ADC采样后变成数字信号 数字信号可以进行FFT运算 在频域中更容易分析信号的特征 本文将介绍如何用STM32F4的进行ADC采样 并利用ARMDSP库里的FFT算法对ADC采样值进行快速傅里叶变换 我使用的是STM32F407
  • GPIO口的八种工作状态

    一直对GPIO的工作状态不是很熟悉 导致在设置IO状态时 经常会设置成推挽上拉 或者推挽下拉 开漏上拉等问题 虽然看起来没有影响MCU工作 但感觉这是一种无知的表现 现在总结下GPIO口的八种工作状态 其中四种输入状态 四种输出状态 一 输
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 一 创建产品 1 1在onenet上创建产品 1 2创建设备 查看onenet接入协议 二 设备安全认证 1 鉴权参数 2 Token算法 3 sign算法 示例如下 4 参数编码 5
  • Keil的软件仿真和硬件仿真

    一 软件仿真 Keil有很强大的软件仿真功能 通过软件仿真可以发现很多将要出现的问题 Keil的仿真可以查看很多硬件相关的寄存器 通过观察这些寄存器值的变化可以知道代码有没有正常运行 这样可以避免频繁下载程序 延长单片机Flash寿命 开始
  • cmake中的编译选项

    CMake是一个跨平台的构建系统 它可以根据简单的配置文件生成各种平台的构建工具 例如Makefile Visual Studio项目文件等 CMake使用CMakeLists txt文件来描述项目的构建规则和依赖关系 在这个文件中 可以设
  • 【零基础玩转BLDC系列】基于反电动势过零检测法的无刷直流电机控制原理

    无刷直流电动机基本转动原理请参考 基于HALL传感器的无刷直流电机控制原理 基本原理及基础知识本篇不再赘述 目录 反电势过零检测法的原理 反电势过零检测实现方法 位置传感器的存在限制了无刷直流电机在某些特定场合中的应用 如 使电机系统的体积
  • 主线剧情0.0-Linux学习资源大综合

    Linux 学习资源大综合 对收集到的比较丰富的 Linux 学习相关的资料进行整理 注 如果链接挂了请告诉我 如果链接里的内容被删了那么直接搜文章名字试试也许会搜出来很多转载的 备份 注 在 Github 上的原版文章日后可能会更新 在其
  • ESP8266 WIFI

    手机APP esp8266 单片机之间究竟是如何连接的呢 esp8266与单片机是串口连接 esp8266仅作为网络模块使用 不需要写代码 单片机通过串口发送AT指令 esp8266执行AT指令 设置为STA模式 AP模式或混合模式 生成W
  • 关注MCU 开发中的无限循环

    在 MCU 的开发过程中 我们经常会遇到需要使用无限循环的情况 例如 在前后台系统中 我们需要在一个无限循环中处理各种任务 在实时性操作系统中 我们也可能需要在一个无限循环中调度各个任务 那么 处理无限循环的语句有哪些写法呢 目前常见的有两
  • 如何为 Arm Cortex M4 交叉编译 GSL?

    我正在使用带有arm cortex m4的STM32 MCU 并且想要使用gsl 2 7 1 但是 我已经尝试过例如命令 configure prefix home user name gsl arm target arm none eab

随机推荐

  • 【数据挖掘】属性的概念

    1 属性 一个数据字段 表示数据对象的一个特征 属性 数据挖掘和数据库人员使用 维 数据仓库 特征 机器学习 变量可以互换实用 统计学家使用 2 标称属性 标称意味着 与名称相关 标称属性的值是一些符号或失误的名称 每个只代表某种类别 编码
  • 层次聚类matlab代码_MATLAB实现聚类分析

    点击标题下 蓝色微信名 可快速关注 MATLAB聚类算法K means聚类与层次聚类 1 kmeans聚类 聚类算法是一种根据初始点不断迭代 最后将数据聚类的过程 matlab中实现Kmeans常用聚类函数如下 IDX C kmeans X
  • 小程序顶部导航栏标题不居中

    小程序默认在andriod中居左 ios中居中 解决方法 自定义导航栏 小程序去掉顶部导航栏 window backgroundTextStyle light navigationBarBackgroundColor 666 navigat
  • redis详解之数据备份与恢复

    一 数据备份 Redis所有数据都是保存在内存中 Redis数据备份可以定期的通过异步方式保存到磁盘上 该方式称为半持久化模式 如果每一次数据变化都写入aof文件里面 则称为全持久化模式 本章节通过配置文件 触发快照的方式 恢复数据的操作
  • word论文:参考文献字间距太大的处理方法

    全选参考文献 右键选择 段落 选择中文版式 设置如下图所示 换行 全选 字符间隔 只选择自动调整中文与数字的间距 然后就完成了参考文献间距变动问题 重点 允许西文换行
  • 【十九】微分动态规划

    微分动态规划 Differential Dynamic Programming DDP 注意上一讲中推导出的公式 我们发现如果只需更新 则不必维护 的更新 即在一定程度上 是不需要的 所以我们在下面的讨论中不考虑 的影响 使用上一讲中将非线
  • 科技云报道:大小巨头涌入赛道,隐私计算迎来商业落地元年

    科技云报道原创 近两年来 隐私计算逐渐从小众领域为大众熟知 2021年 隐私计算开始在真实商业场景中全面落地 据毕马威发布的 2021隐私计算行业研究报告 显示 受到大数据融合应用和隐私保护的双重需求驱动 国内隐私计算市场将快速发展 三年后
  • 什么是 vue-cli?怎样创建vue-cli项目?

    1 什么是 vue cli vue cli 俗称 vue 脚手架 是 vue 官方提供的 快速生成 vue 工程化项目的工具 特点 开箱即用 基于 webpack 功能丰富且易于扩展 支持创建 vue2 和 vue3 的项目 vue cli
  • JAVA使用servlet接收json格式的方法

    JAVA中使用HttpServletRequest接收前台传入的参数 其中json的格式是 penalty 0 5 deductPointsItem 7 photoUrl image 26quality 80 26size b9999 10
  • 链表的实现:无头单向非循环链表的实现

    笔者在上篇博客书写了一个名为 链式存储之 链表的引出及其简介原文链接为 https blog csdn net weixin 64308540 article details 128374876 spm 1001 2014 3001 550
  • 【Blender】摄像机-01常用操作

    新建相机如何快速将视角设为相机视角 A 新建相机后 ctrl alt 0 即把当前视角作为摄像机视角 例如正视图 先按1 然后ctrl alt 0 摄像机常用操作 1 shift a新建摄像机 调整合适焦距 当然也可以不调整 2 点击0键
  • 5. springBoot-web开发——模板引擎

    1 thymeleaf Thymelaef 是通过他特定语法对 html 的标记做渲染的一个视图层技术 1 1 引入thymeleaf 1 引入thymeleaf的依赖
  • .net 中context、DbContext是什么?

    可以将上下文看作相关 事物 的包装 例如 HttpContext DbContext ObjectContext HttpContext包含任何HTTP相关操作的信息 DbContext包含用于数据库通信的方法和属性 ObjectConte
  • 对数字添加前导0达到固定长度

    近期在处理一个时间展示 要求月日时分秒固定展示2位数字 毫秒固定展示3位数字 传统的作为是根据小于10 小于100等在前面添加特定个数的0 昨晚突然想到 字符串的slice方法可以指定一个负数值来取字符串的后面n个字符 这样在原始数字前面添
  • Win10下AutoCAD2014 +VS2010 + Object2014 安装与配置环境

    Win10下AutoCAD2014 VS2010 Object2014 安装与配置环境 安装前的准备 1 AutoCAD2014安装包 https pan baidu com s 1nK zeBv7tIcipOKcVroo3g 提取码 p7
  • IDEA自动设置作者信息

    一 背景和痛点 以前用Eclipse 忘记设置类的作者信息 是可以使用 之后回车自动出现作者信息的 现在用IDEA不能通过这种方式补全 非常不方便 注意 网上很多教程 说的是新建java类的时候出现作者信息 跟提到的问题痛点是不同的 作者信
  • 实验1:顺序表的基本操作(包括基本代码)

    实验1 顺序表的基本操作 实验目的 1 掌握顺序表的存储结构 2 实现顺序表的基本操作 实验内容 建立一个顺序表L1 11 2 35 41 65 2 1 查找元素5是否存在 2 删除位序为3的元素 3 输出所有元素 4 输出顺序表的长度 5
  • [专利与论文-10]:跟小朋友聊专利

  • C语言经典100例(5)——输入三个整数x,y,z,请把这三个数由小到大输出。

    题目分析 很简单 依次比较三个数的大小进行排序 最后输出即可 代码实现 include
  • VL6180X传感器驱动

    vl6180x i2c c I2C通信 获取VL6180x地址 可以知道7位地址为0x29 写 0x52 读 0x53 写入数据 通过I2C总线向某一寄存器写入一个字节数据 成功 0 失败 1 uint8 VL6180X WriteByte