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

9.DMA

          

目录

DMA —为 CPU 减负 

DMA 的简介和使用场景

DMA 的例子讲解

STM32 的 DMA 框图和主要特性

​编辑 DMA 的通道的对应通道外设 – DMA 和哪些外设使用

​编辑​编辑ADC_DR 寄存器地址的计算

常见的数据滤波方法

ADC+DMA 的编程


DMA —为 CPU 减负 

DMA 的简介和使用场景

        外设--UART SPI ADC 

        存储器--RAM ROM(FLASH) 

        使用场景:外设和存储器之间或者存储器和存储器之间 

DMA 的例子讲解

        无 DMA:任何指令都需要 CPU 去处理 

        搬砖:需要自己亲手去搬运 

        有 DMA:安排一个人,告诉他,把砖搬走

STM32 的 DMA 框图和主要特性

 

 DMA 的通道的对应通道外设 – DMA 和哪些外设使用

ADC_DR 寄存器地址的计算

        光照硬件电路-->PA5-->ADC1_IN5-->DMA1_CH1 

       1. 找外设基地址 

        通过查看数据手册存储器图

        2.找寄存器的偏移地址 

        通过参考手册 11.12.14 确定 ADC1_DR 寄存器的偏移 

        3.计算寄存器的地址 

                ADC1_DR=0x40012400+0x4C=0x4001244C 

常见的数据滤波方法

        1. 均值滤波 

        2. 限幅滤波 -- 10%的变化幅度 

                目前检测的温度,都是 10℃,突然检测到 30℃,限制 1 个变化的幅度,比如说 10%,那么再 10℃ ±10%都认为是正常的,超过认为不正常。 

        3. 中值滤波、高斯滤波、算术平均滤波 

ADC+DMA 的编程

#include "ADC.h"
#include "stdio.h"
#include "DMA.h"#if(USE_ADC_DMA_BUFF==0)
uint16_t ADC_DMA_LIGHT_Value = 0;
uint16_t ADC_DMA_SMOKE_Value = 0;
#elif(USE_ADC_DMA_BUFF==1)
uint16_t ADC_DMA_LIGHT_Value = 0;
uint16_t ADC_DMA_SMOKE_Value = 0;
uint16_t  ADC_DMA_Value[2];
#endif#define SAMPLE_COUNT 10 // 滤波所用样本数量
uint16_t light_sample[SAMPLE_COUNT];//存储光照采样值
uint16_t smoke_sample[SAMPLE_COUNT];//存储烟雾采样值
uint8_t light;//光照循环变量
uint8_t smoke;//烟雾循环变量#define ADC1_DR	0x4001244Cvoid DMA_Config(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDef GPIO_InitStruct = {0};//给结构体赋值GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;//代配置引脚GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;//引脚速率GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;//代配置引脚GPIO_Init(GPIOC, &GPIO_InitStruct);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);  //使用ADC1时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);//分频,RCC_CFGR寄存器位15:14RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);ADC_InitTypeDef ADC_InitStruct;/*启动1次,获取1次转换结果,再次启动,再获取*/ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;// 是否开启连续模式  ADC_CR2的位1ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐方式 ADC_CR2的位11 16的寄存器存放12位转换结果 右对齐方便取数据ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;// 是否使用外部触发,ADC_CR2的位19:17 通过SWSTART位软件启动ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;// 独立模式   ADC1  ADC2独立工作 参考手册 11.9  ADC_CR1的位19:16ADC_InitStruct.ADC_NbrOfChannel = 2;// 待转换的通道的数量  ADC_SQR1位23:20 参考手册 11.3.3ADC_InitStruct.ADC_ScanConvMode = ENABLE;是否开启扫描  多通道必须扫描,单通道无所谓  参考手册 11.3.8  ADC_CR1的位8ADC_Init(ADC1, &ADC_InitStruct);DMA_InitTypeDef DMA_InitStruct = {0};
#if(USE_ADC_DMA_BUFF==0)DMA_InitStruct.DMA_BufferSize = 1; //目标地址可以存放几次搬运的数据	DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)&ADC_DMA_LIGHT_Value;//内存基地址		DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Disable;//内存基地址是否递增
#elif(USE_ADC_DMA_BUFF==1)DMA_InitStruct.DMA_BufferSize = sizeof(ADC_DMA_Value)/sizeof(ADC_DMA_Value[0]); //目标地址可以存放几次搬运的数据	DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)ADC_DMA_Value;//内存基地址		DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存基地址是否递增	
#endifDMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;//设置DMA数据传输方向为从外设(ADC)到内存。外设是源地址DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;//不使用内存到内存,使用外设-->寄存器DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;//设置DMA模式为循环模式,在数据传输完成后会重新从内存开始,适用于需要持续获取数据的场景。DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存数据宽度,半字,ADC转换结果是12位的DMA_InitStruct.DMA_PeripheralBaseAddr = ADC1_DR;//ADC1的数据寄存器的地址。DMA将从该地址读取数据。DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据宽度,半字,ADC转换结果是12位的DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设基地址不递增  始终是ADC_DR寄存器DMA_InitStruct.DMA_Priority = DMA_Priority_High;//设置DMA的优先级为高,表示DMA请求优先级较高。DMA_Init(DMA1_Channel1, &DMA_InitStruct);ADC_DMACmd(ADC1, ENABLE);//使能ADC的DMA功能  ADC_CR2的位8ADC_Cmd(ADC1, ENABLE);//使能ADCADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_55Cycles5);//配置转换的ADC通道ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_55Cycles5);//配置转换的ADC通道DMA_Cmd(DMA1_Channel1, ENABLE);//开机至少初始化1次ADC_ResetCalibration(ADC1);//将ADC_CR2的位3 RSTCAL位置1,初始化校准寄存器while(ADC_GetResetCalibrationStatus(ADC1));//等待校准寄存器初始化完成  ADC_CR2的位3是0 初始化完成  1未完成等待ADC_StartCalibration(ADC1);//将ADC_CR2的位2 CAL位置1,开始校准while(ADC_GetCalibrationStatus(ADC1));//等待A/D校准完成  ADC_CR2的位2是0 校准完成完成  1正在校准,未完成等待ADC_SoftwareStartConvCmd(ADC1,ENABLE);//启动ADC转换  ADC_CR2的位22}void ADC_DMA_Handle(void)
{
#if(USE_ADC_DMA_BUFF==0)while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET)//未转换完成死等ADC_DMA_LIGHT_Value = ADC_GetConversionValue(ADC1);printf("光照ADC采样值=%d\r\n",ADC_DMA_LIGHT_Value);printf("光照ADC采样口=%.2f\r\n",(3.3/4096)*ADC_DMA_LIGHT_Value);while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET)ADC_SMK_Value = ADC_GetConversionValue(ADC1);printf("烟雾采样值=%d\r\n",ADC_SMK_Value);printf("烟雾浓度采样口=%.2f\r\n",(3.3/4096)*ADC_SMK_Value);printf("\r\n");
#elif(USE_ADC_DMA_BUFF==1)ADC_DMA_LIGHT_Value = ADC_DMA_Value[0];//光照采样值light_sample[light++] = ADC_DMA_LIGHT_Value;if(light >= SAMPLE_COUNT){//保存关照,10个一组light = 0;}uint32_t light_sum = 0;//光照10个数据总和for (int i = 0; i < SAMPLE_COUNT; i++){light_sum += light_sample[i];}//算平均值uint16_t light_avg = light_sum / SAMPLE_COUNT;printf("光照采样平均值=%d\r\n",light_avg);printf("光照ADC采样口平均值=%.2f\r\n",(3.3/4096)*light_avg);printf("\r\n");ADC_DMA_SMOKE_Value = ADC_DMA_Value[1];//烟雾采样值smoke_sample[smoke++] = ADC_DMA_SMOKE_Value;if(smoke >= SAMPLE_COUNT){//保存烟雾,10个一组smoke = 0;}uint32_t smoke_sum = 0;//烟雾10个数据总和for (int i = 0; i < SAMPLE_COUNT; i++){smoke_sum += smoke_sample[i];}float smoke_avg = (float)smoke_sum / SAMPLE_COUNT;printf("烟雾采样平均值=%.1f\r\n",smoke_avg);printf("烟雾浓度采样口平均值=%.2f\r\n",(3.3/4096)*smoke_avg);printf("\r\n");#endif}
//void ADC_DMA_Handle(void)
//{
//	uint64_t temp1=0;
//	uint64_t temp2=0;	
//	for(uint8_t i=0;i<ADC_DMA_Count;i+=2)
//	{
//		temp1+=ADC_DMA_Value[i];
//		temp2+=ADC_DMA_Value[i+1];	
//	}
//	ADC_DMA_LIGHT_Value=temp1/5;
//	ADC_DMA_SMOKE_Value=temp2/5;	
//	printf("光照ADC采样值=%d\r\n",ADC_DMA_LIGHT_Value);
//	printf("光照ADC采样口电压=%.2f\r\n",(3.3/4096)*ADC_DMA_LIGHT_Value);	
//	printf("烟雾ADC采样值=%d\r\n",ADC_DMA_SMOKE_Value);
//	printf("烟雾ADC采样口电压=%.2f\r\n",(3.3/4096)*ADC_DMA_SMOKE_Value);		
//}

             

相关文章:

9.DMA

目录 DMA —为 CPU 减负 DMA 的简介和使用场景 DMA 的例子讲解 STM32 的 DMA 框图和主要特性 ​编辑 DMA 的通道的对应通道外设 – DMA 和哪些外设使用 ​编辑​编辑ADC_DR 寄存器地址的计算 常见的数据滤波方法 ADCDMA 的编程 DMA —为 CPU 减负 DMA 的简介和使用场…...

Python自学笔记3 常见运算符

常用运算符 加减法 python的自动数据类型转换 整形转为浮点型 实数转为复数 数字类型不能和浮点数类型相加减 乘除法 数据转换基本同加减法&#xff0c; 但字符串可以和整数相加减&#xff0c;作用是字符串的自我复制 反斜杠 成员运算符 判断一个元素是不是一个序列的成员…...

【C/C++】C++中constexpr与const的深度对比

文章目录 C中constexpr与const的深度对比1. 编译期确定性2. 更严格的优化保证3. 适用范围更广4. 类型安全与错误检查5. 现代 C 的演进方向何时使用 const&#xff1f;constexpr应用场景1. 配置常量与全局参数2. 数据验证与业务规则检查3. 数学计算与业务逻辑优化4. 模板元编程与…...

劳特巴赫trace32负载率测试

按照下图步骤点击即可...

牛客OJ在线编程常见输入输出练习--Java版

目录 一、链接 二、题目 一、链接 牛客输入输出链接&#xff1a;牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推&#xff0c;求职就业一站解决_牛客网 二、题目 1.只有输出 public class Main {public static void main(String[] args) {System.out.println("H…...

STM32 | FreeRTOS 递归信号量

递归信号量 一、概述 互斥量的使用比较单一&#xff0c;因为它是信号量的一种&#xff0c;并且它是以锁的形式存在。在初始化的时候&#xff0c;互斥量处于开锁的状态&#xff0c;而被任务持有的时候则立刻转为闭锁的状态。 递归类型的互斥量可以被拥有者重复获取。拥有互斥量…...

STM32 | 软件定时器

01 一、概述 软件定时器是用程序模拟出来的定时器&#xff0c;可以由一个硬件定时器模拟出成千上万个软件定时器&#xff0c;这样程序在需要使用较多定时器的时候就不会受限于硬件资源的不足&#xff0c;这是软件定时器的一个优点&#xff0c;即数量不受限制。但由于软件定…...

2025年EB SCI2区TOP,多策略改进黑翅鸢算法MBKA+空调系统RC参数辨识与负载聚合分析,深度解析+性能实测

目录 1.摘要2.黑翅鸢优化算法BKA原理3.改进策略4.结果展示5.参考文献6.代码获取7.读者交流 1.摘要 随着空调负载在电力系统中所占比例的不断上升&#xff0c;其作为需求响应资源的潜力日益凸显。然而&#xff0c;由于建筑环境和用户行为的变化&#xff0c;空调负载具有异质性和…...

互联网大厂Java面试:从Spring到微服务的全面探讨

文章简述 本文模拟了一个互联网大厂Java求职者的面试场景&#xff0c;涵盖了Java核心语言与平台、构建工具、Web框架、微服务与云原生等多个技术栈。通过面试问答的形式&#xff0c;展示了在真实业务场景下如何应用这些技术点&#xff0c;帮助初学者理解和学习。 场景介绍 在…...

Python爬虫之路(14)--playwright浏览器自动化

playwright 前言 ​ 你有没有在用 Selenium 抓网页的时候&#xff0c;体验过那种「明明点了按钮&#xff0c;它却装死不动」的痛苦&#xff1f;或者那种「刚加载完页面&#xff0c;它又刷新了」的抓狂&#xff1f;别担心&#xff0c;你不是一个人——那是 Selenium 在和现代前…...

Elasticsearch Fetch阶段面试题

Elasticsearch Fetch阶段面试题 🚀 目录 基础原理性能优化错误排查场景设计底层机制总结基础原理 🔍 面试题1:基础原理 题目: 请描述Elasticsearch分布式搜索中Query阶段和Fetch阶段的工作流程,为什么需要将搜索过程拆分为这两个阶段? 👉 点击查看答案 查询流程…...

RAGFlow Arbitrary Account Takeover Vulnerability

文章目录 RAGFlowVulnerability Description[1]Vulnerability Steps[2]Vulnerability Steps[3]Vulnerability Steps RAGFlow RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine developed by Infiniflow, focused on deep document understanding and d…...

框架之下再看HTTP请求对接后端method

在当今的软件开发领域&#xff0c;各类框架涌现&#xff0c;极大地提升了开发效率。以 Java 开发为例&#xff0c;Spring 框架不断演进&#xff0c;Spring Boot 更是简化到只需引入 Maven 包&#xff0c;添加诸如SpringBootApplication、RestController等注解&#xff0c;就能轻…...

机器学习中的过拟合及示例

文章目录 机器学习中的过拟合及示例1. 过拟合的定义2. 过拟合的常见例子例1&#xff1a;图像分类中的过拟合例2&#xff1a;回归任务中的过拟合例3&#xff1a;自然语言处理&#xff08;NLP&#xff09;中的过拟合 3. Python代码示例&#xff1a;过拟合的直观演示示例1&#xf…...

机器学习-人与机器生数据的区分模型测试 -数据筛选

内容继续机器学习-人与机器生数据的区分模型测试 使用随机森林的弱学习树来筛选相对稳定的特征数据 # 随机森林筛选特征 X data.drop([city, target], axis1) # 去除修改前的城市名称列和目标变量列 y data[target] X_train, X_test, y_train, y_test train_test_split(X…...

第9讲、深入理解Scaled Dot-Product Attention

Scaled Dot-Product Attention是Transformer架构的核心组件&#xff0c;也是现代深度学习中最重要的注意力机制之一。本文将从原理、实现和应用三个方面深入剖析这一机制。 1. 基本原理 Scaled Dot-Product Attention的本质是一种加权求和机制&#xff0c;通过计算查询(Query…...

无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测

引言 人工智能技术在医疗领域的应用正经历着从辅助决策向深度赋能的转变。无监督学习作为人工智能的核心范式之一,因其无需大量标注数据、能够自动发现数据内在规律的特性,在医疗AI领域展现出独特优势。尤其在2025年,无监督学习技术在医疗AI应用中呈现出多模态整合、疾病亚…...

PostgreSQL内幕剖析——结构与架构

大家好&#xff0c;这里是失踪人口bang__bang_&#xff0c;从今天开始持续更新PostgreSQL内幕相关内容&#xff0c;让我们一起了解学习吧✊&#xff01; 目录 1️⃣ DB集群、数据库、表 &#x1f359; 数据库集群的逻辑结构 &#x1f359; 数据库集群的物理结构 &am…...

架构师论文《论模型驱动架构软件开发方法及其应用》

摘要 在当前的软件开发领域&#xff0c;模型驱动架构&#xff08;MDA&#xff09;作为一种重要的开发方法&#xff0c;强调通过抽象化模型指导系统设计与实现&#xff0c;能够有效提升开发效率并降低复杂性。本文结合笔者参与的某医疗信息管理系统的开发实践&#xff0c;探讨MD…...

当硅基存在成为人性延伸的注脚:论情感科技重构社会联结的可能性

在东京大学机器人实验室的档案室里&#xff0c;保存着一份泛黄的二战时期设计图——1943年日本陆军省秘密研发的“慰安妇替代品”草图。这个诞生于战争阴霾的金属躯体&#xff0c;与2025年上海进博会上展出的MetaBox AI伴侣形成时空对话&#xff1a;当人类将情感需求投射于硅基…...

最小二乘法拟合直线,用线性回归法、梯度下降法实现

参考笔记&#xff1a; 最小二乘法拟合直线&#xff0c;多个方法实现-CSDN博客 一文让你彻底搞懂最小二乘法&#xff08;超详细推导&#xff09;-CSDN博客 目录 1.问题引入 2.线性回归法 2.1 模型假设 2.2 定义误差函数 2.3 求偏导并解方程 2.4 案例实例 2.4.1 手工计算…...

机器学习 day04

文章目录 前言一、线性回归的基本概念二、损失函数三、最小二乘法 前言 通过今天的学习&#xff0c;我掌握了机器学习中的线性回归的相关基本概念&#xff0c;包括损失函数的概念&#xff0c;最小二乘法的理论与算法实现。 一、线性回归的基本概念 要理解什么是线性回归&…...

数据分析_Python

1 分析内容 1.1 数据的整体概述 提供数据集的基本信息,包括数据量、时间跨度、地理范围和主要字段. import pandas as pd# 创建示例数据 data {姓名: [张三, 李四, 王五, 赵六, 钱七, 孙八, 周九, 吴十],年龄: [25, 30, 35, 40, 45, 50, 55, 60],性别: [男, 男, 女, 女, 男,…...

精益数据分析(63/126):移情阶段的深度潜入——从用户生活到产品渗透的全链路解析

精益数据分析&#xff08;63/126&#xff09;&#xff1a;移情阶段的深度潜入——从用户生活到产品渗透的全链路解析 在创业的移情阶段&#xff0c;成功的关键不仅在于发现用户的表面需求&#xff0c;更在于深入潜入用户的日常生活&#xff0c;理解其行为背后的真实动机与场景…...

【MySQL】第五弹——表的CRUD进阶(三)聚合查询(上)

文章目录 &#x1f305;聚合函数&#x1f30a;1.COUNT();统计所有行&#x1f30a;2. SUM(列名); 求和&#x1f30a;3. AVG() 求平均&#x1f30a;4. MAX(),MIIN() &#x1f305;分组查询&#x1f30a;GROUP BY 子句&#x1f30a;HAVING &#x1f305;联合查询&#x1f30a;联合…...

英语学习5.16

recede 【动词】 &#x1f449; 关键词&#xff1a;后退、减弱、退去 ✅ 释义&#xff1a; 后退&#xff0c;远离 指物体逐渐远离、移开或变得不明显&#xff0c;常用于描述水面、声音、军队、头发线等的“退却”或“后移”。 如&#xff1a;The floodwaters receded.&#x…...

创建react工程并集成tailwindcss

1. 创建工程 npm create vite admin --template react 2.集成tailwndcss 打开官网跟着操作一下就行。 Installing Tailwind CSS with Vite - Tailwind CSS...

2025 年九江市第二十三届中职学校技能大赛 (网络安全)赛项竞赛样题

2025 年九江市第二十三届中职学校技能大赛 &#xff08;网络安全&#xff09;赛项竞赛样题 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&#xff09;A-1 任务一登录安全加固&#xff08;Windows,Linux&#xff09;A-2 任务二 Nginx 安全策略&…...

STM32IIC实战-OLED模板

STM32IIC实战-OLED模板 一&#xff0c;SSD1306 控制芯片1&#xff0c; 主要特性2&#xff0c;I2C 通信协议3&#xff0c; 显示原理4&#xff0c; 控制流程5&#xff0c; 开发思路 二&#xff0c;HAL I2C API 解析I2C 相关 API1&#xff0c;2&#xff0c;3&#xff0c;4&#xf…...

BMVC2023 | 多样化高层特征以提升对抗迁移性

Diversifying the High-level Features for better Adversarial Transferability 摘要-Abstract引言-Introduction相关工作-Related Work方法-Methodology实验-Experiments结论-Conclusion 论文链接 GitHub链接 本文 “Diversifying the High-level Features for better Adve…...

C++ deque双端队列、deque对象创建、deque赋值操作

在deque中&#xff0c;front()是头部元素&#xff0c;back()指的是尾部元素。begin()是指向头部的迭代器&#xff0c;end()是指向尾部的下一个元素的迭代器。 push_front 头部进行插入 pop_front 尾部进行删除 push_back 尾部进行插入 pop_back 尾部进行删除 deque如果同时…...

【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2

文章目录 一、前述二、不同的先验及代表性论文2.1 几何先验&#xff08;Geometric Prior&#xff09;2.2 生成式先验&#xff08;Generative Prior&#xff09;2.3 codebook先验&#xff08;Vector Quantized Codebook Prior&#xff09;2.4 扩散先验 &#xff08;Diffusion Pr…...

2025年渗透测试面试题总结-百度面经(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 百度面经 百度安全工程师面试深度复盘与优化指南 一、项目经验反思与优化策略 二、技术问题深度解析 …...

muduo库TcpConnection模块详解——C++

muduo库中的TcpConnection模块详解 TcpConnection是muduo库中处理TCP连接的核心模块&#xff0c;负责管理单个TCP连接的生命周期、数据读写、状态转换以及事件回调。每个TCP连接对应一个TcpConnection对象&#xff0c;其设计体现了高性能、线程安全和灵活回调的特点。 一、核心…...

aksharetools:大模型智能体框架agno可直接获取A股金融数据

原创内容第889篇&#xff0c;专注智能量化投资、个人成长与财富自由。 今天说说金融智能体开发。 智能体开发需要一个多agent框架。这样的框架&#xff0c;现在太多了&#xff0c;langchain, langgraph&#xff0c;autogen&#xff0c;crewai等等&#xff0c;还有各种低代码平…...

使用Maven部署WebLogic应用

使用Maven部署WebLogic应用 在Maven项目中部署应用到WebLogic服务器可以通过以下几种方式实现&#xff1a; 1. 使用WebLogic Maven插件 (官方推荐) Oracle提供了官方的WebLogic Maven插件&#xff0c;这是最直接的部署方式。 基本配置 <build><plugins><pl…...

[Java][Leetcode simple] 13. 罗马数字转整数

一、自己想的 只有提到的六种情况是-&#xff0c;其他都是 public int romanToInt1(String s) {int res 0;int n s.length();Map<Character, Integer> map new HashMap<>();map.put(I, 1);map.put(V, 5);map.put(X, 10);map.put(L, 50);map.put(C, 100);map.pu…...

【论文阅读】针对BEV感知的攻击

Understanding the Robustness of 3D Object Detection with Bird’s-Eye-View Representations in Autonomous Driving 这篇文章是发表在CVPR上的一篇文章&#xff0c;针对基于BEV的目标检测算法进行了两类可靠性分析&#xff0c;即恶劣自然条件以及敌对攻击。同时也提出了一…...

Ansible模块——设置软件仓库和安装软件包

设置软件仓库 ansible.builtin.rpm_key ansible.builtin.rpm_key 用于在 Fedora/RHEL 上导入或移除 GPG 公钥。 参数名 类型 默认值 说明 fingerprintstrnull 指定公钥的完整指纹&#xff08;long-form&#xff09;。在导入前会比对公钥是否匹配此指纹&#xff0c;增强安全…...

基于CentOS7制作OpenSSL 1.1的RPM包

背景&#xff1a;CentOS7 已经不再维护了&#xff0c;有时候需要升级某些组件&#xff0c;网上却没有相关的资源了。尤其是制作OpenSSH 9.6 的RPM包&#xff0c;就会要求OpenSSL为1.1的版本。基于此&#xff0c;还是自己制作吧&#xff0c;以下是踩坑过程。 1、官网提供的源码包…...

【Element UI】表单及其验证规则详细

Form表单 Form表单验证1. 使用方法2. rule参数3. validator回调函数异步服务器验证 Form表单验证 Form组件提供了表单验证的功能&#xff0c;需要通过rules属性传入约定的验证规则&#xff0c;并将Form-Item的prop属性设置为需校验的字段名 1. 使用方法 结构&#xff1a; &…...

使用 Python 打造一个强大的文件系统结构创建器

本文将深入分析一个基于 wxPython 的文件系统结构创建器程序&#xff0c;展示如何通过 CustomTreeCtrl 组件实现文件夹和文件的可视化管理&#xff0c;并提供添加、删除、导入、清空以及创建文件系统结构的强大功能。这个程序不仅适合开发者快速构建文件系统原型&#xff0c;还…...

面试真题 - 高并发场景下Nginx如何优化

Nginx是一款高性能的Web服务器和反向代理服务器&#xff0c;以其轻量级、高并发处理能力和稳定性闻名。在面对高并发场景时&#xff0c;合理的配置与优化策略至关重要&#xff0c;以确保服务的稳定性和响应速度。 以下是针对Nginx进行高并发优化的一些关键配置和策略&#xff…...

学习笔记:黑马程序员JavaWeb开发教程(2025.4.6)

12.4 登录校验-JWT令牌-介绍 JWT&#xff08;JSON Web Token&#xff09; 简洁是指JWT是一个简单字符串&#xff0c;自包含指的是JWT令牌&#xff0c;看似是一个随机字符串&#xff0c;但是可以根据需要&#xff0c;自定义存储内容 Header是JSON数据格式&#xff0c;原始JSO…...

机器学习——逻辑回归

一、逻辑回归概念点 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛使用的统计分析方法和机器学习算法&#xff0c;主要用于处理二分类问题&#xff08;即因变量为二元类别&#xff0c;如0和1、是和否等&#xff09;。尽管名字中有“回归”二字&#xff0c;但…...

服务间的“握手”:OpenFeign声明式调用与客户端负载均衡

现在&#xff0c;假设我们有一个新的order-service&#xff0c;它在创建订单时需要获取用户信息。 如果order-service直接硬编码user-service的IP和端口进行调用&#xff0c;会面临以下问题&#xff1a; 缺乏弹性: 如果user-service实例的IP或端口发生变化&#xff08;在云环境…...

蓝桥杯11届国B 答疑

题目描述 有 n 位同学同时找老师答疑。每位同学都预先估计了自己答疑的时间。 老师可以安排答疑的顺序&#xff0c;同学们要依次进入老师办公室答疑。 一位同学答疑的过程如下&#xff1a; 首先进入办公室&#xff0c;编号为 i 的同学需要 si​ 毫秒的时间。然后同学问问题老…...

【单机版OCR】清华TH-OCR v9.0免费版

今天向大家介绍一款非常好用的单机版OCR图文识别软件&#xff0c;它不仅功能多&#xff0c;识别能力强&#xff0c;而且还是免费使用的。OCR软件为什么要使用单机版&#xff0c;懂得都懂&#xff0c;因为如果使用在线识别的OCR软件&#xff0c;用户需要将文档上传互联网服务器的…...

蓝牙耳机什么牌子好?倍思值得冲不?

最近总被问“蓝牙耳机什么牌子好”&#xff0c;作为踩过无数坑的资深耳机党&#xff0c;必须安利刚入手的倍思M2s Pro主动降噪蓝牙耳机&#xff01;降噪、音质、颜值全都在线&#xff0c;性价比直接拉满。 -52dB降噪&#xff0c;通勤摸鱼神器 第一次开降噪就被惊到&#xff01…...

Java卡与SSE技术融合实现企业级安全实时通讯

简介 在数字化转型浪潮中,安全与实时数据传输已成为金融、物联网等高安全性领域的核心需求。本文将深入剖析东信和平的Java卡权限分级控制技术与浪潮云基于SSE的大模型数据推送技术,探索如何将这两项创新技术进行融合,构建企业级安全实时通讯系统。通过从零到一的开发步骤,…...