0基础 | STM32 | TB6612电机驱动使用
TB6612介绍及使用
单片机通过驱动板连接至电机
原因:单品机I/O口输出电流I小
驱动板:从外部引入高电压,控制电机驱动 | ||||||||
| ||||||||
电源部分 | VM:电机驱动电源输入,输入电压范围建议为3.7~12V | |||||||
GND:逻辑电源和电机驱动电源的公共地 | VCC:逻辑电源输入,输入电压为 2.7-5.5V | |||||||
电机接口 | A0 B0可以接两个电机 | |||||||
电机控制端口 | ||||||||
PWMA B分别为两个电机控制的使能端 (可使用PWM调速) | AIN1\AIN2;BIN1\BIN2 | |||||||
STBY | 使能引脚 | |||||||
IN1 | IN2 | PWM | STBY | O1 | O2 | |||
H | H | H/L | H | L | L | 制动 | ||
L | H | H | H | L | H | 反转 | ||
L | H | L | H | L | L | 制动 | ||
H | L | H | H | H | L | 正转 | ||
H | L | L | H | L | L | 制动 | ||
L | L | H | H | OFF | - | 停止 | ||
H/L | H/L | H/L | L | OFF | - | 待机 |
main.c #include "stm32f10x.h" #include "led.h" #include "usart.h" #include "delay.h" #include "oled.h" #include "Motor.h" #include "key.h" int key = 0; int key_state = 0; int main(void) { SystemInit();//系统时钟为72M delay_init(72); LED_Init(); LED_On(); MOTOR_Init(); USART1_Config();//串口初始化 Key_Init(); OLED_Init(); printf("Start \n"); delay_ms(1000);
OLED_Clear();//显示电机转速 OLED_ShowChinese(0,0,0,16,1); OLED_ShowChinese(16,0,1,16,1); OLED_ShowChinese(32,0,2,16,1); OLED_ShowChinese(48,0,3,16,1); OLED_ShowChar(64,0,':',16,1); while (1) {key = Key_GetData(); if(key) key_state++; if(key_state%4==1) {Motor_SetSpeed(60); OLED_ShowNum(56,24,1,1,16,1); }if(key_state%4==2) {Motor_SetSpeed(80); OLED_ShowNum(56,24,2,1,16,1);} if(key_state%4==3) {Motor_SetSpeed(100); OLED_ShowNum(56,24,3,1,16,1);} if(key_state%4==0) {Motor_SetSpeed(0); OLED_ShowNum(56,24,0,1,16,1); //0}}} |
Motor.c #include "Motor.h" void MOTOR_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(MOTOR_CLK, ENABLE ); //配置时钟 GPIO_InitStructure.GPIO_Pin = MOTOR_AIN1_GPIO_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(MOTOR_AIN1_GPIO_PORT,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MOTOR_AIN2_GPIO_PIN; GPIO_Init(MOTOR_AIN2_GPIO_PORT,&GPIO_InitStructure); PWM_Init(); } void PWM_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 /*GPIO初始化*/ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = MOTOR_PWMA_GPIO_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(MOTOR_PWMA_GPIO_PORT, &GPIO_InitStructure); //将PA1和PA2引脚初始化为推挽输出 TIM_InternalClockConfig(TIM2);//配置实际单元 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分频 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数模式 TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //自动重装ARR 分辨率 TIM_TimeBaseInitStructure.TIM_Prescaler = 36 - 1; //预分频PSC TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure); TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); //给结构体赋予初值 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //CCR TIM_OC3Init(TIM2,&TIM_OCInitStructure); TIM_Cmd(TIM2,ENABLE);} void PWM_SetCompare3(uint16_t compare) {TIM_SetCompare3(TIM2,compare); }void Motor_SetSpeed(int8_t Speed) {if(Speed >= 0) { GPIO_SetBits(MOTOR_AIN1_GPIO_PORT,MOTOR_AIN1_GPIO_PIN); GPIO_ResetBits(MOTOR_AIN2_GPIO_PORT,MOTOR_AIN2_GPIO_PIN); PWM_SetCompare3(Speed); }else{ GPIO_ResetBits(MOTOR_AIN1_GPIO_PORT,MOTOR_AIN1_GPIO_PIN); GPIO_SetBits(MOTOR_AIN2_GPIO_PORT,MOTOR_AIN2_GPIO_PIN); PWM_SetCompare3(-Speed);}} |
Motor.h #ifndef __MOTOR_H #define __MOTOR_H #include "stm32f10x.h" #include "delay.h" #include "sys.h" /***************根据自己需求更改****************/ // TB6612FNG电机驱动模块 GPIO宏定义 #define MOTOR_CLK RCC_APB2Periph_GPIOA #define MOTOR_AIN1_GPIO_PIN GPIO_Pin_0 #define MOTOR_AIN2_GPIO_PIN GPIO_Pin_1 #define MOTOR_AIN1_GPIO_PORT GPIOA #define MOTOR_AIN2_GPIO_PORT GPIOA #define MOTOR_PWMA_GPIO_PIN GPIO_Pin_2 #define MOTOR_PWMA_GPIO_PORT GPIOA /*********************END**********************/ void MOTOR_Init(void); void PWM_Init(void); void Motor_SetSpeed(int8_t Speed); #endif |
代码放在下述连接里面,通过网盘分享的文件:TB6612电机调速资料
链接: https://pan.baidu.com/s/1D_d506c3pwiRzHCaSq2_Aw?pwd=HHRR 提取码: HHRR
--来自百度网盘超级会员v5的分享
此外还有一种电机驱动,介绍如下
微型双路直流电机驱动基于TB6612FNG驱动IC设计,采用特殊逻辑控制方式,仅需4根管脚即可实现双路电机控制,相比纯芯片而言,减少了两个IO管脚,为Arduino等控制器节约了宝贵的IO资源,可以应用在更多领域中。
TB6612FNG是一块双路全桥驱动芯片,单通道最大连续驱动电流可达1.2A,峰值2A/3.2A(连续脉冲/单脉冲),可驱动一些微型直流电机。控制逻辑与L298N类似,代码上可直接兼容DFRobot L298N电机驱动。标准XH2.54排针可直插面包板,无论是DIY制作,还是新产品开发,都是非常理想的一个选择!
产品参数
- 逻辑部分输入电压VCC:3.3~5V
- 驱动部分输入电压VM:2.5~12V
- 驱动电机路数:2通道
- 单通道最大连续驱动电流:1.2A
- 启动峰值:2A/3.2A(连续脉冲/单脉冲)
- 接口方式:2.54mm间距排针
模块尺寸:20 × 19.5(mm)
细节说明
电机接口:M1,M2 可接入两个电机,其中标注了“+”、“-”表示两个电机的接线方向。
指示灯:正面指示灯:电源指示灯
电源部分
VCC:逻辑电源输入,输入电压为5V;
VM:电机驱动电源输入,输入电压范围建议为3.7~12V;
GND:逻辑电源和电机驱动电源的公共地。
电机控制端口
PWM1,PWM2:分别为两个电机控制的使能端(可使用PWM调速)
DIR1,DIR2:正反转控制信号输入端。比如,DIR1=1,M1电机正转; DIR1=0,M1电机反转。
引脚说明 | ||
管脚映射 | ||
标号 | 名称 | 功能描述 |
1 | DIR1 | 电机M1的方向控制引脚 |
3 | PWM2 | 电机M2的速度控制引脚 |
4 | DIR2 | 电机M2的方向控制引脚 |
5 | GND | 逻辑部分电源负极 |
6 | VCC | 逻辑部分电源正极 |
7 | M1+ | M1路电机输出1 |
8 | M1- | M1路电机输出2 |
9 | M2+ | M2路电机输出1 |
10 | M2- | M2路电机输出2 |
11 | GND | 电机电源负极 |
12 | VM(<12V) | 电机电源正极 |
模块尺寸:20 × 19.5(m\
相关文章:
0基础 | STM32 | TB6612电机驱动使用
TB6612介绍及使用 单片机通过驱动板连接至电机 原因:单品机I/O口输出电流I小 驱动板:从外部引入高电压,控制电机驱动 电源部分 VM:电机驱动电源输入,输入电压范围建议为3.7~12V GND:逻辑电…...
Cycleresearcher:通过自动化评审改进自动化研究
1、引言 迄今为止,整个科学发现过程自动化的挑战在很大程度上仍未解决,特别是在生成和改进符合同行评审工作高标准的研究成果方面。此外,很少有工作涉及迭代反馈的整合,这对保持学术的健全性和新奇至关重要。当前的模型往往难以适…...
深入理解Redis SDS:高性能字符串的终极设计指南
📍 文章提示 10分钟掌握Redis核心字符串设计 | 从底层结构到源码实现,揭秘SDS如何解决C字符串七大缺陷,通过20手绘图示与可运行的C代码案例,助你彻底理解二进制安全、自动扩容等核心机制,文末附实战优化技巧ÿ…...
【tcp连接windows redis】
tcp连接windows redis 修改redis.conf 修改redis.conf bind * -::*表示禁用保护模式,允许外部网络连接 protected-mode no...
【AI平台】n8n入门6:调用MCP服务(非社区节点)
前言 前边用n8n搭建一个MCP服务,现在,用n8n调用其他服务商提供的MCP服务。本文以高德地图服务为例,记录一下操作过程。 实现案例功能 MCP是啥 MCP(Model Context Protocol,模型上下文协议)是由Anthropi…...
C++负载均衡远程调用学习之 Dns-Route关系构建
目录 1.LARS-DNS-MYSQL环境搭建 2.LARSDNS-系统整体模块的简单说明 3.Lars-Dns-功能说明 4.Lars-Dns-数据表的创建 5.Lars-Dns-整体功能说明 6.Lars-DnsV0.1-Route类的单例实现 7.Lars-DnsV0.1-Route类的链接数据库方法实现 8.Lars-DnsV0.1-定义存放RouteData关系的map数…...
Linux53 百度网盘运行(下载devtoolset11后仍提示stdc++3.0.29缺失 计划用docker容器隔离运行,计划后续再看)
算了 放弃 都用到docker了 计划先看看系统服务后续再研究吧 百度网盘运行(下载devtoolset11后仍提示stdc3.0.29缺失 计划用docker容器隔离运行 但是由于系统服务未扎实,计划后续再看 重新下了el7的版本 刚才已启动成功 单输入xlock不启动 切换用户也不启动 …...
ASP.NET MVC 入门与提高指南八
45. 神经形态计算与 MVC 应用性能革新 45.1 神经形态计算概念 神经形态计算是借鉴生物神经系统的结构和工作原理来设计计算系统。它模仿人脑神经元和突触的工作方式,具备低功耗、高并行性和自适应学习等特性,能在处理复杂感知和认知任务时展现出卓越的…...
Python刷题:流程控制(下)
今天刷的是PythonTip的Python 入门挑战中的题,整体难度不高,适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 在无人问津的角落里, 默默努力的人独自发光, 孤独是他们奋斗路上的常客, 却也是成就他们的…...
【Bootstrap V4系列】学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb)
Bootstrap V4系列 学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb) 徽章(Badge)一、示例二、根据情境改变外观三、胶囊式徽章(Pill badges)四、链接 面包屑导航࿰…...
结合强化学习RL和SFT各自训练优势,让模型边学边练,从而平衡Zero-RL训练中的模仿和探索!!
摘要:最近在大型推理模型(LRMs)方面的进展表明,通过简单的基于规则的奖励进行强化学习(RL),可以涌现出复杂的行为,例如多步推理和自我反思。然而,现有的零强化学习&#…...
ai之paddleOCR 识别PDF python312和paddle版本冲突 GLIBCXX_3.4.30
这里写自定义目录标题 问题一**解决方案****方法 1:使用符号链接将系统库链接到 Conda 环境** **补充说明****验证修复结果** 问题二:**问题根源****解决方案****1. 确认 TensorRT 安装状态****2. 安装 TensorRT 并配置环境变量****3. 验证 TensorRT 与 …...
C++ 单例模式详解
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。 概念解析 单例模式的核心思想是: 限制类的实例化次数,确保在整个应用程序中只有一个实例存在 提供对该实例的全局访问点 控制共享…...
生成器模式(Builder Pattern)
好问题!生成器模式(Builder Pattern)在现实生活和程序开发中非常常见,它适合创建**“一步一步搭建起来的复杂对象”**。 🧠 一句话定义 生成器模式(Builder Pattern)是一种将复杂对象的构建过程…...
计算机网络八股文--day4 --传输层TCP与UDP
这是面试中最常考到的一层:端到端(也就是进程之间)的透明数据传输服务,差错控制和流量控制 该层呈上启下,像上面的资源子网提高服务,并使用下面通信子网的服务 端口,用于唯一标识主机上进程的&…...
大型语言模型个性化助手实现
大型语言模型个性化助手实现 目录 大型语言模型个性化助手实现PERSONAMEM,以及用户资料和对话模拟管道7种原位用户查询类型关于大语言模型个性化能力评估的研究大型语言模型(LLMs)已经成为用户在各种任务中的个性化助手,从提供写作支持到提供量身定制的建议或咨询。随着时间…...
步进电机中断函数解释
STM32 motor111.c 中 HAL_TIM_PeriodElapsedCallback 函数逐行解释 下面我们对 STM32 项目中 motor111.c 文件里的 HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 函数进行逐行解析,帮助初学者理解每一行代码的作用。此函数是在定时器产生更新中断时被调…...
多把锁以及线程死锁问题
在 Java 中,每一个对象都可以作为一把锁,synchronized 通过获取对象头中的锁标志位来实现同步。当一个线程获取到对象的锁后,其他线程就无法再获取该锁,只能等待获取到锁的线程释放锁之后才能继续执行被 synchronized 修饰的代码块…...
Vue 3 Element Plus 浏览器使用例子
Element Plus 是一个基于 Vue 3 的流行开源 UI 库,提供了一系列的组件,帮助开发者快速构建现代化的用户界面。它的设计简洁、现代,包含了许多可定制的组件,如按钮、表格、表单、对话框等,适合用于开发各种 Web 应用。 …...
NoxLucky:个性化动态桌面,打造独一无二的手机体验
在数字时代,手机桌面的个性化设置已经成为许多人表达自我和展示个性的重要方式。今天,我们要介绍的 NoxLucky,就是这样一款功能强大的动态桌面手机应用。它不仅提供了独家的动态壁纸素材库,还支持将抖音、INS等平台的短视频直接设…...
如何在WORD WPS中输入英语音标 批量给英语标注音标
在我国,英语的学习,已经是贯穿小学到大学的课程,英语学习,关键是听说读写,而听说读,都离不开一个字--音,这就涉及到了英语的音标了。音标(Phonetics)是表示单词发音的一种…...
RUST变量学习笔记
1,作用域概念 捕获环境 2,所有权概念 Rust则是通过所有权和借用来保证内存安全。很多人不理解为啥说Rust是内存安全的,其实就是在默认情况下,你是写不出内存不安全的代码的。 Rust的所有权并不难理解,它有且只有如下…...
n8n工作流自动化平台的实操:本地化高级部署
一、本地高级部署 1.下载 docker pull docker.n8n.io/n8nio/n8n 2.运行 docker volume create n8n_data docker run -dit --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n -e N8N_SECURE_COOKIEfalse -e N8N_RUNNERS_ENABLEDtrue -e N8N_ENFORCE_SETTINGS_FIL…...
【Ansible自动化运维实战:从Playbook到负载均衡指南】
本文是「VagrantVirtualBox虚拟化环境搭建」的续篇,深入探索Ansible在自动化运维中的核心应用: ✅ Ansible核心技能:Playbook编写、角色(Roles)模块化、标签(Tags)精准控制 ✅ 实战场景覆盖&a…...
数据赋能(210)——质量管理——可靠性原则
概述 数据可靠性原则确保数据的准确性、完整性、一致性和可信性,是决策和业务活动对数据质量的基本要求。在信息化和数字化快速发展的今天,数据已成为企业的重要资产,数据可靠性直接影响到企业的决策质量和业务活动效果。数据可靠性是数据质…...
二、机器学习中Python变量基础
二、Python变量基础 像C语言和Matlab一样,变量名由字母、数字、下划线组成(但不能以数字开头,字母区分大小写)变量名不能与内置的函数同名。 根据变量是否可以充当容器,将变量类型分为基本类型和高级类型。 基本变量…...
有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置
JGQ112Ⅱ有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置 一.实验目的 1.熟悉活性炭吸附剂的特性和在SO2气体净化方面的应用。 2.掌握活性炭吸附法的流程和实验过程中各参数的控制方法。 3.了解主要参数变化对吸附效率的影响。 4.掌握吸附等温线概念和测定方法。 二.技术…...
Javase 基础入门 —— 07 接口
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 概述 接…...
LangChain:重构大语言模型应用开发的范式革命
2022年10月22日,Harrison Chase在GitHub上提交了名为LangChain的开源项目的第一个代码版本。这个看似普通的代码提交,却悄然开启了一场重塑大语言模型(LLM)应用开发范式的技术革命。彼时,距离ChatGPT引爆全球人工智能浪…...
【现代深度学习技术】现代循环神经网络04:双向循环神经网络
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
重塑数学边界:人工智能如何引领数学研究的新纪元
目录 一、人工智能如何重新定义数学研究的边界 (一)数学与AI的关系:从基础理论到创新思维的回馈 (二)AI的创造力:突破传统推理的局限 (三)AI对数学研究的潜在贡献:创…...
链表的回文结构题解
首先阅读题目: 1.要保证是回文结构 2.他的时间复杂度为O(n)、空间复杂度为O(1) 给出思路: 1.首先利用一个函数找到中间节点 2.利用一个函数逆置中间节点往后的所有节点 3.现在有两个链表,第一个链表取头节点一直到中间节点、第二个链表取头结点到尾…...
xLua笔记
Generate Code干了什么 肉眼可见的,在Asset文件夹生成了XLua/Gen文件夹,里面有一些脚本。然后对加了[CSharpCallLua]的变量寻找引用,发现它被XLua/Gen/DelegatesGensBridge引用了。也可以在这里查哪些类型加了[CSharpCallLua]。 public over…...
【Hive入门】Hive与Spark SQL深度集成:通过Spark ThriftServer高效查询Hive表
目录 引言 1 Spark ThriftServer架构解析 1.1 核心组件与工作原理 1.2 与传统HiveServer2的对比 2 Spark ThriftServer部署指南 2.1 环境准备与启动流程 2.1.1 前置条件检查 2.1.2 服务启动流程 2.2 高可用部署方案 2.2.1 基于ZooKeeper的HA架构 3 性能优化实战 3.…...
快速掌握--cursor
Cursor - The AI Code Editor 官网下载安装 详细教程:cursor 下载安装使用(保姆教程)_cursor下载-CSDN博客 不知道为啥,第一次给我用的是繁体回答 然后改了一下询问方式 codebase就是告诉ai可以从整个项目中找答案࿰…...
Linux之基础开发工具(yum,vim,gcc,g++)
目录 一、软件包管理器 1.1、什么是软件包 1.2、yum具体操作 1.2.1、查看软件包 1.2.2、安装软件 1.2.3、卸载软件 1.2.4、安装源 二、编辑器vim 2.1、vim的基本概念 2.2、vim的基本操作 2.3、vim正常模式命令集 2.4、vim末行模式命令集 2.5、替换模式 2.6、视图…...
【计算机视觉】三维重建: OpenMVS:工业级多视图立体视觉重建框架
深度解析OpenMVS:工业级多视图立体视觉重建框架 技术架构与核心算法1. 系统架构设计2. 核心算法解析稠密点云重建表面重建网格优化 实战全流程指南环境配置硬件要求编译安装(Ubuntu) 数据处理流程输入准备(OpenMVG输出)…...
C++负载均衡远程调用学习之异步消息任务功能与连接属性
目录 1.LarV0.11-异步消息机制的event_loop增添属性分析 2.LARS 3.LarV0.11异步消息发送机制的实现及测试 4.LarV0.11异步消息任务机制bug修复和效果演示 5.LarV0.12链接参数属性的绑定 1.LarV0.11-异步消息机制的event_loop增添属性分析 ## 4) 事件触发event_loop …...
内存性能测试方法
写于 2022 年 6 月 24 日 内存性能测试方法 - Wesley’s Blog dd方法测试 cat proc/meminfo console:/ # cat proc/meminfo MemTotal: 3858576 kB MemFree: 675328 kB MemAvailable: 1142452 kB Buffers: 65280 kB Cached: 992252 …...
游戏引擎学习第256天:XBox 控制器卡顿和修复 GL Blit 伽玛问题
回顾并为今天定下基调 今天的主要任务是让我们的性能分析工具正常工作,因为昨天已经完成了结构性工作。现在,剩下的工作大部分应该是调试和美化。性能分析工具现在应该已经基本可用了。昨天我们在这个方面取得了很大的进展。 接下来,我们将…...
4.29-4.30 Maven+单元测试
单元测试: BeforeAll在所有的单元测试方法运行之前,运行一次。 AfterAll在所有单元测试方法运行之后,运行一次。 BeforeEach在每个单元测试方法运行之前,都会运行一次 AfterEach在每个单元测试方法运行之后,都会运行…...
Android 端如何监控 ANR、Crash、OOM 等严重问题
在移动互联网时代,Android 应用已经成为我们生活中不可或缺的一部分。从社交聊天到在线购物,从娱乐消遣到办公学习,几乎每个人的手机里都装满了各式各样的应用。然而,作为开发者,咱们得面对一个残酷的现实:…...
Spring Boot 微服务打包为 Docker 镜像并部署到镜像仓库实战案例
案例项目素材可以拉取我github上的: https://github.com/AcademicTECHNERD/SpringCoudEurekaDemo 下面的案例将把我的product-service(也就是提供者)打包为镜像 执行maven命令: mvn clean package -DskipTests在根目录加一个dock…...
springAop代理责任链模式源码解析
目录 两次匹配 Bean 后置处理器中的匹配 方法调用时的匹配 Bean后置处理器中Advisor匹配流程 方法调用时的匹配 Jdk cglib 小小总结 Advisor 收集与排序 责任链执行过程 两次匹配 Bean 后置处理器中的匹配 在 Bean 初始化过程中,Spring 会通过 Bean 后置…...
ElasticSearch深入解析(九):Object、Nested、Flattened类型
文章目录 一、Object 类型:默认的嵌套对象处理方式核心原理典型场景关键限制 二、Nested 类型:解决嵌套数组的关联查询核心原理典型场景使用示例注意事项 三、Join 类型:跨文档的父子关联核心原理典型场景使用示例注意事项 四、Flattened 类型…...
list的迭代器详讲
1.list的迭代器就是封装了节点指针的类 2.迭代器失效 迭代器失效即迭代器封装的节点指针无效 。因为 list 的底层结构为带头结点的双向循环链表 ,因此 在 list 中进行插入时是不会导致 list 的迭代 器失效的,只有在删除时才会失效,并且失效的…...
动态规划之多状态问题1
题目解析: 也就是给一个预约数组,选择一些数字,让其总和最大,但不能选择相邻的两个数字 算法原理: 依旧可以根据经验题目 以dp[i]位置结尾时,巴拉巴拉 根据题目要求补充完整,dp[i]ÿ…...
音视频开源项目列表
音视频开源项目列表 一、多媒体处理框架 通用音视频处理 FFmpeg - https://github.com/FFmpeg/FFmpeg 最强大的音视频处理工具库支持几乎所有格式的编解码提供命令行工具和开发库 GStreamer - https://gitlab.freedesktop.org/gstreamer/gstreamer 跨平台多媒体框架基于管道…...
论微服务架构及其应用
试题四 论微服务架构及其应用 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通。在微服务架构中,每个服务…...
Spring Cloud与Service Mesh集成:Istio服务网格实践
文章目录 引言一、Spring Cloud与Service Mesh概述二、Istio服务网格架构三、Spring Cloud与Istio集成的基础设施准备四、服务发现与负载均衡五、流量管理与弹性模式六、安全通信与认证授权七、可观测性集成八、配置管理集成总结 引言 微服务架构已成为现代分布式系统的主流设…...