94.STM32外部中断
目录
1.什么是 NVIC?
2.NVIC寄存器
3.中断优先级
4.NVIC的配置
设置中断分组编辑
配置某一个中断的优先级
5.什么是EXTI
6.EXTI和NVIC之间的关系
7.SYSCFG 的介绍
1.什么是 NVIC?
NVIC是一种中断控制器,主要用于处理 ARM Cortex-M 微控制器的中断管理。NVIC 负责处理中断优先级、中断向量表以及中断使能和禁止等任务。
中断向量表: NVIC 维护了中断向量表,其中包含了中断服务程序的入口地址。当中断发生时,CPU会根据中断号(或中断向量)在中断向量表中查找相应的中断服务程序的入口地址。
中断优先级: NVIC 允许为每个中断配置优先级。这些优先级决定了中断在系统中的响应顺序。Cortex-M架构中,中断优先级通常是基于位宽的,较低位的值表示较高的优先级。
嵌套中断: NVIC 支持嵌套中断,即在处理某个中断时,如果发生更高优先级的中断请求,系统可以中断当前中断服务程序,处理更高优先级的中断,然后返回继续处理低优先级的中断。这种特性对于实时系统和复杂任务处理非常有用。
中断使能和禁止: NVIC 允许对每个中断进行使能和禁止。这使得可以在运行时动态地配置系统中的中断。
中断状态: NVIC 提供了一些寄存器用于查询和管理中断状态,例如检查某个中断是否处于挂起状态。
中断控制寄存器: NVIC 通过一系列寄存器(如 NVIC_ISER、NVIC_ICER、NVIC_ISPR、NVIC_ICPR)提供中断的使能、禁止、挂起和清除等功能。
2.NVIC寄存器
typedef struct
{__IOM uint32_t ISER[8U]; /* 中断使能寄存器 */uint32_t RESERVED0[24U];__IOM uint32_t ICER[8U]; /* 中断清除使能寄存器 */uint32_t RSERVED1[24U];__IOM uint32_t ISPR[8U]; /* 中断使能挂起寄存器 */uint32_t RESERVED2[24U];__IOM uint32_t ICPR[8U]; /* 中断解挂寄存器 */uint32_t RESERVED3[24U];__IOM uint32_t IABR[8U]; /* 中断有效位寄存器 */uint32_t RESERVED4[56U];__IOM uint8_t IP[240U]; /* 中断优先级寄存器(8Bit 位宽) */uint32_t RESERVED5[644U];__OM uint32_t STIR; /* 中断触发中断寄存器 */
} NVIC_Type;
STM32F407 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能
方便的使用 STM32F407 的中断。下面重点介绍这几个寄存器:
1.ISER[8](Interrupt Set Enable Register):中断使能寄存器
2.ICER[8](Interrupt Clear Enable Registers):中断除能寄存器
3.ISPR[8](Interrupt Set Pending Registers):中断使能挂起控制寄存器,通过置 1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写 0 是⽆效的。
4.ICPR[8](Interrupt Clear Pending Registers):中断解除挂起控制寄存器
5.IABR[8](Interrupt Active Bit Registers):是⼀个中断激活标志位寄存器组。对应位所代表的中断和 ISER ⼀样,如果为 1,则表示该位所对应的中断正在被执行。这是⼀个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。
6.IP [240](Interrupt Priority Registers):中断优先级控制寄存器组。由240个8bit的寄存器组成,每个可屏蔽中断占用8bit。但我们只用IP[81] - IP[0]这82个。并且,每个中断通道占用的8bit并没有全部使用,而是只用了高4位。
3.中断优先级
STM32 中的中断优先级可以分为:抢占式优先级和响应优先级,每个中断源都需要被指定这两种优先级。抢占式优先级和响应优先级的区别:
抢占优先级:抢占优先级高的中断可以打断正在执行的抢占优先级低的中断。
响应优先级:抢占优先级相同,响应优先级高的中断不能打断响应优先级低的中断。
还有一种情况就是当两个或者多个中断的抢占式优先级和响应优先级相同时,那么就遵循
自然优先级,看中断向量表的中断排序,数值越小,优先级越高。
在 NVIC 中由寄存器 NVIC_IPR0-NVIC_IPR59 共 60 个寄存器控制中断优先级,每个寄存器的每 8 位又分为一组,可以分 4 组,所以就有了 240 组宽度为 8bit 的中断优先级控制寄存器,
原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。但是实际上 M3 /M4
/M7 芯片为了精简设计,只使用了高四位[7:4],低四位取零,这样以至于最多只有 16 级中断嵌
套,即 2^4=16。
抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。 抢占优先级和响应优先级相同的,按中断号(中断向量表)先后执行。
4.NVIC的配置
设置中断分组
配置某一个中断的优先级
函数名称:void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
typedef struct
{uint8_t NVIC_IRQChannel; //表示要配置的中断通道(或中断号) uint8_t NVIC_IRQChannelPreemptionPriority; //表示中断的抢占优先级。uint8_t NVIC_IRQChannelSubPriority; //表示中断的响应优先级。 FunctionalState NVIC_IRQChannelCmd; //表示中断通道的使能状态。
} NVIC_InitTypeDef;
下面是结构体成员的解释:
NVIC_IRQChannel: 表示要配置的中断通道(或中断号)。对于 ARM Cortex-M 微控制器,中断通道的编号是硬件定义的,代表不同的中断源。例如,USART1 的中断通道号是USART1_IRQn。
NVIC_IRQChannelPreemptionPriority: 表示中断的抢占优先级。中断的抢占优先级决定了在同一时间发生多个中断时,哪个中断可以立即被处理,而哪些需要等待。这是一个 0 到 N-1(N 是抢占优先级位数)的值,值越小表示优先级越高。
NVIC_IRQChannelSubPriority: 表示中断的子优先级。在同一抢占优先级组内,子优先级决定了不同中断的响应顺序。这是一个 0 到 N-1(N 是子优先级位数)的值,值越小表示优先级越高。
NVIC_IRQChannelCmd: 表示中断通道的使能状态。可以为ENABLE或DISABLE,分别表示使能或禁止相应的中断通道。
5.什么是EXTI
EXTI 是外部中断(External Interrupt)控制器的缩写,用于处理与外部事件(通常是硬件引脚的状态变化)相关的中断。在 STM32 微控制器中,EXTI 模块与 GPIO 模块一起使用,以便在特定事件(如边沿触发、电平触发等)发生时触发相应的中断。

初始化函数:void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);EXTI外设的时钟默认是开启的
typedef struct
{uint32_t EXTI_Line; EXTIMode_TypeDef EXTI_Mode; EXTITrigger_TypeDef EXTI_Trigger; FunctionalState EXTI_LineCmd;
}EXTI_InitTypeDef;
EXTI_Line: 指定要启用或禁用的外部中断线。这个参数可以是EXTI_Lines枚举类型中的任何组合值,表示一个或多个中断线。例如,EXTI_Line0表示外部中断线0。EXTI_Mode: 指定外部中断线的工作模式。这个参数可以是EXTIMode_TypeDef枚举类型的值,表示中断线的触发模式。例如,EXTI_Mode_Interrupt表示中断模式。EXTI_Trigger: 指定外部中断线的触发方式,即触发信号的边沿。这个参数可以是EXTITrigger_TypeDef枚举类型的值,表示中断线触发的方式,如上升沿、下降沿等。EXTI_LineCmd: 指定所选外部中断线的新状态。这个参数可以是FunctionalState枚举类型的值,表示中断线的使能或禁止状态,可以是ENABLE或DISABLE。
6.EXTI和NVIC之间的关系

EXTI模块配置中断线:EXTI负责配置外部中断线,将外部事件(通常是引脚状态的变化)连接到中断系统。它定义了中断线的触发条件、使能状态等。EXTI允许你设置哪些引脚上的事件会触发中断,以及中断是由上升沿、下降沿还是上升和下降沿都触发。配置好EXTI后,当与之相关联的外部事件发生时,EXTI会产生中断请求。
NVIC确定中断优先级: 一旦EXTI产生中断请求,中断请求会传递给NVIC。NVIC负责管理所有中断的优先级。在STM32中,中断的优先级是按组管理的,NVIC允许配置每个中断的优先级。这就是为什么在使用外部中断时,需要通过NVIC设置中断的优先级。中断处理函数: 在
NVIC配置好中断优先级后,当外部中断被触发时,NVIC会根据中断优先级的设定决定是否打断当前正在执行的程序。如果中断被接受,NVIC会跳转到相应的中断处理函数,该函数是由用户编写的,通常用于处理与中断相关的任务。在中断处理函数中,需要清除相应的中断标志,通常是通过EXTI_ClearITPendingBit来完成。
7.SYSCFG 的介绍
SYSCFG 是STM32微控制器中的一个系统配置寄存器,用于配置和控制一些系统级别的功能和外设。主要的作用包括配置外部中断线、使能内部的传感器和控制外设的引脚映射。
1.中断线映射: SYSCFG 允许将外部中断线映射到不同的中断通道。在使用外部中断时,需要配置 SYSCFG 以选择相应的中断通道。
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
//上述例子将 GPIOA 的引脚0与外部中断线0相关联。
2.定时器触发映射: 对于某些定时器,SYSCFG 允许配置触发源。例如,可以将外部信号映射到定时器的触发输入。
TIM1_ETR_Config(TIM1_ETRSource_TI1, TIM1_ExtTRGPSC_DIV1, TIM1_ExtTRGPolarity_NonInverted, 0x00);
//上述例子配置了TIM1定时器的触发源。
3.内部传感器使能: SYSCFG 允许使能内部的温度传感器和电压检测器。
SYSCFG_VBATMonitoringCmd(ENABLE);
//上述例子使能了电池电压检测器。
4.BOOT模式配置: SYSCFG 允许配置启动时的引脚状态,以确定系统启动时的模式。
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
//上述例子将内部SRAM映射到系统的起始地址。
第一步:时钟的使能
- 1)使能GPIO时钟
- 2)使能SYSCFG时钟
- ** EXTI和 NVIC的时钟默认是打开的
第二步:配置GPIO
第三步:配置SYSCFG
- 配置函数:SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
- 功能:选择中断引脚
第四步:初始化EXTI
- 初始化函数:EXTI_Init();
第五步:配置NVIC
- 1) 设置优先级:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//整个⼯程只设置⼀次
- 2) 初始化:NVIC_Init();
第六步:编写中断函数

#include "stm32f4xx.h" // Device headervoid EXTI3_IRQHandler(void){//判断是否有中断if(EXTI_GetITStatus(EXTI_Line3)==SET){GPIO_SetBits(GPIOF,GPIO_Pin_9);GPIO_SetBits(GPIOF,GPIO_Pin_10);EXTI_ClearITPendingBit(EXTI_Line3);}
}
void EXTI4_IRQHandler(void){//判断是否有中断if(EXTI_GetITStatus(EXTI_Line4)==SET){GPIO_ResetBits(GPIOF,GPIO_Pin_9);GPIO_ResetBits(GPIOF,GPIO_Pin_10);EXTI_ClearITPendingBit(EXTI_Line4);}
}int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);GPIO_InitTypeDef GPIO_InitTypeDefStruct;GPIO_InitTypeDef GPIO_InitTypeDefStruct1;//初始化按键GPIO_InitTypeDefStruct.GPIO_Mode = GPIO_Mode_IN;//GPIO_InitTypeDefStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitTypeDefStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3;GPIO_InitTypeDefStruct.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitTypeDefStruct.GPIO_Speed = GPIO_High_Speed;GPIO_Init(GPIOE,&GPIO_InitTypeDefStruct);//初始化LEDGPIO_InitTypeDefStruct1.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitTypeDefStruct1.GPIO_OType = GPIO_OType_PP;GPIO_InitTypeDefStruct1.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitTypeDefStruct1.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitTypeDefStruct1.GPIO_Speed = GPIO_High_Speed;GPIO_Init(GPIOF,&GPIO_InitTypeDefStruct1);//配置SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource3);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);//EXTI_InitTypeDef EXIT_STRUCT;EXIT_STRUCT.EXTI_Line=EXTI_Line4;EXIT_STRUCT.EXTI_Mode=EXTI_Mode_Interrupt;EXIT_STRUCT.EXTI_Trigger=EXTI_Trigger_Falling;EXIT_STRUCT.EXTI_LineCmd=ENABLE;EXTI_Init(&EXIT_STRUCT);EXTI_InitTypeDef EXIT_STRUCT1;EXIT_STRUCT1.EXTI_Line=EXTI_Line3;EXIT_STRUCT1.EXTI_Mode=EXTI_Mode_Interrupt;EXIT_STRUCT1.EXTI_Trigger=EXTI_Trigger_Falling;EXIT_STRUCT1.EXTI_LineCmd=ENABLE;EXTI_Init(&EXIT_STRUCT1);//设置中断分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef nvic_struct;nvic_struct.NVIC_IRQChannel=EXTI4_IRQn;nvic_struct.NVIC_IRQChannelPreemptionPriority=0;nvic_struct.NVIC_IRQChannelSubPriority=1;nvic_struct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&nvic_struct);NVIC_InitTypeDef nvic_struct1;nvic_struct1.NVIC_IRQChannel=EXTI3_IRQn;nvic_struct1.NVIC_IRQChannelPreemptionPriority=1;nvic_struct1.NVIC_IRQChannelSubPriority=2;nvic_struct1.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&nvic_struct1);while(1){EXTI3_IRQHandler();EXTI4_IRQHandler();}
}
相关文章:
94.STM32外部中断
目录 1.什么是 NVIC? 2.NVIC寄存器 3.中断优先级 4.NVIC的配置 设置中断分组编辑 配置某一个中断的优先级 5.什么是EXTI 6.EXTI和NVIC之间的关系 7.SYSCFG 的介绍 1.什么是 NVIC? NVIC是一种中断控制器,主要用于处理 ARM Cort…...
【Linux】快速上手自动化构建工具make/makefile
👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.什么是make / makefile 2…...
HarmonyOS
基本概念 1、ARKTS是由ArkUI框架提供,它是声明式UI 2、声明式UI的思想:- 关心描述UI的呈现结果,而不关心过程;- 状态驱动视图更新自定义组件的组成 关键字说明举例struct声明组件名struct ToDolist 代办组件EntryComponent装饰…...
Docker安装Oracle18c 坑已排完,放心食用
Docker安装Oracle18c 坑已排完,放心食用 0、有问题可邮件我1、拉取 oracle18c 镜像, 推荐使用 zhengqing版本的镜像2、启动容器3、等待容器启动完成, 这一步很慢很慢, 别着急4、进入容器5、修改管理员密码6、查看并设置环境变量7、设置监听模式支持以SID方式连接PDB数据库8、使…...
2023年第十二届数学建模国际赛小美赛C题雪崩防范求解分析
2023年第十二届数学建模国际赛小美赛 C题 雪崩防范 原题再现: 雪崩是极其危险的现象。现在,我们对雪崩是如何形成的已经有了很好的理解,但是我们还不能详细地预测雪崩发生的原因、时间和地点。村庄和道路可以通过各种方式防止雪崩。避免在脆…...
Nginx Openresty通过Lua+Redis 实现动态封禁IP
需求 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单中的 IP ,我们将拒绝提供服务。并且可以设置封禁失效时间 环境准备 linux version: centos7 / ubuntu 等 redis version: 5.0.5 nginx version: nginx…...
.Net 字符集与编解码
0 .NET 字符集编解码 .Net 内部使用的字符集是Unicode,如果需要编码为其他诸如GBK、UTF8编码,可以通过Encoding 类来实现。 using System.Text;void PrintBytes(byte[] bytes) {foreach (var b in bytes){Console.Write("{0:X} ", b);}Conso…...
Spinnaker 基于 jenkins 触发部署
jenkins job 触发部署 将 Jenkins 设置为 Spinnaker 中的持续集成 (CI) 系统可让您使用 Jenkins 触发管道、向管道添加 Jenkins 阶段或向管道添加脚本阶段。 前置要求: 已在kubernetes中部署spinnaker已准备可用的jenkins实例 启用 jenkins触发器 官方文档&…...
FLASK博客系列6——数据库之谜
我们上一篇已经实现了简易博客界面,你还记得我们的博客数据是自己手动写的吗?但实际应用中,我们是不可能这样做的。大部分程序都需要保存数据,所以不可避免要使用数据库。我们这里为了简单方便快捷,使用了超级经典的SQ…...
Clickhouse UPDATE 和 DELETE操作
历史: 在OLAP数据库中,可变数据(Mutable data)通常是不被欢迎的,Clickhouse也是如此,早期版本不支持UPDATE和DELTE操作。在Clickhouse 1.1.54388版本之后才支持UPDATE和DELETE操作,适用于Merge…...
golang channel执行原理与代码分析
使用的go版本为 go1.21.2 首先我们写一个简单的chan调度代码 package mainimport "fmt"func main() {ch : make(chan struct{})go func() {ch <- struct{}{}ch <- struct{}{}}()fmt.Println("xiaochuan", <-ch)data, ok : <-chfmt.Println(&…...
OpenCvSharp从入门到实践-(04)色彩空间
目录 1、GRAY色彩空间 2、从BGR色彩空间转换到GRAY色彩空间 2.1色彩空间转换码 2.2实例 BGR色彩空间转换到GRAY色彩空间 3、HSV色彩空间 4、从BGR色彩空间转换到HSV色彩空间 4.1色彩空间转换码 4.2实例 BGR色彩空间转换到HSV色彩空间 1、GRAY色彩空间 GRAY色彩空间通常…...
100.有序数组的平方(力扣)
代码解决一 class Solution { public:// 函数接受一个整数数组,返回每个元素平方值排序后的结果vector<int> sortedSquares(vector<int>& nums) {int len nums.size(); // 获取数组的长度vector<int> v; // 创建一个新的数组,用…...
微服务--01--简介、服务拆分原则
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 微服务微服务架构,是服务化思想指导下的一套最佳实践架构方案。服务化,就是把单体架构中的功能模块拆分为多个独立项目。 单体架构微服务架构…...
IntelliJ IDEA安装使用教程
IntelliJ IDEA是一个流行的Java 集成开发环境(IDE),由JetBrains公司开发。它是一款全功能的IDE,支持多种编程语言,如Java、Kotlin、Groovy、Scala、Python、JavaScript、HTML、CSS等等。IntelliJ IDEA 提供了高效的代码…...
校园门禁可视化系统解决方案
随着科技的持续进步,数字化校园在教育领域中的地位日益上升,各种智能门禁、安防摄像头等已遍布校园各个地方,为师生提供安全便捷的通行体验。然而数据收集分散、缺乏管理、分析困难等问题也逐渐出现,在这个数字化环境中࿰…...
rest_framework_django学习笔记一(序列化器)
rest_framework_django学习笔记一(序列化器) 一、引入Django Rest Framework 1、安装 pip install djangorestframework2、引入 INSTALLED_APPS [...rest_framework, ]3、原始RESTful接口写法 models.py from django.db import models 测试数据 仅供参考 INSERT INTO de…...
面试题:什么是负载均衡?常见的负载均衡策略有哪些?
文章目录 一、负载均衡二、负载均衡模型分类三、CDN负载均衡四、LVS负载均衡4.1 LVS 支持的三种模式4.1.1 DR 模式4.1.2 TUN 模式4.1.3 NAT 模式 4.2 LVS 基于 Netfilter 的框架实现 五、负载均衡策略是什么六、常用负载均衡策略图解6.1 轮询6.2 加权轮询6.3 最少连接数6.4 最快…...
精通Git(第2版)读书笔记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言第 1章 入门 11.1 关于版本控制 11.1.1 本地版本控制系统 1 第 2章 Git基础 132.1 获取Git仓库 132.1.1 在现有中初始化Git仓库 132.1.2 克隆现有仓库 14 2.2 在…...
XUbuntu22.04之OBS30.0设置录制音频降噪(一百九十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
