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

【MT32F006】MT32F006之max17048电量计(IIC通信)

本文最后修改时间:2025年01月09日

一、本节简介

本文介绍如何使用MT32F006通过IIC与电量计max17048通信。

二、实验平台

库版本:V1.0.0

编译软件:MDK5.37

硬件平台:MT32F006开发板(主芯片MT32F006)

仿真器:JLINK

三、版权声明

1)作者:甜甜的大香瓜

2)声明:喝水不忘挖井人,转载请注明出处。

3)纠错/业务合作:897503845@qq.com

4)香瓜嵌入式之STM8/STM32群:164311667

5)本文出处:原创连载资料《简单粗暴学MT32F006》

6)完整开源资料下载地址(电脑端打开):opengua.taobao.com

四、实验前提

1、在进行本文步骤前,请先阅读以下章节:

1)《简单粗暴学MT32F006》的第一章和第二章章节

暂无

2、在进行本文步骤前,请先实现以下章节:

1)《简单粗暴学MT32F006》的《MT32F006IIC》。

2)《简单粗暴学MT32F006》的《MT32F006之串口》。

五、基础知识

暂无

六、硬件原理

七、实验步骤

1、编写并添加驱动

1)编写驱动GUA_Max17048.c(存放在“……\Projects\MT006_StdPeriph_Templates\GUA”)

//**********************************************************************

//name:         GUA_Max17048.c

//introduce:    Max17048驱动

//author:       opengua     

//email:        897503845@qq.com  

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

#include "mt006.h"

#include "GUA_Max17048.h"

#include "GUA_IIC.h"

#include "GUA_UART.h"

#include "stdbool.h"

/*********************宏定义************************/

//MAX17048 registers

#define VCELL                         0x02U       // R/-: ADC measurement of VCELL, 78.125uV/cell

#define SOC                               0x04U       // R/-: Battery state of charge, 1%/256

#define MODE                              0x06U      // -/W: Current operating mode, enable sleep

#define VERSION                       0x08U           // R/-: Production version

#define HIBRT                         0x0AU       // R/W: Hibernation thresholds

#define CONFIG                        0x0CU           // R/W: Compensation, toggle sleep, alert masks, config

#define VALRT                         0x14U       // R/W: Voltage level to generate alert

#define CRATE                         0x16U       // R/-: Charge/discharge rate, 0.208%/hr

#define VRESET_ID                 0x18U          // R/W: VCELL for chip reset

#define STATUS                        0x1AU           // R/W: Over/undervoltage, SOC change/low, reset alerts

#define TABLE                         0x40U       // -/W: Configures battery parameters

#define CMD                               0xFEU       // R/W: POR command

//MAX17048 masks/constants

#define VERSION_MSK               0xFFF0U

#define PART_NUMBER               0x0010U

#define BAT_LOW_POS               0U

#define BAT_LOW_MSK               (0x001FU << BAT_LOW_POS)

#define BAT_LOW_MIN               1U

#define BAT_LOW_MAX               32U

#define ALRT_BIT_POS              5U

#define ALRT_BIT_MSK              (0x0001U << ALRT_BIT_POS)

#define ALSC_BIT_POS              6U

#define ALSC_BIT_MSK              (0x0001U << ALSC_BIT_POS)

#define VALRT_MAX_POS          0U

#define VALRT_MAX_MSK          (0x00FFU << VALRT_MAX_POS)

#define VALRT_MIN_POS          8U

#define VALRT_MIN_MSK          (0x00FFU << VALRT_MIN_POS)

#define VALRT_RESOLUTION       20U

#define VRESET_POS                9U

#define VRESET_MSK                (0x007FU << VRESET_POS)

#define VRESET_RESOLUTION 40U

#define ENVR_BIT_POS              14U

#define ENVR_BIT_MSK              (0x0001U << ENVR_BIT_POS)

#define ALRT_STATUS_POS        8U

#define ALRT_STATUS_MSK        (0x003FU << ALRT_STATUS_POS)

#define QUICK_START_BIT_POS 14U

#define QUICK_START_BIT_MSK (0x0001U << QUICK_START_BIT_POS)

//电池电量阈值设置宏

#define BAT_LOW_PERCENT        15U //可修改设置1%~32%

//VCELL的数值与mv转换

#define VCELL_TO_MV(vcell)     ((vcell * 5U) >> 6U)    //vcell*5/64=vcell*0.078125mV(寄存器里是每cell代表78.125uV)

//MAX17048是大端,所以需要小端转大端

#define SWAP16(x)                 ((uint16_t)(((x) << 8U) | ((x) >> 8U)))

/*********************变量************************/

uint16_t gnGUA_Max17048_Vcell = 0;        //电压

uint8_t gnGUA_Max17048_Soc = 0;               //电量

/*********************内部函数************************/

static inline bool GUA_Max17048_ReadReg(uint8_t reg, uint16_t* out);

static inline bool GUA_Max17048_WriteReg(uint8_t reg, uint16_t data);

static inline bool GUA_Max17048_ModifyReg(uint8_t reg, uint16_t data, uint16_t mask);

static bool GUA_Max17048_ReadVersion(void);

static bool GUA_Max17048_GetVcell(uint16_t* mv);

static bool GUA_Max17048_GetSoc(uint8_t* percent);

static bool GUA_Max17048_SetBatLowSoc(uint16_t percent);

static bool GUA_Max17048_SetUndervoltedVoltage(uint16_t mv);

static bool GUA_Max17048_SetOvervoltedVoltage(uint16_t mv);

static bool GUA_Max17048_SetResetVoltage(uint16_t mv);

static bool GUA_Max17048_SetSocChangeAlert(bool enable);

static bool GUA_Max17048_SetvVoltageResetAlert(bool enable);

static bool GUA_Max17048_ClearAlert(void);

static bool GUA_Max17048_GetAlerts(uint8_t* alerts);

static bool GUA_Max17048_QuickStartMode(void);

//**********************************************************************

//name:         GUA_Max17048_ReadReg

//introduce:    读取寄存器数据

//parameter:    reg:要读到的寄存器地址

//                         *out:数据要读到的接收缓冲区

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static inline bool GUA_Max17048_ReadReg(uint8_t reg, uint16_t* out)

{

    if(GUA_IIC_ReadBytes(reg, 2, (uint8_t*)out, GUA_MAX17048_ADDR) == false)  //读两个字节   

        return false;     

    *out = SWAP16(*out);                                                                                               //小端转大端

   

    return true;

}

//**********************************************************************

//name:         GUA_Max17048_WriteReg

//introduce:    写入寄存器数据

//parameter:    reg:要写到的寄存器地址

//                         data:要写入的数据

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static inline bool GUA_Max17048_WriteReg(uint8_t reg, uint16_t data)

{

    uint8_t Buffer[2];

   

    Buffer[0] = (uint8_t)(data&0X00FF);

    Buffer[1] = (uint8_t)(data>>8);

   

    return GUA_IIC_SendBytes(reg, 2, Buffer, GUA_MAX17048_ADDR);

}

//**********************************************************************

//name:         GUA_Max17048_ModifyReg

//introduce:    修改寄存器某一位的值

//parameter:    reg:要修改的寄存器地址

//                         data:最终修改的数据

//                         mask:寄存器中对应的位

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static inline bool GUA_Max17048_ModifyReg(uint8_t reg, uint16_t data, uint16_t mask)

{

    uint16_t tmp;

   

    //读出寄存器数据

    if(GUA_Max17048_ReadReg(reg, &tmp) == false)

    {

        return false;

    }

    //修改数据

    tmp = (tmp & ~mask) | (data & mask);

   

    //写入寄存器

    return GUA_Max17048_WriteReg(reg, tmp);

}

//**********************************************************************

//name:         GUA_Max17048_ReadVersion

//introduce:    读版本号,默认是0x001x

//parameter:    none

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_ReadVersion(void)

{

    uint16_t data;

   

    //读寄存器

    if(GUA_Max17048_ReadReg(VERSION, &data)==false)

    {

        return false;

  }

   

    //打印(04是4个数字;x是十六进制显示)

    printf("VERSION = 0x%04x\r\n", data);

   

    //核对版本号是否满足0x001x,并返回GUA_TRUE和GUA_FALSE

    return ((data & VERSION_MSK) == PART_NUMBER);

}

//**********************************************************************

//name:         GUA_Max17048_GetVcell

//introduce:    获取ADC计算的电压Vcell

//parameter:    mv:读的电压(单位mv)

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_GetVcell(uint16_t* mv)

{

    uint16_t data;

    //读出寄存器数据

    if(GUA_Max17048_ReadReg(VCELL, &data) == false)

    {

        return false;

    }

    //读出来的是vcell,要转换成电压值.vcell*5/64=vcell*0.078125mV(寄存器里是每cell代表78.125uV)

    *mv = (uint16_t)(VCELL_TO_MV(data));

    return true;

}

//**********************************************************************

//name:         GUA_Max17048_GetSoc

//introduce:    读电池电量

//parameter:    *percent:要读到的电量缓存区

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_GetSoc(uint8_t* percent)

{

    uint16_t data;

   

    //读出寄存器数据

    if(GUA_Max17048_ReadReg(SOC, &data)  == false)

    {

        return false;

    }

    //每256为1%,所以除256换算成百分比

  *percent = (uint8_t)(data >> 8);

   

  return true;

}

//**********************************************************************

//name:         GUA_Max17048_SetBatLowSoc

//introduce:    设置电池低 SOC(State of Charge)阈值,config寄存器的ATHD位,将在ALRT引脚产生中断

//parameter:    *percent:要读到的电量缓存区

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_SetBatLowSoc(uint16_t percent)

{

    //只能设置1%~32%

    if(percent < BAT_LOW_MIN || percent > BAT_LOW_MAX)

    {

        return false;

    }

   

    //寄存器中ATHD=32%-设定值

    uint16_t data = (uint16_t)((BAT_LOW_MAX - (percent % BAT_LOW_MAX)) & BAT_LOW_MSK);

    //修改config寄存器的ATHD位

    return GUA_Max17048_ModifyReg(CONFIG, data, BAT_LOW_MSK);

}

//**********************************************************************

//name:         GUA_Max17048_SetUndervoltedVoltage

//introduce:    设置电池欠压警报阈值

//parameter:    mv:设置的电压(单位mv)

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_SetUndervoltedVoltage(uint16_t mv)

{

    //寄存器数值=实际mv/20mv

    uint16_t data = (uint16_t)(((mv / VALRT_RESOLUTION) << VALRT_MIN_POS) & VALRT_MIN_MSK);

    //修改VALRT的高8位

    return GUA_Max17048_ModifyReg(VALRT, data, VALRT_MIN_MSK);

}

//**********************************************************************

//name:         GUA_Max17048_SetOvervoltedVoltage

//introduce:    设置电池过压警报阈值

//parameter:    mv:设置的电压(单位mv)

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_SetOvervoltedVoltage(uint16_t mv)

{

    //寄存器数值=实际mv/20mv  

    uint16_t data = (uint16_t)(((mv / VALRT_RESOLUTION) << VALRT_MAX_POS) & VALRT_MAX_MSK);

    //修改VALRT的低8位

    return GUA_Max17048_ModifyReg(VALRT, data, VALRT_MAX_MSK);

}

//**********************************************************************

//name:         GUA_Max17048_SetResetVoltage

//introduce:    设置电池复位阈值电压

//parameter:    mv:设置的电压(单位mv)

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_SetResetVoltage(uint16_t mv)

{

    //寄存器数值=实际mv/40mv

    uint16_t data = (uint16_t)(((mv / VRESET_RESOLUTION) << VRESET_POS) & VRESET_MSK);

    //修改VRESET_ID的高7位  

    return GUA_Max17048_ModifyReg(VRESET_ID, data, VRESET_MSK);

}

//**********************************************************************

//name:         GUA_Max17048_SetSocChangeAlert

//introduce:    启用或禁用SOC改变警报(变动1%)

//parameter:    enable:1启动 0关闭

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_SetSocChangeAlert(bool enable)

{

    //1启动 0关闭

    uint16_t data = (uint16_t)((enable << ALSC_BIT_POS) & ALSC_BIT_MSK);

    //修改config寄存器的ALSC位  

    return GUA_Max17048_ModifyReg(CONFIG, data, ALSC_BIT_MSK);

}

//**********************************************************************

//name:         GUA_Max17048_SetvVoltageResetAlert

//introduce:    启用或禁用电压复位警报,当写入1设置为开启后,电压复位时会通过ALRT引脚报警

//parameter:    enable:1启动 0关闭

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_SetvVoltageResetAlert(bool enable)

{

    //1启动 0关闭

    uint16_t data = (uint16_t)((enable << ENVR_BIT_POS) & ENVR_BIT_MSK);

    //修改status寄存器的EnVr位  

    return GUA_Max17048_ModifyReg(STATUS, data, ENVR_BIT_MSK);

}

//**********************************************************************

//name:         GUA_Max17048_ClearAlert

//introduce:    清除当前警报配置和状态位。

//parameter:    *percent:要读到的电量缓存区

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_ClearAlert(void)

{

    //清除警报状态位

    if(GUA_Max17048_ModifyReg(STATUS, 0, ALRT_STATUS_MSK) == false)

        return false;

    //清除警报配置

    if(GUA_Max17048_ModifyReg(CONFIG, 0, ALRT_BIT_MSK) == false)

        return false;

   

    return true;

}

//**********************************************************************

//name:         GUA_Max17048_GetAlerts

//introduce:    读取当前警报状态并且清除已触发的警报

//parameter:    *alerts:返回状态数据SC/HD/VR/VL/VH/RI

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_GetAlerts(uint8_t* alerts)

{

    uint16_t data;

    //读警报状态位

    if(GUA_Max17048_ReadReg(STATUS, &data) == false)

        return false;

    //清除警报状态位

    if(GUA_Max17048_ClearAlert() == false)

        return false;

    //返回状态数据:SC/HD/VR/VL/VH/RI

    *alerts = (uint8_t)((data & ALRT_STATUS_MSK) >> ALRT_STATUS_POS);

    return true;

}

//**********************************************************************

//name:         GUA_Max17048_QuickStartMode

//introduce:    开启快速模式

//parameter:    none

//return:       false:0错误;true:1正常

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

static bool GUA_Max17048_QuickStartMode(void)

{

    //修MODE寄存器的Quick-Start位

    return GUA_Max17048_ModifyReg(MODE, 1, QUICK_START_BIT_MSK);

}

//**********************************************************************

//name:         GUA_Max17048_UpdataVcellSoc

//introduce:    获取电压和电量

//parameter:    none

//return:       none

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

void GUA_Max17048_UpdataVcellSoc(void)

{

    //获取电压

    GUA_Max17048_GetVcell(&gnGUA_Max17048_Vcell);

    //printf("max17048 - vcell = %d,read_Voltage_mv =%d \r\n",t_temp,max17048_ReadVoltage());

    //获取电量

    GUA_Max17048_GetSoc(&gnGUA_Max17048_Soc);

    //printf("max17048 SOC = %d%%\r\n",gnGUA_Max17048_Soc);

}

//**********************************************************************

//name:         GUA_Max17048_Init

//introduce:    初始化

//parameter:    none

//return:       none

//author:       opengua

//email:        897503845@qq.com

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

void GUA_Max17048_Init(void)

{

    //读版本号确认通信是否完好(或者读ID也可以)

    if(GUA_Max17048_ReadVersion() == true)

    {

        printf("OK: find max17048 IC\r\n");

    }

    else

    {

        printf("ERROR : cannot find  max17048 IC\r\n");

    }

    //开启快速模式

    GUA_Max17048_QuickStartMode();

   

    //获取电压和电量

    GUA_Max17048_UpdataVcellSoc();

}

2)编写驱动GUA_Max17048.h(存放在“……\Projects\MT006_StdPeriph_Templates\GUA”)

//**********************************************************************

//name:         GUA_Max17048.h

//introduce:    Max17048驱动的头文件

//author:       opengua     

//email:        897503845@qq.com  

//QQ group:     香瓜单片机之STM8/STM32(164311667)

//shop:         opengua.taobao.com

//changetime:   2024.12.11

//**********************************************************************

#ifndef _GUA_MAX17048_H_

#define _GUA_MAX17048_H_

/*********************头文件************************/

#include <stdint.h>

/*********************宏定义************************/

//默认设备地址是7位地址,左移1位为8位地址,最低位将用于读写标志

#define GUA_MAX17048_ADDR      (0x36<<1)

/*********************变量************************/

enum MAX_ALERT_TYPE{

    MAX_ALERT_RESET                   = 0x01U,

    MAX_ALERT_OVERVOLTED           = 0x02U,

    MAX_ALERT_UNDERVOLTED      = 0x04U,

    MAX_ALERT_VOLTAGE_RESET    = 0x80U,

    MAX_ALERT_SOC_LOW              = 0x10U,

    MAX_ALERT_SOC_CHANGE           = 0x20U,

};

extern uint16_t gnGUA_Max17048_Vcell;             //电压

extern uint8_t gnGUA_Max17048_Soc;                //电量

/*********************外部函数************************/

void GUA_Max17048_Init(void);

void GUA_Max17048_UpdataVcellSoc(void);

#endif

3)工程中添加驱动文件

4)在MDK设置中添加驱动源文件路径

2、添加库的驱动

1)添加库的驱动文件(为了方便一次性都添加进来,已有则不用添加)

2)添加库的驱动头文件(mt006_conf.h 中)(为了方便一次性都添加进来,已有则不用添加)

3、在应用层中调用

1)添加驱动头文件(main.c中)

#include "GUA_Max17048.h"

2)添加驱动初始化代码(main.c的main函数中)

    //max17048初始化 电量计

    GUA_Max17048_Init();

3)添加测试代码(main.c的main函数中)

                       //获取电压和电量

                       GUA_Max17048_UpdataVcellSoc();

八、注意事项

暂无

九、实验结果

暂无

相关文章:

【MT32F006】MT32F006之max17048电量计(IIC通信)

本文最后修改时间&#xff1a;2025年01月09日 一、本节简介 本文介绍如何使用MT32F006通过IIC与电量计max17048通信。 二、实验平台 库版本&#xff1a;V1.0.0 编译软件&#xff1a;MDK5.37 硬件平台&#xff1a;MT32F006开发板&#xff08;主芯片MT32F006&#xff09; 仿…...

使用python生成gif图

使用PyCharm软件&#xff0c;然后pip install imageio 之后代码如下 import imageio.v2 as imageio# 合成 gif 方法 def compose_gif():img_path ["D:\\picture\\R-CA.jpg", "D:\\picture\\R-C.jpg","D:\\picture\\R-C.jpg", "D:\\pict…...

pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)

pytorch小记&#xff08;一&#xff09;&#xff1a;pytorch矩阵乘法&#xff1a;torch.matmul&#xff08;x, y&#xff09;/ x y 代码代码 1&#xff1a;torch.matmul(x, y)输入张量&#xff1a;计算逻辑&#xff1a;输出结果&#xff1a; 代码 2&#xff1a;y y.view(4,1)…...

CF 368A.Sereja and Coat Rack(Java实现)

问题分析 简而言之&#xff0c;小明要邀请m个绅士到家&#xff0c;家里有n个挂衣钩&#xff0c;一个挂衣钩要支付i元&#xff0c;如果挂衣钩不够了就要给每个绅士赔d元 思路分析 所以思路就很清楚了&#xff0c;获取n&#xff0c;d&#xff0c;m的值&#xff0c;并用数组存放每…...

HBuilderX打包ios保姆式教程

1、登录苹果开发者后台并登录已认证开发者账号ID Sign In - Apple 2、创建标识符&#xff08;App ID&#xff09;、证书&#xff0c;描述文件 3、首先创建标识符&#xff0c;用于新建App应用 3-1、App的话直接选择第一个App IDs&#xff0c;点击右上角继续 3-2、选择App&#x…...

【SOC 芯片设计 DFT 学习专栏 -- DFT 接管 clock 和 reset】

文章目录 OverviewDFT 接管 Clock 和 Reset 的方法Clock 接管方法Reset 接管方法 什么场景下需要 DFT 来接管 Clock 和 Reset&#xff1f;制造测试&#xff08;Manufacturing Test&#xff09;静态路径扫描测试&#xff08;Scan Testing&#xff09;调试与故障定位&#xff08;…...

浅谈云计算07 | 云安全机制

浅谈云计算安全机制&#xff1a;全方位守护云端世界 一、引言二、加密技术&#xff1a;数据的隐形护盾三、散列机制&#xff1a;数据完整性的忠诚卫士四、数字签名&#xff1a;数据来源与真伪的鉴定专家五、公钥基础设施&#xff08;PKI&#xff09;&#xff1a;信任的基石六、…...

PyTorch 深度学习框架快速入门 (小土堆)

PyTorch 深度学习框架快速入门 深度学习框架常用模块数据集存取图片数据处理库 —— PILOS 模块实例 Tensorboard 记录机器学习的过程Transform 进行图像变换数据集的下载DataLoaderModule 自定义网络前向传播卷积层卷积简单应用 最大池化非线性层线性层 简单的整合基于现有网络…...

React Native Hooks开发指南

一、什么是Hooks Hooks 是 React 16.8 的新增特性。在不编写 class 的情况下使用 state 以及其他的 React 特性。Hooks 是一种在函数式组件中使用有状态函数的方法。 二、类组件 componentDidMount、componentDidUpdate 和 componentWillUnmount 这三个函数的组合。 三、常用…...

Java内存与缓存

Java内存管理和缓存机制是构建高性能应用程序的关键要素。它们之间既有联系又有区别&#xff0c;理解这两者对于优化Java应用至关重要。 Java 内存模型 Java内存模型&#xff08;JMM&#xff09;定义了线程如何以及何时可以看到其他线程修改过的共享变量的值&#xff0c;并且规…...

两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库

目录 分析问题的原因解决 分析问题的原因 在git push的时候莫名遇到这种情况 若你在git上修改了如README.md的文件。由于本地是没有README.md文件的&#xff0c;所以导致 远端仓库git和本地不同步。 将远端、本地进行合并就可以很好的解决这个问题 注意&#xff1a;直接git pu…...

React中ElementFiber对象、WorkInProgress双缓存、ReconcileRenderCommit、第一次挂载过程详解

基础概念 Element对象与Fiber对象 Element对象与Fiber对象 Element 对象 定义 React 的 Element 对象是一个描述用户界面&#xff08;UI&#xff09;的普通 JavaScript 对象&#xff0c;通常由 React.createElement 或 JSX 语法生成。 作用 它是 React 应用中的一种描述 …...

【论文阅读】Workload Dependent Performance Evaluation of the Linux 2.6 I/O Schedulers

文章目录 某些背景知识的科普&#xff08;依赖GPT&#xff09;GPT简短总结摘要-Abstract引言-Introduction1 I/O Scheduling and the BIO LayerThe 2.6 Deadline I/O Scheduler2.1 The 2.6 Anticipatory I/O scheduler2.2 The 2.6 CFQ Scheduler2.3 The 2.6 noop I/O scheduler…...

macOS 版本对应 Xcode 版本,以及 Xcode 历史版本下载

注&#xff1a;当前页面的所有Xcode下载链接均为苹果官方下载链接 &#xff0c;点击将直接转至苹果官网下载。❤️❤️❤️ Xcode官网&#xff1a;Xcode Releases | xcodereleases.com Xcode版本Xcode发布时间对应macOS版本macOS SDKsiOS SDKswatchOS SDKstvOS SDKs下载Xcode发…...

量子计算:从薛定谔的猫到你的生活

文章背景 说到量子计算&#xff0c;不少人觉得它神秘又遥不可及。其实&#xff0c;它只是量子物理学的一个“应用小分支”。它的核心在于量子比特的“叠加”和“纠缠”&#xff0c;这些听上去像科幻小说的概念&#xff0c;却为计算世界开辟了一片全新的天地。如果经典计算是“…...

R4-LSTM学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 LSTM-火灾温度预测 导入数据数据可视化设置X、y构建模型调用模型个人总结LSTM 的基本结构细胞状态&#xff08;Cell State&#xff09;LSTM 的优点 导入数据 i…...

Facebook 隐私变革之路:回顾与展望

在数字时代&#xff0c;个人隐私的保护一直是社交平台面临的重大挑战之一。作为全球最大的社交网络平台&#xff0c;Facebook&#xff08;现为Meta&#xff09;在处理用户隐私方面的变革&#xff0c;历经了多次调整与完善。本文将回顾Facebook在隐私保护方面的历程&#xff0c;…...

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS&#xff08;Domain Name System&#xff09;是互联网的基础技术之一&#xff0c;它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址&#xff0c;使得用户可以通过简单易记的域名来访…...

LabVIEW驱动电机实现样品自动搜索

利用LabVIEW控制电机驱动相机在XY平面上进行扫描&#xff0c;以检测样品位置。样品最初可能位于相机视野范围之外&#xff0c;需要实现自动搜索样品位置并完成精确定位扫描的功能。该系统需具有以下特点&#xff1a; 高效搜索&#xff1a;能够快速确定样品位置&#xff0c;缩短…...

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…...

计算机网络 笔记 网络层1

网络层功能概述 主要的任务是把分组从源端传输到目的端&#xff0c;为分组交换网上的不同主句提供通信服务&#xff0c;网络层的传输单位是数据报。 主要的功能&#xff1b; 1&#xff0c;路由选择&#xff1a;路由选择指网络层根据特定算法&#xff0c;为数据包从源节点到目…...

推理规则库的构建与应用

目录 前言1. 推理规则库概述1.1 推理规则的基本构成1.2 推理规则库的作用与意义 2. 推理规则库的构建2.1 知识获取与表示2.2 推理规则的提取2.3 规则的优化与整合 3. 推理规则库的推理机制3.1 前向推理3.2 后向推理3.3 混合推理 4. 推理规则库的应用4.1 医学领域4.2 金融领域4.…...

深度学习|表示学习|一个神经元可以干什么|02

如是我闻&#xff1a; 如果我们只有一个神经元&#xff08;即一个单一的线性或非线性函数&#xff09;&#xff0c;仍然可以完成一些简单的任务。以下是一个神经元可以实现的功能和应用&#xff1a; 1. 实现简单的线性分类 输入&#xff1a;一组特征向量 x x x 输出&#xff…...

2 XDMA IP中断

三种中断 1. Legacy 定义&#xff1a;Legacy 中断是传统的中断处理方式&#xff0c;使用物理中断线&#xff08;例如 IRQ&#xff09;来传递中断信号。缺点&#xff1a; 中断线数量有限&#xff0c;通常为 16 条&#xff0c;限制了可连接设备的数量。中断处理可能会导致中断风…...

什么是负载均衡?NGINX是如何实现负载均衡的?

大家好&#xff0c;我是锋哥。今天分享关于【什么是负载均衡&#xff1f;NGINX是如何实现负载均衡的&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是负载均衡&#xff1f;NGINX是如何实现负载均衡的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源…...

AWS简介

AWS 一&#xff0c;AWS是什么&#xff1f; AWS的全称是 Amazon Web Services 的缩写&#xff0c;是亚马逊公司提供的一套广泛且应用广泛的云端服务。 AWS提供了超过200项全功能的服务&#xff0c;来自数据中心数据中心遍布全球多个地理位置&#xff0c;这些服务包括计算能力&…...

旅游网站设计与实现

文末附有完整项目代码 在当今数字化时代&#xff0c;旅游网站成为人们获取旅游信息的重要途径。本文将详细介绍旅游网站的设计与实现&#xff0c;让你轻松了解其中的技术奥秘&#xff01; 一、项目背景 随着社会经济的发展&#xff0c;人们对精神消费愈发重视&#xff0c;旅游…...

vscode 扩展Cline、Continue的差别?

Cline和Continue都是VSCode的AI编程插件&#xff0c;它们在功能、用户体验、性能、适用场景以及配置和使用步骤等方面存在一些差别&#xff1a; 一、功能差异 编辑功能 Cline&#xff1a;能够分析项目的文件结构和源代码抽象语法树&#xff08;AST&#xff09;&#xff0c;通…...

用 HTML5 Canvas 和 JavaScript 实现雪花飘落特效

这篇文章将带您深入解析使用 HTML5 Canvas 和 JavaScript 实现动态雪花特效的代码原理。 1,效果展示 该效果模拟了雪花从天而降的动态场景,具有以下特点: 雪花数量、大小、透明度和下落速度随机。雪花会在屏幕底部重置到顶部,形成循环效果。随窗口大小动态调整,始终覆盖…...

电梯系统的UML文档01

Lu Luo 著&#xff0c;王君 译 1 简介 这是一份Carnegie Mellon 大学博士课程&#xff08;分布式嵌入系统&#xff09;项目报告。整个课程完成了一个分布式实时系统的设计、搭建和模拟。设计时用到了OOA 和OOD&#xff0c;特别是UML。 系统的大多数类省略了很多细节。现在看…...

浅谈云计算04 | 云基础设施机制

探秘云基础设施机制&#xff1a;云计算的基石 一、云基础设施 —— 云计算的根基![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1fb7ff493d3c4a1a87f539742a4f57a5.png)二、核心机制之网络&#xff1a;连接云的桥梁&#xff08;一&#xff09;虚拟网络边界&#xff…...

数据库知识

存储引擎层面 数据存储格式 不同的存储引擎有不同的数据存储格式。以 InnoDB 和 MyISAM 为例&#xff0c;InnoDB 是面向行的存储引擎&#xff0c;它将数据行存储在聚集索引&#xff08;如果没有显式定义主键&#xff0c;会自动生成一个隐藏的主键&#xff09;中。数据行和索引…...

2025宝塔API一键建站系统PHP源码

源码介绍 2025宝塔API一键建站系统PHP源码&#xff0c;对接自己的支付&#xff0c;虚拟主机也能搭建&#xff0c;小白式建站系统&#xff0c;基于宝塔面板搭建的建站系统&#xff0c;功能丰富&#xff0c;多款模板&#xff0c;每日更新 上传源码到服务器&#xff0c;浏览器访问…...

第三十八章 Spring之假如让你来写MVC——适配器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

客户端渲染和服务端渲染

二者本质的区别&#xff1a;是在哪完成了 HTML 的拼接&#xff0c;服务端渲染是在服务端拼接&#xff0c;客户端渲染是在客户端拼接。 服务端渲染的优缺点 优点 SEO 友好&#xff0c;服务端渲染更有利于爬虫爬取信息。 更快的首屏渲染&#xff0c;因为 HTML 已经在服务端生…...

《盘古大模型——鸿蒙NEXT的智慧引擎》

在当今科技飞速发展的时代&#xff0c;华为HarmonyOS NEXT的发布无疑是操作系统领域的一颗重磅炸弹&#xff0c;其将人工智能与操作系统深度融合&#xff0c;开启了智能新时代。而盘古大模型在其中发挥着至关重要的核心作用。 赋予小艺智能助手超强能力 在鸿蒙NEXT中&#xf…...

软件架构考试基础知识 004:死锁问题

死锁的定义 死锁&#xff08;Deadlock&#xff09;是指在多进程系统中&#xff0c;一组进程相互等待对方持有的资源&#xff0c;导致所有相关进程都无法继续执行的状态。这种状态是僵持的&#xff0c;无法自动解除&#xff0c;必须通过外部干预&#xff08;如重启系统&#xf…...

AI学习路线图-邱锡鹏-神经网络与深度学习

1 需求 神经网络与深度学习 2 接口 3 示例 4 参考资料...

Pytorch通信算子组合测试

Pytorch通信算子组合测试 一.背景二.相关链接三.遇到的问题四.操作步骤1.登录服务器2.查看拓扑3.准备测试用例A.准备目录B.用例代码 4.创建docker容器5.查看当前pytorch版本6.运行测试程序 一.背景 测试pytorch通信算子不同配置下的功能及性能测试不同的group组合测试不同的te…...

Android Dex VMP 动态加载加密指令流

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 上一篇【详解如何自定义 Android Dex VMP 保护壳】实现了 VMP 保护壳。 为了进一步加强对 dex 指令的保护&#xff0c;实现指令流加密和动态加载&#xff0c;…...

深度学习blog-剪枝和知识蒸馏

深度学习网络模型从卷积层到全连接层存在着大量冗余的参数&#xff0c;大量神经元激活值趋近于0&#xff0c;将这些神经元去除后可以表现出同样的模型表达能力&#xff0c;这种情况被称为过参数化。因此需要一些技术手段减少模型的复杂性&#xff0c;去除一些不重要的参数和连接…...

13:00面试,13:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到9月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…...

机器学习笔记合集

大家好&#xff0c;这里是好评笔记&#xff0c;公主 号&#xff1a;Goodnote。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点&#xff0c;内容通俗易懂&#xff0c;入门、实习和校招轻松搞定。 笔记介绍 本笔记的任务是解读机器学习实践/面试过程中可能会用到…...

七 rk3568 android 11 ec20 4G驱动移植

一 内核驱动集成 参考:Quectel_LTE&5G_Linux_USB_Driver_V1.0.zip EC20 内核驱动有两个版本 ,一个是 qmi_wwan, 一个是 GOBNet , 这里用的是 qmi_wwan版本 1.1 添加 USBNET 驱动文件 将驱动包里的 qmi_wwan_q.c 拷到 kernel/driver/net/usb/ 下 修改 kernel/dr…...

【Elasticsearch7.11】postman批量导入少量数据

JSON 文件内的数据格式&#xff0c;json文件数据条数不要过多&#xff0c;会请求参数过大&#xff0c;最好控制再10000以内。 {"index":{"_id":"baec07466732902d22a24ba01ff09751"}} {"uuid":"baec07466732902d22a24ba01ff0975…...

NLP三大特征抽取器:CNN、RNN与Transformer全面解析

引言 自然语言处理&#xff08;NLP&#xff09;领域的快速发展离不开深度学习技术的推动。随着应用需求的不断增加&#xff0c;如何高效地从文本中抽取特征成为NLP研究中的核心问题。深度学习中三大主要特征抽取器——卷积神经网络&#xff08;Convolutional Neural Network, …...

45_Lua模块与包

Lua中的模块系统是该语言的一个重要特性,它允许开发者将代码分割成更小、更易于管理的部分。通过使用模块,你可以创建可重用的代码片段,并且可以降低代码间的耦合度。下面我将详细介绍Lua模块的基本概念、语法以及一些实际案例。 1.Lua模块 1.1 模块的基本概念 从Lua 5.1…...

软定时器的原理与创建

目录 问题概述 设计原理 设计实现 一个任务来管理所有在指定的时间、以特定的周期触发某种操作的定时需求。 问题概述 在实际应用中&#xff0c;常常需要周期性或者在指定时间做一件事情。 周期性&#xff1a;在指定的延时开始做某件事情&#xff0c;然后周期性重复执行 一次性…...

【自动化测试】—— Appium安装配置保姆教程(图文详解)

目录 一. 环境准备 二. JDK安装 1. 下载JDK 2. 安装JDK 3. 配置环境 4. 验证安装 三. Android SDK安装 1. 下载Android SDK 2. 安装Android SDK 3. 安装工具 4. 配置环境 5. 验证安装 四. NodeJS安装 1. 下载NodeJS 2. 安装NodeJS 3. 验证安装 4. 安装淘宝镜像…...

穿越火线怀旧服预约网页vue3版本

源码下载地址: https://github.com/superBiuBiuMan/crossfire-old-vue3版权来自穿越火线,项目仅供参考学习!!! 效果 源码下载地址: https://github.com/superBiuBiuMan/crossfire-old-vue3预览地址: https://crossfire.123916.xyz/官网效果: https://www.cfhuodong.com/2025-…...