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

模数转换【1】AD7699

1.开发背景

       一款可以模数转换芯片,兼容通用 SPI 接口,支持最多支持 8 个通道和 500KSPS 的采样率。支持单个通道采集和扫描采集模式。

        同系列的芯片还有 AD7682 和 AD7689 等。

2.开发需求

        配置内部参考电压4.096V,实现单个通道采集和扫描采集模式。

3.开发环境

        Window10 + MDK + STM32F407VET6

4.详细设计

4.1 关键寄存器

        配置信息可以随时更改,每次 SPI 传输 2 个字节,需要注意的是:配置寄存器需要左移2位, SPI 模式 CPHA = CPOL = 0。

4.2 控制流程

4.2.1 单个读取

        例如读取通道 0 = 单极性 + IN0 + 全带宽 + 内部基准电压源 + 禁用序列器

4.2.2 扫描读取

        扫描读取0-3 = 单极性 + IN3 + 全带宽 + 内部基准电压源 + 扫描IN0至IN[7:0]

4.3 软件实现

4.3.1 AD7699 头文件
#ifndef BSP_AD7699_H
#define BSP_AD7699_H#include <stdio.h>#define AD7699_LOG  printf/* 采集极性选择 Default eAd7699_Incc_Single */
typedef enum
{eAd7699_Incc_DoubleDiff = 0,     // 0 0 xeAd7699_Incc_Double = 0x02,      // 0 1 0eAd7699_Incc_Temperaure = 0x03,  // 0 1 1eAd7699_Incc_SingleDiff = 0x04,  // 1 0 xeAd7699_Incc_SingleCom = 0x06,   // 1 1 0eAd7699_Incc_Single = 0x07,      // 1 1 1   }EnumAd7699_Incc_t;/* 通道选择 选择从 Ch0 扫描到 CHx */
typedef enum
{eAd7699_Channnel_0 = 0,         // 通道eAd7699_Channnel_1,eAd7699_Channnel_2,eAd7699_Channnel_3,eAd7699_Channnel_4,eAd7699_Channnel_5,eAd7699_Channnel_6,eAd7699_Channnel_7,}EnumAd7699_Channel_t;/* 带宽选择 Default eAd7699_BandWidth_All */
typedef enum
{eAd7699_BandWidth_Quarter = 0,  // 1/4 带宽eAd7699_BandWidth_All,          // 全带宽      }EnumAd7699_BandWidth_t;/* 参考电压 Default eAd7699_Ref_Internal */
typedef enum
{eAd7699_Ref_Disable = 0x0,eAd7699_Ref_Internal = 0x01,            // 内部参考电压 4.096V + 温度传感器eAd7699_Ref_ExterAndTemp = 0x02,        // 外部电压 + 温度传感器eAd7699_Ref_ExterAndTempAndBuf = 0x03,  // 外部电压 + 温度传感器 + 缓存eAd7699_Ref_Exter = 0x06,               // 外部电压eAd7699_Ref_ExterAndBuf = 0x07,         // 外部电压 + 缓存}EnumAd7699_Ref_t;/* 通道序列器 */
typedef enum
{eAd7699_Seq_Disable = 0,                // 禁用   DefaulteAd7699_Seq_Update,                     // 序列扫描期间更新序列eAd7699_Seq_ChannelAndTemp,             // 扫描通道和温度eAd7699_Seq_Channel,                    // 扫描通道}EnumAd7699_Seq_t;/* __weak 弱定义 必须先配置好 否者无效!!!  */
void Ad7699_FuncDelayUs(int us);
void Ad7699_FuncChipSelect(void);
void Ad7699_FuncChipUnselect(void);
int  Ad7699_FuncSpiTxRx(char *pTxData, char *pRxData, int size);/* 可调用接口 温度传感器读取的不准 */
int bAd7699_Init(void);
int bAd7699_SingleSample(EnumAd7699_Channel_t eChannel, unsigned short *pData, int num);
int bAd7699_ScanSample(EnumAd7699_Channel_t eLastCh, unsigned short *pData, int num);
int bAd7699_ScanSampleWithTemp(EnumAd7699_Channel_t eLastCh, unsigned short *pData, int num);
unsigned short bAd7699_GetChannelValue(EnumAd7699_Channel_t eChannel);/* 扩展接口 */
void bAd7699_SetIncc(EnumAd7699_Incc_t eIncc);
void bAd7699_SetBaudWidth(EnumAd7699_BandWidth_t eBaudWidth);
void bAd7699_SetRefVoltage(EnumAd7699_Ref_t eRef);
float bAd7699_GetTempFromValue(unsigned short data);    // 温度测量不是很准 不建议使用/* 测试接口 */
int bAd7699_Test(void);#endif

        需要注意的是  需要给定 __weak 的接口,否者读不到数据。 

4.3.2 AD7699 源文件
#include "bspAd7699.h"#include <stdio.h>#define AD7699_FULL_VALUE       (65536)
#define AD7699_INTERNAL_REF_V   (4.096f)
#define AD7699_TEMP_25_MAP_MV   (283.0f)/* 控制结构体 */
typedef struct
{/* 关键配置 */EnumAd7699_Incc_t eIncc;EnumAd7699_BandWidth_t eBandWidth;EnumAd7699_Ref_t eRef;}Ctrl_t;/* 初始化 */
static Ctrl_t s_ctrl = {.eIncc = eAd7699_Incc_Single,.eBandWidth = eAd7699_BandWidth_All,.eRef = eAd7699_Ref_Internal,
};
static Ctrl_t *p = &s_ctrl;__weak void Ad7699_FuncDelayUs(int us)  {}
__weak void Ad7699_FuncChipSelect(void) {}
__weak void Ad7699_FuncChipUnselect(void) {}
__weak int  Ad7699_FuncSpiTxRx(char *pTxData, char *pRxData, int size)  {   return 0;  }/* 开始转换 */
static int Ad7699_StartConversion(void)
{Ad7699_FuncChipSelect();Ad7699_FuncDelayUs(120);Ad7699_FuncChipUnselect();Ad7699_FuncDelayUs(1);return 0;
}/* 读写数据 */
static unsigned short Ad7699_ReadWriteData(unsigned short data)
{char txData[2] = {0};char rxData[2] = {0};/* 填充数据 */txData[0] = (data >> 8) & 0xFF;txData[1] = (data >> 0) & 0xFF;/* 片选 读写数据 */Ad7699_FuncChipSelect();Ad7699_FuncSpiTxRx(txData, rxData, 2);Ad7699_FuncChipUnselect();/* 返回读写值 */return ((rxData[0] << 8) | rxData[1]);
}/* 写配置寄存器 返回回读数据 */
static unsigned short Ad7699_WriteConfig(unsigned short config)
{/* 地址左移 2 位 */config = config << 2;return Ad7699_ReadWriteData(config);
}/* 初始化 */
int bAd7699_Init(void)
{for (int i = 0; i < 1; i++){Ad7699_StartConversion();
//        bAd7699_GetChannelValue(eAd7699_Channnel_0);}return 0;
}/* 采集通道数据 */
int bAd7699_SingleSample(EnumAd7699_Channel_t eChannel, unsigned short *pData, int num)
{if (pData == NULL){return -1;}/* 因为获取的数据延迟 2 个节奏,第三次才是有效值, 前两次无效 */for (int i = 0; i < num + 2; i++){unsigned short config = 0x3001;config |= (p->eIncc << 10);config |= (eChannel << 7);config |= (p->eBandWidth << 6);config |= (p->eRef << 3);config |= (eAd7699_Seq_Disable << 1);/* 前 2 次数据丢弃 */if (i < 2){Ad7699_WriteConfig(config);}else{pData[i - 2] = Ad7699_WriteConfig(config);}}return  0;
}/* 扫描采样 采集的顺序 从 CH0 到 eLastCh 顺序排列 num 是采集的数据个数 */
int bAd7699_ScanSample(EnumAd7699_Channel_t eLastCh, unsigned short *pData, int num)
{if (pData == NULL){return -1;}unsigned short config = 0x3001;config |= (p->eIncc << 10);config |= (eLastCh << 7);config |= (p->eBandWidth << 6);config |= (p->eRef << 3);config |= (eAd7699_Seq_Channel << 1);Ad7699_WriteConfig(config);/* 数据交互 */unsigned short txData = 0;for (int i = 0; i < num; i++){pData[i] = Ad7699_ReadWriteData(txData);}return 0;
}/* 扫描采样 + 温度 */
int bAd7699_ScanSampleWithTemp(EnumAd7699_Channel_t eLastCh, unsigned short *pData, int num)
{if (pData == NULL){return -1;}unsigned short config = 0x3001;config |= (p->eIncc << 10);config |= (eLastCh << 7);config |= (p->eBandWidth << 6);config |= (p->eRef << 3);config |= (eAd7699_Seq_ChannelAndTemp << 1);Ad7699_WriteConfig(config);/* 数据交互 */unsigned short txData = 0;for (int i = 0; i < num; i++){pData[i] = Ad7699_ReadWriteData(txData);}return 0;
}/* 获取通道数据 */
unsigned short bAd7699_GetChannelValue(EnumAd7699_Channel_t eChannel)
{unsigned short readData;bAd7699_SingleSample(eChannel, &readData, 1);return readData;
}/* 设置采集极性 */
void bAd7699_SetIncc(EnumAd7699_Incc_t eIncc)
{p->eIncc = eIncc;
}/* 设置带宽 */
void bAd7699_SetBaudWidth(EnumAd7699_BandWidth_t eBaudWidth)
{p->eBandWidth = eBaudWidth;
}/* 设置参考电压 */
void bAd7699_SetRefVoltage(EnumAd7699_Ref_t eRef)
{p->eRef = eRef;
}/* 数值转换温度接口 */
float bAd7699_GetTempFromValue(unsigned short data)
{/* 内部参考电压 */if (p->eRef == eAd7699_Ref_Internal){float voltage = (float)data / AD7699_FULL_VALUE * AD7699_INTERNAL_REF_V;float temp = (voltage * 1000 - AD7699_TEMP_25_MAP_MV) / 1.0f + 25.0f;
//        AD7699_LOG("data = %d, voltage = %f, temp = %f\r\n", data, voltage, temp);return temp;}else{}return 0;
}/* 测试 */
int bAd7699_Test(void)
{AD7699_LOG("%s\r\n", __func__);/* 循环遍历 */for (int i = 0; i < 8; i++){unsigned short data = bAd7699_GetChannelValue((EnumAd7699_Channel_t)i);AD7699_LOG("%s [%d] data = %d\r\n", __func__, i, data);if (p->eRef == eAd7699_Ref_Internal){float voltage = (float)data / AD7699_FULL_VALUE * AD7699_INTERNAL_REF_V;AD7699_LOG("%s [%d] voltage = %.3f\r\n", __func__, i, voltage);}#define SAMPLE_DATA_NUM (100)unsigned short dataList[SAMPLE_DATA_NUM] = {0};bAd7699_SingleSample((EnumAd7699_Channel_t)i, dataList, SAMPLE_DATA_NUM);AD7699_LOG("%s DataList[%d] = ", __func__, i);for (int j = 0; j < SAMPLE_DATA_NUM; j++){AD7699_LOG("%d ", dataList[j]);}AD7699_LOG("\r\n");}/* 扫描采集 */#define SCAN_SAMPLE_DATA_NUM (100)unsigned short sampleDataList[SCAN_SAMPLE_DATA_NUM] = {0};bAd7699_ScanSample(eAd7699_Channnel_3, sampleDataList, SCAN_SAMPLE_DATA_NUM);AD7699_LOG("%s bAd7699_ScanSample = ", __func__);for (int j = 0; j < SCAN_SAMPLE_DATA_NUM; j++){AD7699_LOG("%d ", sampleDataList[j]);if ((j % 8) == 0){AD7699_LOG("\r\n");}}AD7699_LOG("\r\n");    bAd7699_ScanSampleWithTemp(eAd7699_Channnel_7, sampleDataList, SCAN_SAMPLE_DATA_NUM);AD7699_LOG("%s bAd7699_ScanSampleWithTemp = ", __func__);for (int j = 0; j < SCAN_SAMPLE_DATA_NUM; j++){AD7699_LOG("%d ", sampleDataList[j]);if ((j % 9) == 0){float temp = bAd7699_GetTempFromValue(sampleDataList[j]);AD7699_LOG("%.2f ", temp);AD7699_LOG("\r\n");}}AD7699_LOG("\r\n");    return 0;
}

4.4 测试结果

        调用 bAd7699_Test 验证各个接口功能。除了内部温度传感器不准,其他的还符合预期

相关文章:

模数转换【1】AD7699

1.开发背景 一款可以模数转换芯片&#xff0c;兼容通用 SPI 接口&#xff0c;支持最多支持 8 个通道和 500KSPS 的采样率。支持单个通道采集和扫描采集模式。 同系列的芯片还有 AD7682 和 AD7689 等。 2.开发需求 配置内部参考电压4.096V&#xff0c;实现单个通道采集和扫描采集…...

P5670 秘籍-反复异或 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​) 和常数 m m m&#xff0c;有 q q q 个操作分两种&#xff1a; add ⁡ ( l , r , x ) \operatorname{add}(l,r,x) add(l,r,x)&#xff1a;对每个 i ∈ [ l , r ] i\in[l,r] …...

PID控制程序编写

目录 一、C语言PID控制器示例代码 二、代码解释 三、重要注意事项 一、C语言PID控制器示例代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> // For sleep function typedef struct { double Kp; // 比例增益 double…...

推荐系统/业务,相关知识/概念2

一、漫画库更新大量新作品&#xff0c;如何融入推荐系统&#xff1f; 参考答案&#xff1a; 快速提取新作品特征&#xff1a;除基础属性外&#xff0c;利用自然语言处理技术提取漫画简介关键词等丰富特征向量&#xff0c;分析情节、角色设定等深层次特征结合物品画像体系分类…...

基于Python的施工图与竣工图对比小工具开发方案

基于Python的施工图与竣工图对比小工具开发方案 一、引言 在工程建设领域&#xff0c;施工图与竣工图的对比是项目验收的关键环节。传统人工对比方式效率低、易出错&#xff0c;本文基于Python开发一款自动化对比工具&#xff0c;支持快速检测图纸差异并生成可视化报告&#x…...

2025年世界职业院校技能大赛实施方案(意见稿)

为贯彻落实《教育强国建设规划纲要&#xff08;2024—2035年&#xff09;》&#xff0c;进一步提升世界职业院校技能大赛&#xff08;以下简称“大赛”&#xff09;内涵质量&#xff0c;发挥大赛引领作用&#xff0c;提升高技能人才培养质量&#xff0c;服务现代职业教育体系建…...

辛格迪客户案例 | 苏州富士莱医药GMP培训管理(TMS)项目

一、案例概述 富士莱医药股份有限公司位于美丽的江南水乡常熟&#xff0c;前身为常熟富士莱医药化工有限公司&#xff0c;从建厂初期面积仅有10余亩&#xff0c;逐步扩展到100余亩。近年来公司飞速发展&#xff0c;以黑马姿态发展成为中国专业生产硫辛酸系列产品、肌肽系列产品…...

安恒安全渗透面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

【基于WSAAsyncSelec模型的通信程序设计】

文章目录 一、实验背景与目的二、实验设计与实现思路1. 设计思想2. 核心代码实现 总结 一、实验背景与目的 这次实验主要是为了让大家了解基于 WSAAsyncSelect 模型通信程序的编写、编译和执行过程。通过实践操作&#xff0c;深入掌握这种模型在实现计算机之间通信时的应用。 …...

Spring Boot+Mybatis设置sql日志打印

Spring BootMybatis设置sql日志打印 在全局配置文件添加以下内容&#xff1a;logging.level.com.demo.mapperdebug&#xff0c;com.demo.mapper&#xff1a;src下的mapper路径&#xff0c;debug&#xff1a;设置日志打印级别为debug&#xff0c;亦可设置为&#xff1a;ERROR、…...

Java 性能优化:从硬件到软件的全方位思考

Java 性能优化&#xff1a;从硬件到软件的全方位思考 在数字化飞速发展的当下&#xff0c;Java 作为广泛使用的编程语言&#xff0c;在各个应用领域发挥着关键作用。而 Java 性能优化作为提升系统运行效率、降低成本的核心环节&#xff0c;需要我们从硬件到软件进行全方位深入…...

ros2 humble moveit调试笔记

Overview — ROS2 Grasp Library Tutorials 0.5.0 documentation Robot Interface — ROS2 Grasp Library Tutorials 0.5.0 documentation 手动添加ompl_planning.yaml文件 planning_plugins:- ompl_interface/OMPLPlanner # To optionally use Ruckig for jerk-limited s…...

静态点亮数码管的某几段(STC89C52单片机)

#include <reg52.h> sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; void main() { ENLED 0; //使能U3&#xff0c;选择数码管DS1 ADDR3 1; ADDR2 0; ADDR1 0; ADDR0 0; P0 0xF9; /…...

搭建哨兵架构

Redis大纲 3.1.sentinel环境准备&#xff1a; a.3个sentinel实例信息&#xff1a; 1.sentinel实例信息如下&#xff0c;sentinel只是起到监控作用&#xff0c;不存放数据&#xff01;&#xff01;2.为了节省资源&#xff0c;在同一台虚拟机开启3个实例&#xff0c;必须准备三…...

阿里云入门手册

阿里云入门手册 一、付费方式二、云计算基础概念&#xff08;一&#xff09;云计算定义&#xff08;二&#xff09;云计算优势&#xff08;三&#xff09;云计算部署模式&#xff08;四&#xff09;专有网络 VPC 三、阿里云ECS实例&#xff08;一&#xff09;实例类型&#xff…...

AI日报 - 2024年04月22日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; 模型进展 | Google发布Gemini 2.5 Flash&#xff0c;强调低延迟与成本效益&#xff1b;Kling AI 2.0展示多轴运动视频生成&#xff1b;研究揭示SLM在知识图谱上优于LLM&#xff0c;RLHF在推理提升上存局限。 ▎&#x1f4bc;…...

Windows BilibiliHistoryFetcher-v1.3.2-v1.2.1-开源B站历史记录管理工具[支持批量管理下载]

Windows BilibiliHistoryFetcher 链接&#xff1a;https://pan.xunlei.com/s/VOONAVJpANYPmzu1Zc3B0q1XA1?pwdnrjc# 使用说明&#xff1a; 以1.3.2与1.2.1版本为例 需要下载 BiliBili-History-Frontend 前端程序&#xff0c;在下载 BilibiliHistoryAnalyzer 解压运行&#…...

CH585单片机的LCD外设怎么驱动段式LCD

1、首先这里只讲应用&#xff0c;不讲具体原理。 要驱动段式LCD&#xff0c;这里就要知道占空比的调整&#xff0c;比如1/4为例就需要4个COM口。这4个COM口由单片机自行驱动&#xff0c;你不用管。就像硬件IIC和SPI&#xff0c;时序问题不用你去操心&#xff0c;你要做的就是向…...

包管理工具有哪些?主流软件分享

常见的包管理工具主要有&#xff1a;npm、Yarn、pnpm、Composer、Maven、pip、Conda 等&#xff0c;其中 npm 是目前全球使用最广泛的JavaScript包管理工具&#xff0c;以丰富的生态、便捷的使用体验以及强大的社区支持闻名。npm具备依赖管理、版本控制、脚本执行等强大功能&am…...

【网络安全】OWASP 十大漏洞

1. OWASP 十大漏洞 为了应对未来的风险&#xff0c;安全专业人员需要随时掌握最新信息。之前&#xff0c;您了解了CVE 列表&#xff0c;这是一个公开的已知漏洞和暴露列表。CVE 列表是全球安全社区相互共享信息的重要信息来源。 在本文中&#xff0c;您将了解安全专业人士参考…...

Fortran中FORALL的用法与性能分析

Fortran中FORALL的用法与性能分析 FORALL语句的基本用法 FORALL是Fortran 95引入的一种结构&#xff0c;用于表达并行数组操作。它的基本语法如下&#xff1a; FORALL (index start:end:stride, mask)array(index) expression END FORALL或者更复杂的多维度形式&#xff1…...

web组件和http协议

1.web组件 2.自定义元素 3.影子DOM 4.HTML模板 5.http协议 6.tcp ip协议...

论文笔记-arXiv2025-FilterLLM

论文笔记-arXiv2025-FilterLLM: Text-To-Distribution LLM for Billion-Scale Cold-Start Recommendation FilterLLM&#xff1a;面向十亿级冷启动推荐的文本到分布大语言模型摘要1.引言2.前言2.1符号说明2.2文本到判断2.2.1候选生成&#xff08;从数十亿到数百&#xff09;2.2…...

Anaconda Prompt 切换工作路径的方法

直接切换是不生效的&#xff1a; (base) C:\Users\96975>cd D:\weiban-tool-master\weiban-tool-master需要先回到根目录C盘&#xff0c;然后切换到目标文件夹盘符&#xff0c;进一步切换到目标文件夹 (base) C:\Users\96975>cd ..(base) C:\Users>cd ..(base) C:\&g…...

Synopsys:printvar命令和puts/echo命令的区别

相关阅读 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12812219.html?spm1001.2014.3001.5482 Synopsys的EDA工具中存在一类变量&#xff0c;它们能控制工具的行为&#xff0c;被称为应用变量(application variable)&#xff0c;与之对应的是用户自定义变量(use…...

自注意力机制、多头自注意力机制、填充掩码 Python实现

原理讲解 【Transformer系列&#xff08;2&#xff09;】注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解 自注意力机制 import torch import torch.nn as nn# 自注意力机制 class SelfAttention(nn.Module):def __init__(self, input…...

Cursor可视化大屏搭建__0420

主题:用Cursor怎么进行数据洞察,做AI预测化内容。 Python基础语法与AI python生态强大,代码简洁,相对其他语言Python更好上手,浙江高考将Python列为可选科目 科学计算:Sklearn,Numpy,Pandas 人工智能:Tensorflow,Pytorch 网络爬虫:Scrapy…...

postman乘法计算,变量赋值

postman脚本怎么计算乘法 在Postman中&#xff0c;你可以通过多种方式计算乘法&#xff0c;这取决于你的具体需求。例如&#xff0c;如果你想在发送请求前计算乘法结果&#xff0c;或者在测试标签中计算响应数据的乘法&#xff0c;下面是一些常见的方法。 1. 使用JavaScript代…...

计算机视觉——利用AI幻觉检测图像是否是生成式算生成的图像

概述 俄罗斯的新研究提出了一种非常规方法&#xff0c;用于检测不真实的AI生成图像——不是通过提高大型视觉-语言模型&#xff08;LVLMs&#xff09;的准确性&#xff0c;而是故意利用它们的幻觉倾向。 这种新方法使用LVLMs提取图像的多个“原子事实”&#xff0c;然后应用自…...

前端配置代理解决发送cookie问题

场景&#xff1a; 在开发任务管理系统时&#xff0c;我遇到了一个典型的身份认证问题&#xff1a;​​用户登录成功后&#xff0c;调获取当前用户信息接口却提示"用户未登录"​​。系统核心流程如下&#xff1a; ​​用户登录​​&#xff1a;调用 /login 接口&…...

word显示段落标记符(¶)而不是回车符

现象 公司的一位同事找到我说word显示异常&#xff0c;出现了段落标记符&#xff08;&#xff09;。 反馈的截图如下&#xff1a; 正常的截图如下&#xff1a; 原因 语言设置错误 解决 文件 选项 更改语言 关闭word并重启 恢复正常...

使用 Vue Router 和 Vite 构建的自动路由生成系统

这段代码是一个使用 Vue Router 和 Vite 构建的自动路由生成系统。它的主要作用是自动扫描 views 目录下的所有 Vue 组件文件,并为它们创建相应的路由配置,无需手动为每个页面定义路由。 主要功能和工作流程 项目说明 结构 . ├── App.vue ├── assets │ └── v…...

乐家桌面安卓版2025下载-乐家桌面软件纯净版安装分享码大全

是否在为智能电视或机顶盒上的应用资源不够丰富而烦恼&#xff1f;在使用安卓版乐家桌面或者纯净版乐家桌面的过程中还需要通过搜索框多页面查询&#xff0c;小编今天为大家来介绍一款好用的电视桌面——乐看家桌面&#xff0c;将为你打开一个全新的软件世界&#xff01; 乐看家…...

【sylar-webserver】重构日志系统

文章目录 主要工作流程图FiberConditionBufferBufferManagerLogEvent 序列化 & 反序列化LoggerRotatingFileLogAppender 主要工作 实现&#xff0c; LogEvent 序列化和反序列化 &#xff08;使用序列化是为了更标准&#xff0c;如果转成最终的日志格式再存储&#xff08;确…...

图形编辑器基于Paper.js教程27:对图像描摹的功能实现,以及参数调整

本篇文章来讲一下 图像描摹的功能的实现。 我们知道要雕刻图片可以通过分析图片的像素来生成相应的gcode进行雕刻&#xff0c;但如果你想要将图片转换为线稿进行雕刻&#xff0c;这个时候就要从图片中提取出 线稿。 例如下面的图片&#xff1a; 你想要获取到这个图片的线稿&…...

使用Mybaitis-plus提供的各种的免写SQL的Wrapper的使用方式

文章目录 内连接JoinWrappers.lambda和 new MPJLambdaWrapper 生成的MPJLambdaWrapper对象有啥区别&#xff1f;LambdaQueryWrapper 和 QueryWrapper的区别&#xff1f;LambdaQueryWrapper和MPJLambdaQueryWrapper的区别&#xff1f;在作单表更新时建议使用&#xff1a;LambdaU…...

SQL_连续登陆问题

文章目录 方案1&#xff1a;使用ROW_NUMBER函数1、针对对数据user_id分组&#xff0c;根据用户的活动日期排序2、用登录日期与rn求date_sub&#xff0c;得到的差值日期如果是相等的&#xff0c;则说明这两天肯定是连续的3、根据user_id和日期差sub_date分组&#xff0c;登录次数…...

【解决】Vue + Vite + TS 配置路径别名成功仍爆红

目录 前言 一.vite.config.ts 二.tsconfig.json 三. 别名配置成功&#xff0c;但语法提示爆红问题 四、可能遇到的问题 前言 ‌在项目中设置路径别名后仍然出现爆红问题&#xff0c;通常是由于配置不完整或配置错误导致的。Vite 中配置 alias 总共需要配置两个地方: vite…...

Discuz!与DeepSeek结合:打造智能论坛,提升用户体验与运营效率

引言 随着互联网技术的飞速发展&#xff0c;社区论坛作为用户交流、分享信息的重要平台&#xff0c;其用户体验和运营效率成为了影响平台竞争力的关键因素。Discuz!作为国内领先的社区论坛软件系统&#xff0c;以其强大的功能和广泛的用户基础&#xff0c;在社区论坛领域占据着…...

Federated Feature Augmentation and Alignment

TPAMI2025,说是解决特征偏移问题,但从实验看其他数据异构也一并改善了。文章和题目一样干了特征增强和特征对齐两件事。特征增强部分套了两次高斯拟合,搞得很复杂,没法一句话说清楚。特征对齐部分是截断成直方图,然后双向KL散度。 论文:目前好像只有ieee能搜到 代码:只…...

ThinkPHP5 的 SQL 注入漏洞

ThinkPHP5 的 SQL 注入漏洞&#xff08;常被安全社区称为 ThinkPHP5 SQL5 注入漏洞&#xff09;是 ThinkPHP5 框架中一系列因设计缺陷导致的安全问题&#xff0c;主要影响早期版本。 一、漏洞背景 ThinkPHP5 的 SQL 注入漏洞主要源于框架对用户输入数据的处理不当&#xff0c;尤…...

Linux学习笔记|入门指令

man 指令 用法&#xff1a;man [指令名称] &#xff0c;用于查看指定指令的帮助手册&#xff0c;获取指令的详细语法、选项及使用示例等信息 。示例&#xff1a;想了解 ls 指令的用法&#xff0c;执行 man ls &#xff0c;会进入 man 手册页面展示 ls 相关信息。按 q 键可退出。…...

前端实现数据导出成excel

前端(react/vue)实现数据导出成excel 1. 下载依赖 npm install js-export-excel -D 2. 新建exportExcel.js import ExportJsonExcel from js-export-excel; ​ /*** Event: 获取导出数据* description:* param config.tableParams<Object>: 表格接口请求参数* param …...

海事局发布《船舶智能监控系统技术指南(1.0)》,解读智驱力产品为何成为最佳选择!

为深入推进人工智能、边缘计算等新技术在水上交通安全领域应用&#xff0c;强化船舶安全风险实时感知、智能预警&#xff0c;推动水上交通安全治理模式向事前预防转型&#xff0c;中华人民共和国海事局于2025年3月11日正式制定了《船舶智能监控系统技术指南&#xff08;1.0&…...

uCOS3实时操作系统(系统初始化和任务启动)

文章目录 ucos初始化任务创建任务启动 ucos初始化 系统运行的过程如下&#xff1a;OSInit -> OSTaskCreate -> OSStartucos初始化主要在 OSInit 中进行&#xff0c;下面列举了该初始化过程中比较重要的几个步骤&#xff1a;OSInit()OSInitHook();OS_CPU_ExceptStkBase /…...

线上地图导航小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp三大前沿技术推出的一款线上地图导航小程序源码&#xff0c;ThinkPHP作为后端框架&#xff0c;以其轻量、高效和灵活的特点&#xff0c;确保了小程序的稳定性和可扩展性。FastAdmin则是基于ThinkPHP构建的管理后台&#xff0c;操作简便、功能全…...

Mininet--nodelib.py源码解析

整体构架概述 1. What is it&#xff1f; 本代码是 Mininet 网络仿真框架的扩展模块&#xff0c;包含 LinuxBridge 和 NAT 两类节点。LinuxBridge 提供基于 Linux 网桥的交换机功能&#xff0c;支持生成树协议&#xff08;STP&#xff09;&#xff0c;用于构建冗余网络拓扑并防…...

[C++]多重继承:构造函数调用顺序解析

在C中&#xff0c;当派生类通过 多重继承 &#xff08;Multiple Inheritance&#xff09;继承多个基类&#xff08;如 A、B、C&#xff09;时&#xff0c;其构造函数调用顺序遵循以下规则&#xff1a; 1. 基类构造顺序 基类的构造函数调用顺序严格按照派生类定义中的基类声明…...

Math.round(),Math.ceil(),Math.floor(),Math.sqrt(),Math.pow(),Math.abs()等!

希望看到这篇的你今天开心 目录 Math.round():Math.ceil():Math.floor() :Math.sqrt():Math.pow():Math.abs():了解更多&#xff1a; Math.round(): 四舍五入取值 静态方法Math.round()返回四舍五入为最接近的整数的数字值。 对于正数&#xff0c;Math.round() 会将小数部分小…...

Docker 集成KingBase

Docker安装 再linux系统中安装yum命令&#xff0c;通过yum命令可直接安装docker yum命令如下 yum install dockerDocker安装KingBase 安装完成Dockr后&#xff0c;去KingBase官网中下载镜像 下载完成后&#xff0c;通过docker命令将镜像文件导入 docker load -i kdb_x86_64…...