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

stm32 - 中断

stm32 - 中断

  • 概念
  • 中断向量表
  • NVIC 嵌套中断向量控制器
    • 优先级
  • 中断
    • EXTI
      • 概念
      • 基本结构
      • 例子- 对射式红外传感器计次
      • 例子 - 旋转编码器

概念

stm32 支持的中断资源(都属于外设)

  • EXTI
  • TIM
  • ADC
  • USARt
  • SPI
  • I2C

stm32支持的中断

内核中断
外设中断

中断通道与优先级

一个外设可能占用多个中断通道(一个EXTI外设模块,可以有多个中断通道)
每个中断通道有16个优先级

中断向量表

自定义的中断服务函数,由编译器随机指定函数地址
stm32的中断,由于硬件的限制,只能跳到固定的地址执行程序
为了能让硬件跳转到一个不固定的中断函数中, 需要在内存中定义一个地址列表,这个列表的地址是固定的,中断发生后,先跳到这个固定位置,然后在这个固定位置,由编译器加上一条跳转到中断函数的代码,这样中断就可以跳转到任意位置了

NVIC 嵌套中断向量控制器

用于同一分配中断优先级和管理中断的,NVIC是一个内核外设

一个外设可能占用多个中断通道,所以有n条线
NVIC只有一个输出口,其根据每个中断的优先级分配中断的先后顺序
然后通过仅有的一个输出口,通知CPU应该处理哪个中断

在这里插入图片描述

优先级

  • 响应优先级:“插队看病”
  • 抢占优先级:“中断嵌套”

NVIC中断优先级由优先级寄存器的4位(0~15)决定,数值越小优先级越高
高n位为抢占优先级,4-n位为响应优先级
抢占优先级高的可以中断嵌套,响应优先高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队

中断

EXTI

检测指定GPIO的电平信号
电平信号发生变化时,EXTI申请中断

概念

触发方式

上升沿(低->高)触发中断
下降沿(高->低)触发中断
双边沿(上升沿和下降沿都可以触发中断)
软件触发:引脚电平未发生变化,通过在软件中调用执行代码触发中断

GPIO

任意的GPIO口都可以当做外部中断的引脚,但是相同的pin引脚不能同时触发中断(PA0/PB0; PA1/PB1/PC1)

通道数

16个GPIO_pin,外加PVD输出,RTC闹钟,USB唤醒,以太网唤醒

触发响应方式

中断响应:申请中断,让CPU执行中断函数
事件响应: 当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,也可以选择触发事件,那么外部中断的信号就不会通向CPU了,而是通向其他外设,用来触发其他外设的操作

基本结构

EXTI模块支持20个中断通道数,16个pin_脚+PVD+RTC+USB+ETH

针对GPIO,利用AFIO进行中断选择(当使用GPIO实现外部中断时)

PA0/PB0/PC0… 通过AFIO选择器选择一个作为pin_0通道
PA1/PB1/PC1… 通过AFIO选择器选择一个作为pin_1通道
PA2/PB2/PC2… 通过AFIO选择器选择一个作为pin_2通道

每个通道有16可配置优先级,通过NVIC进行优先级配置
NVIC可以进行优先级分组(抢占/响应),每个分组都有取值范围,不同的取值范围,在CPU进行中断服务的时机不同

注意16个引脚输入通道,最终只有7个输入,其中9-5和15-10便成了路两路输出通道,因此需要中断标志位判断哪一个中断过来
在这里插入图片描述
在这里插入图片描述

PB14引脚的电平信号就可以通过AFIO进入到EXTI电路中
在这里插入图片描述

例子- 对射式红外传感器计次

main.c

#include "stm32f10x.h"
#include "OLED.h"
#include "infrCountSensor.h"int main()
{OLED_Init();OLED_ShowString(1,1,"helloworld");OLED_ShowString(2,1,"count: ");InfrCountSensor_Init(14);while (1) {OLED_ShowNum(2,8,InfrCountSensor_GetCount(),8);}
}

infrCountSensor.h

#ifndef __INFRCOUNTSENSOR_H__
#define __INFRCOUNTSENSOR_H__
#include "stm32f10x.h"
void InfrCountSensor_Init(unsigned char pin_num);
unsigned int InfrCountSensor_GetCount();
uint16_t GPIO_Pin_Num_Set(uint16_t pin_num);
uint8_t GPIO_AFIO_Pin_Num_Select(uint16_t pin_num);
uint32_t EXTI_Line_Set(unsigned char pin_num);
#endif

infrCountSensor.c

#include "infrCountSensor.h"static unsigned int infrCountSensor_count;uint16_t GPIO_Pin_Num_Set(uint16_t pin_num)
{uint16_t GPIO_Pin_num=0;switch (pin_num){case 0: {return GPIO_Pin_0;break;}case 1: {return GPIO_Pin_1;break;}case 2: {return GPIO_Pin_2;break;}case 3: {return GPIO_Pin_3;break;}case 4: {return GPIO_Pin_4;break;}case 5: {return GPIO_Pin_5;break;}case 6: {return GPIO_Pin_6;break;}case 7: {return GPIO_Pin_7;break;}case 8: {return GPIO_Pin_8;break;}case 9: {return GPIO_Pin_9;break;}case 10: {return GPIO_Pin_10;break;}case 11: {return GPIO_Pin_11;break;}case 12: {return GPIO_Pin_12;break;}case 13: {return GPIO_Pin_13;break;}case 14: {return GPIO_Pin_14;break;}case 15: {return GPIO_Pin_14;break;}default: return GPIO_Pin_num;}}uint8_t GPIO_AFIO_Pin_Num_Select(uint16_t pin_num)
{uint8_t AFIO_Pin_num=0;switch (pin_num){case 0: {return GPIO_PinSource0;break;}case 1: {return GPIO_PinSource1;break;}case 2: {return GPIO_PinSource2;break;}case 3: {return GPIO_PinSource3;break;}case 4: {return GPIO_PinSource4;break;}case 5: {return GPIO_PinSource5;break;}case 6: {return GPIO_PinSource6;break;}case 7: {return GPIO_PinSource7;break;}case 8: {return GPIO_PinSource8;break;}case 9: {return GPIO_PinSource9;break;}case 10: {return GPIO_PinSource10;break;}case 11: {return GPIO_PinSource11;break;}case 12: {return GPIO_PinSource12;break;}case 13: {return GPIO_PinSource13;break;}case 14: {return GPIO_PinSource14;break;}case 15: {return GPIO_PinSource14;break;}default: return AFIO_Pin_num;}
}uint32_t EXTI_Line_Set(unsigned char pin_num)
{uint32_t EXTI_Line_num=0;switch (pin_num){case 0: {return EXTI_Line0;break;}case 1: {return EXTI_Line1;break;}case 2: {return EXTI_Line2;break;}case 3: {return EXTI_Line3;break;}case 4: {return EXTI_Line4;break;}case 5: {return EXTI_Line5;break;}case 6: {return EXTI_Line6;break;}case 7: {return EXTI_Line7;break;}case 8: {return EXTI_Line8;break;}case 9: {return EXTI_Line9;break;}case 10: {return EXTI_Line10;break;}case 11: {return EXTI_Line11;break;}case 12: {return EXTI_Line12;break;}case 13: {return EXTI_Line13;break;}case 14: {return EXTI_Line14;break;}case 15: {return EXTI_Line15;break;}default: return EXTI_Line_num;}
}void InfrCountSensor_Init(unsigned char pin_num)
{// 打开GPIO/AFIO时钟// GPIO和AFIO是APB2总线的外设,需要手动开启时钟,RCC用于配置内核外的外设时钟// EXIT中断默认开始时钟,NVIC是内核外设(内核外设也无需开启时钟)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 配置GPIO 输入模式uint16_t GPIO_Pin_num=0;GPIO_Pin_num=GPIO_Pin_Num_Set(pin_num);GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;		// 上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_num;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);// 配置AFIO 选择器(中断引脚选择)// GPIO_AFIODeInit(); 		// 清空配置// GPIO_PinLockConfig(); 	// 锁定引脚,防止意外被更改// GPIO_PinRemapConfig(); 		// 引脚重映射// 选择指定的GPIO / pin 作为外部中断源uint8_t AFIO_Pin_num=0;AFIO_Pin_num=GPIO_AFIO_Pin_Num_Select(pin_num);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,AFIO_Pin_num); // 配置数据选择器,// AFIO_Pin_num 是AFIO的中断选择器号,这里是第14个数据选择器// 配置EXTI中断,触发方式,触发响应方式// EXTI_DeInit(); 		// 清除配置// EXTI_StructInit(); 	// 结构体赋值// EXTI_GenerateSWinterrupt(); // 软件触发// 外部中断的外部状态寄存器会设置对应的标志位// 在主程序中读写外部中断标志位,在中断服务函数中读写外部中断标志位uint32_t EXTI_Line_num=0;EXTI_Line_num=EXTI_Line_Set(pin_num);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line_num;				// 指定要配置的中断线,中断EXTI输入通道EXTI_InitStructure.EXTI_LineCmd=ENABLE;					// 中断线的新状态,开启中断EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt ;		// 中断模式interrupt或事件模式eventEXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;	//触发方式,下降沿EXTI_Init(&EXTI_InitStructure); 						// 初始化// 配置NVIC,中断优先级,进入CPU再执行中断程序NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断分组,两位抢占,两位响应NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;		// 中断EXTI输出通道,15-10占用一个通道,在中断服务函数中需要判断中断标志位NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;	// 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;		// 响应优先级 (在响应中断中)NVIC_Init(&NVIC_InitStructure);
}void EXTI15_10_IRQHandler(void) // 中断函数
{// 中断标志位的判断if (EXTI_GetITStatus(EXTI_Line14)==SET){// 清楚中断标志位EXTI_ClearITPendingBit(EXTI_Line14);infrCountSensor_count++;}
}unsigned int InfrCountSensor_GetCount()
{return infrCountSensor_count;
}

例子 - 旋转编码器

对于两个中断,AFIO、EXTI、NVIC的code方式

main.c

#include "stm32f10x.h"
#include "Delay.h"
#include "LED.h"
#include "key.h"
#include "Buzzer.h"
#include "PhotoSensor.h"
#include "OLED.h"
#include "infrCountSensor.h"
#include "encoder.h"int main()
{OLED_Init();OLED_ShowString(1,1,"helloworld");OLED_ShowString(2,1,"count: ");Encoder_Init();while (1) {OLED_ShowSignedNum(2,8,Encoder_Get(),8);}
}

encoder.h

#ifndef __ENCODER_H__
#define __ENCODER_H__#include "stm32f10x.h"
void Encoder_Init();
int16_t Encoder_Get();
#endif

encoder.c

#include "encoder.h"int16_t encoder_rotate;void Encoder_Init()
{// 打开GPIO/AFIO时钟// GPIO和AFIO是APB2总线的外设,需要手动开启时钟,RCC用于配置内核外的外设时钟// EXIT中断默认开始时钟,NVIC是内核外设(内核外设也无需开启时钟)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 配置GPIO 输入模式GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;		// 上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);// 配置AFIO 选择器(中断引脚选择)// 选择指定的GPIO / pin 作为外部中断源GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); // 配置数据选择器,// AFIO_Pin_num 是AFIO的中断选择器号,这里是第14个数据选择器GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); // 配置数据选择器,// AFIO_Pin_num 是AFIO的中断选择器号,这里是第14个数据选择器// 配置EXTI中断,触发方式,触发响应方式// 外部中断的外部状态寄存器会设置对应的标志位// 在主程序中读写外部中断标志位,在中断服务函数中读写外部中断标志位;EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line0 | EXTI_Line1;				// 指定要配置的中断线,中断EXTI输入通道EXTI_InitStructure.EXTI_LineCmd=ENABLE;					// 中断线的新状态,开启中断EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt ;		// 中断模式interrupt或事件模式eventEXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;	//触发方式,下降沿EXTI_Init(&EXTI_InitStructure); 						// 初始化// 对两个通道分别设置优先级// 配置NVIC,中断优先级,进入CPU再执行中断程序NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断分组,两位抢占,两位响应NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;		// 中断EXTI输出通道NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;	// 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;		// 响应优先级 (在响应中断中)NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;		// 中断EXTI输出通道NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;	// 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;		// 响应优先级 (在响应中断中)NVIC_Init(&NVIC_InitStructure);
}void EXTI0_IRQHandler()
{if (EXTI_GetITStatus(EXTI_Line0)==SET){EXTI_ClearITPendingBit(EXTI_Line0);if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){encoder_rotate--;} }
}void EXTI1_IRQHandler()
{if (EXTI_GetITStatus(EXTI_Line1)==SET){EXTI_ClearITPendingBit(EXTI_Line1);if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0){encoder_rotate++;} }
}int16_t Encoder_Get()
{return encoder_rotate;
}

相关文章:

stm32 - 中断

stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源(都属于外设) EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一…...

【洛谷 P1216】[USACO1.5] [IOI1994]数字三角形 Number Triangles 题解(动态规划)

[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中,从 7 → 3 → 8 →…...

十四天学会C++之第四天(面向对象编程基础)

类和对象是什么? 在C中,类是一种用户定义的数据类型,它可以包含数据成员(也就是属性)和成员函数(也就是方法)。类是一种模板或蓝图,用于创建具体的对象。 对象是类的实例&#xff…...

复习Day09:哈希表part02:141.环形链表、142. 环形链表II、454.四数相加II、383赎金信

之前的blog:https://blog.csdn.net/weixin_43303286/article/details/131765317 我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用…...

Internet通过TCP/IP协议可以实现多个网络的无缝连接

Internet通过TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)协议实现多个网络的无缝连接。 TCP/IP是Internet的基础通信协议套件,它定义了数据如何在不同网络之间传输和路由,使得…...

互联网Java工程师面试题·Dubbo 篇·第二弹

目录 18、Dubbo 用到哪些设计模式? 19、Dubbo 配置文件是如何加载到 Spring 中的? 20、Dubbo SPI 和 Java SPI 区别? 21、Dubbo 支持分布式事务吗? 22、Dubbo 可以对结果进行缓存吗? 23、服务上线怎么兼容旧版本&…...

(c语言)经典bug

#include<stdio.h> //经典bug int main() { int i 0; int arr[10] {1,2,3,4,5,6,7,8,9,10}; for (i 0; i < 12; i) //越界访问 { arr[i] 0; printf("hehe\n"); } return 0; } 注&#xff1a;输出结果为死循…...

用于工业物联网和自动化的 Apache Kafka、KSQL 和 Apache PLC4

由于单一系统和专有协议&#xff0c;数据集成和处理是工业物联网&#xff08;IIoT&#xff0c;又名工业 4.0 或自动化工业&#xff09;中的巨大挑战。Apache Kafka、其生态系统&#xff08;Kafka Connect、KSQL&#xff09;和 Apache PLC4X 是以可扩展、可靠和灵活的方式实现端…...

1.1.1开发基础-硬件-万用表

​ 1 万用表 万用表又叫多用表、三用表、复用表,是一种多功能、多量程的测量仪表,一般万用表可测量直流电流、直流电压、交流电压、电阻和音频电平等,有的还可以测交流电流、电容量、电感量及半导体的一些参数,是最常用、最简单的测试设备。 万用表是一种多功能多量程的便…...

Mysql内置函数、复合查询和内外连笔记

目录 一、mysql内置函数 1.1.日期函数 1.2.字符串函数 1.3.数学函数 1.4.其他函数 二、复合查询 2.2 自连接 2.3 子查询 2.3.1单行自查询 2.3.2 多行子查询 2.3.3 多列子查询 2.3.4在from子句中使用子查询 2.3.5合并查询 三、表的内连和外连 3.1内连接 3.2外连接…...

【VUE·疑难问题】定义 table 中每行的高度(使用 element-UI)

一、如何定义 table 中每一行的 height &#xff1f; 1.table例子 <!-- 二、table --><div style"overflow: hidden;display: block;height: 68vh;width: 100%;"><el-table stripe show-header style"width: 100%" :data"tableData&q…...

【重拾C语言】四、循环程序设计(后判断条件循环、先判断条件循环、多重循环;典例:计算平均成绩、打印素数、百钱百鸡问题)

目录 前言 四、循环程序设计 4.1 计算平均成绩——循环程序 4.1.1 后判断条件的循环 a. 语法 b. 典例 4.1.2 先判断条件的循环 a. 语法 b. 典例 4.1.3 for语句 a. 语法 b. 典例 4.2 计算全班每人平均成绩—多重循环 4.2.1 打印100以内素数 4.2.2 百钱百…...

Linux 安装 Gitlab

1、到官网下载Gitlab安装包 (如果是Centos&#xff0c;到el目录下载)。下载GitLab 2、安装依赖软件 sudo yum install -y policycoreutils-python3、安装gitlab sudo rpm -i gitlab-jh-16.3.4-jh.0.el7.x86_64.rpm 4、修改 gitlab.rb sudo vi /etc/gitlab/gitlab.rb 5、g…...

stm32-SPI协议

SPI协议详解&#xff08;图文并茂超详细&#xff09; SPI通讯协议 于是我们想有没有更好一点的串行通讯方式&#xff1b;相比较于UART&#xff0c;SPI的工作方式略有不同。 SPI是一个同步的数据总线&#xff0c;也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和…...

想要精通算法和SQL的成长之路 - 并查集的运用和案例(省份数量)

想要精通算法和SQL的成长之路 - 并查集的运用 前言一. 并查集的使用和模板1.1 初始化1.2 find 查找函数1.3 union 合并集合1.4 connected 判断相连性1.5 完整代码 二. 运用案例 - 省份数量 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 并查集的使用和模板 先说一下并查集…...

解决内网拉取企微会话存档代理问题的一种办法

问题&#xff1a;客户的服务都是内网的&#xff0c;不能直接访问外网&#xff1b;访问外网的话需要走kong网关才能出去。 会话存档官网说可以使用socket5、http方式拉取会话存档&#xff1b;我这边尝试了直接使用kong网关的ip和端口配置进去&#xff0c;是访问不了的 我后面就…...

二十二,加上各种贴图

使用pbr的各种贴图&#xff0c;albedo,金属度&#xff0c;ao,法线&#xff0c;粗糙度&#xff0c;可以更好的控制各个片元 1&#xff0c;先加上纹理坐标 texCoords->push_back(osg::Vec2(xSegment, ySegment)); geom->setVertexAttribArray(3, texCoords, osg::Array::BI…...

新版校园跑腿独立版小程序源码 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务

最新校园跑腿小程序源码 多校版本&#xff0c;多模块&#xff0c;适合跑腿&#xff0c;外卖&#xff0c;表白&#xff0c;二手&#xff0c;快递等校园服务 此版本为独立版本&#xff0c;不需要** 直接放入就可以 需要自己准备好后台的服务器&#xff0c;已认证的小程序&#xf…...

SpringBoot banner 样式 自动生成

目录 SpringBoot banner 样式 自动生成 图案网站&#xff1a; 1.第一步创建banner.txt文件 2.访问网站Ascii艺术字实现个性化Spring Boot启动banner图案&#xff0c;轻松修改更换banner.txt文件内容&#xff0c;收集了丰富的banner艺术字和图&#xff0c;并且支持中文banner下…...

回收站里面删除的照片如何恢复?

现在拍照已经成为人们生活中的一种方式&#xff0c;照片为我们保留了许多珍贵而美好的回忆。大家通常会把重要的照片保存在硬盘里&#xff0c;但当不小心把照片移入回收站并彻底删除时&#xff0c;情况就有点糟糕了。那么&#xff0c;回收站里删除的照片还有办法恢复吗&#xf…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...