STM32——中断

总:STM32——学习总纲

一、什么是中断

1.1 作用与意义

1.2 STM32 GPIO 外部中断简图

二、NVIC

2.1 NVIC 基本概念

Nested vectored interrupt controller,嵌套向量中断控制器,属于内核(M3、M4、M7)

用不到很多的优先级,允许厂商裁剪 

内核中断、外部中断,都有其对应的中断服务函数,是中断的入口。被定义在中断向量表中。

 

2.1.1 中断向量表

STM32 是 32位单片机每一次取地址32位,也就是4byte。

main函数优先级最低。

STM32F1参考手册:

2.2 NVIC 相关寄存器 

2.3 NVIC 工作原理

  

2.4 STM32 中断优先级基本概念

 

2.5 STM32 中断优先级分组

IPR寄存器只是用高四位 [7:4]分配优先级。x位表示 2^x 个优先级。

举例:

2.6 STM32 NVIC使用

步骤操作寄存器HAL库
1设置中断分组AIRCR[10:8]HAL_NVIC_SetPriorityGrouping
2设置中断优先级IPRx [7:4]HAL_NVIC_SetPriority
3使能中断ISERxHAL_NVIC_EnableIRQ

除了这三个HAL库函数,还有其他不常用的NVIC函数。

一般在HAL_Init() 函数中设置分组2:NVIC_PRIORITYGROUP_2。

/*** @brief  This function is used to initialize the HAL Library; it must be the first*         instruction to be executed in the main program (before to call any other*         HAL function), it performs the following:*           Configure the Flash prefetch.*           Configures the SysTick to generate an interrupt each 1 millisecond,*           which is clocked by the HSI (at this stage, the clock is not yet*           configured and thus the system is running from the internal HSI at 16 MHz).*           Set NVIC Group Priority to 4.*           Calls the HAL_MspInit() callback function defined in user file*           "stm32f1xx_hal_msp.c" to do the global low level hardware initialization** @note   SysTick is used as time base for the HAL_Delay() function, the application*         need to ensure that the SysTick time base is always set to 1 millisecond*         to have correct HAL operation.* @retval HAL status*/
HAL_StatusTypeDef HAL_Init(void)
{/* Configure Flash prefetch */
#if (PREFETCH_ENABLE != 0)
#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || \defined(STM32F102x6) || defined(STM32F102xB) || \defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \defined(STM32F105xC) || defined(STM32F107xC)/* Prefetch buffer is not available on value line devices */__HAL_FLASH_PREFETCH_BUFFER_ENABLE();
#endif
#endif /* PREFETCH_ENABLE *//* Set Interrupt Group Priority */HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);/* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */HAL_InitTick(TICK_INT_PRIORITY);/* Init the low level hardware */HAL_MspInit();/* Return function status */return HAL_OK;
}
/*** @brief  Sets the priority grouping field (preemption priority and subpriority)*         using the required unlock sequence.* @param  PriorityGroup: The priority grouping bits length. *         This parameter can be one of the following values:*         @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority*                                    4 bits for subpriority*         @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority*                                    3 bits for subpriority*         @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority*                                    2 bits for subpriority*         @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority*                                    1 bits for subpriority*         @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority*                                    0 bits for subpriority* @note   When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. *         The pending IRQ priority will be managed only by the subpriority. * @retval None*/
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
/*** @brief  Sets the priority of an interrupt.* @param  IRQn: External interrupt number.*         This parameter can be an enumerator of IRQn_Type enumeration*         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xx.h))* @param  PreemptPriority: The preemption priority for the IRQn channel.*         This parameter can be a value between 0 and 15*         A lower priority value indicates a higher priority * @param  SubPriority: the subpriority level for the IRQ channel.*         This parameter can be a value between 0 and 15*         A lower priority value indicates a higher priority.          * @retval None*/
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)

IRQn_Type:是中断号枚举类型,对于中断向量表中断位置(STM32f1参考手册)。

PreemptPriority:抢占优先级

SubPriority:响应优先级

/*** @brief  Enables a device specific interrupt in the NVIC interrupt controller.* @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()*         function should be called before. * @param  IRQn External interrupt number.*         This parameter can be an enumerator of IRQn_Type enumeration*         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))* @retval None*/
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)

三、EXTI

3.1 EXTI 基本概念


3.1.1 简介

External interrupt/event Controller,外部中断事件控制器

在H7中,称为 Extended interrupt/event Controller,扩展中断事件控制器。

包含20个产生 事件/中断请求 的边沿检测器,即总共:20条 EXTI 线(F1)

 3.1.2 中断和事件的理解:

中断:要进入NVIC,有相应的中断服务函数,需要CPU处理。

事件:不进入NVIC,仅用于内部硬件自动控制,如 :TIM、DMA、ADC。

中断是计算机或单片机在执行程序时,因突发事件(如硬件信号、紧急任务等)暂停当前操作,转去处理新事件,完成后自动返回原程序继续执行的过程。

事件是 STM32 中实现硬件级快速响应的机制,适用于无需 CPU 干预的自动控制场景。

3.1.3 EXTI 支持的外部中断/事件请求

互联性的F1系列才包含以太网,所以非互联性STM32只有19条 EXTI 线(F1),不包含EXTI线19,以太网唤醒事件。

EXTI线16~...是内部中断/事件

学习中断的主要任务是学习 EXTI线 0~15。

3.2 EXTI 主要特性

 挂起状态位是针对 中断 来说的,有一个寄存器进行选择。

  

 3.3 EXTI 工作原理(F1)

主要使用 四个寄存器,一般不使用 软件触发

STM31F1xxx参考手册

 EXTI_RTSR 上升沿触发选择寄存器

(Rise Trigger Select Register)

EXTI_FTSR 下降沿触发选择寄存器

(Fall Trigger Select Register)

双边沿触发设置

双边沿则控制对应位的Fall&Rise寄存器位都置1,允许EXTI输入线x双边沿触发。

EXTI_IMR    中断屏蔽寄存器

(Interrupt Mask Register)

EXTI_PR      请求挂起寄存器

(Pending Request Register)

一般使用写入 ‘1’的方式清除这个寄存器,后边一个办法不常用。

3.4 F4/F7参考F1,H7 EXTI工作原理见B站视频

四、EXTI 与 IO 的映射关系

4.1 AFIO 简介(F1)

内容寄存器说明
1调试IO配置AFIO_MAPR[26:24]配置JTAG/SWD的开关状态。可不关注
2重映射配置AFIO_MAPR部分外设IO重映射配置,F1中并不是所有的IO都有重映射功能。可不关注
3外部中断配置*AFIO_EXTICR 1~4配置EXTI中断线 0~15 对应到具体那个IO。重点

特别注意:

配置AFIO寄存器之前要使能AFIO时钟,方法如下:

__HAL_RCC_AFIO_CLK_ENABLE();  对应RCC_APB2ENR寄存器位0。参考手册8.4.3、8.4.6

4.2 SYSCFG 简介(F4/F7/H7 使用,见B站)

【【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式】第60讲

4.3 EXTI 与 IO 对应关系*

4.3.1 理论对应关系

右列 0 称为引脚号,中间A~K称为 IO分组号。

EXTI0 表示对应 引脚号为0 的 IO。

也就是说,EXTI0 如果被控制对应 PA0,那么别的 Px0 的IO就不能与EXTI0 对应了

EXTIx 输入线只能一对一对应 IO。

参考手册 9.2.5

4.3.2 AFIO寄存器配置关系(F1)

一个AFIO外部中断配置寄存器可控制4条 EXTI线。

这样的寄存器有四个,,总共可配置 16条 EXTI线对应 16个 IO。

五、如何使用中断*

5.1 中断一图流

在本节中,主要学习GPIO外部中断,外设中断由外设本身配置,不由STM32寄存器配置。

5.2 STM32 EXTI的配置步骤(GPIO外部中断)

步骤作用HAL库
1使能GPIO时钟使能GPIO时钟
2设置GPIO输入模式上、下拉/浮空输入HAL_GPIO_Init
3使能 AFIO(F1)/ SYSCFG(F4/F7/H7)设置AFIO/SYSCFG 时钟开启寄存器
4设置EXTI和IO对应关系选择 PAx~PKx 一对一对应EXTI的x线,寄存器:AFIO_EXTICR/SYSCFG_EXTICR
5设置EXTI屏蔽,上、下沿设置EXTI对应通道的屏蔽和上升沿、下降沿触发,寄存器:EXTI_IMR、EXTI_RTSR、EXTI_FTSR
6设置NVIC见 2.6 STM32 NVIC使用
7设计中断服务函数编写对应中断的中断服务函数!需要清除中断标志!

5.3 SMT32 EXTI 的HAL库设置步骤(GPIO外部中断)

步骤HAL库
1 使能GPIO时钟__HAL_RCC_GPIOx_CLK_ENABLE
2GPIO/AFIO(SYSCFG)/EXTIHAL_GPIO_Init 一步到位配置
3设置中断分组

HAL_NVIC_SetPriorityGrouping 此函数只需要配置一次

4设置中断优先级HAL_NVIC_SetPriority
5使能中断HAL_NVIC_EnableIRQ
6设计中断服务函数

编写 EXTIx_IRQHandler,清中断标志

STM32仅有7个外部中断服务函数,在.s文件中断向量表定义

EXTI 0~4:5条EXTI线单独的中断服务函数

EXTI 9_5:5~8EXTI线共用一个中断服务函数

EXTI 15_10: 10~15EXTI线共用一个中断服务函数

六、通用外设驱动模型

在此模型中,GPIO外部中断只使用了1,4两个步骤。

七、HAL库中断回调处理机制介绍

八、编程实战

通过外部中断控制一个灯亮灭

IO模式设置选择

PA0 按下VCC3.3V 高电平,上升沿触发,不按下需要一个下拉电阻,保持低电平,才有上升沿。

PE2.3.4 按下GND 低电平,下降沿触发,不按下需要一个上拉电阻,保持高电平,才有下降沿。

工程:【免费】stm32F1nvicexperiment资源-CSDN下载

控制不同的优先级

exti.c


#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/BEEP/beep.h"
#include "./BSP/KEY/key.h"
#include "./BSP/EXTI/exti.h"/*** @brief       KEY0 外部中断服务程序* @param       无* @retval      无*/
void KEY0_INT_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(KEY0_INT_GPIO_PIN);         /* 调用中断处理公用函数 清除KEY0所在中断线 的中断标志位 */__HAL_GPIO_EXTI_CLEAR_IT(KEY0_INT_GPIO_PIN);         /* HAL库默认先清中断再处理回调,退出时再清一次中断,避免按键抖动误触发 */
}/*** @brief       KEY1 外部中断服务程序* @param       无* @retval      无*/
void KEY1_INT_IRQHandler(void)
{ HAL_GPIO_EXTI_IRQHandler(KEY1_INT_GPIO_PIN);         /* 调用中断处理公用函数 清除KEY1所在中断线 的中断标志位,中断下半部在HAL_GPIO_EXTI_Callback执行 */__HAL_GPIO_EXTI_CLEAR_IT(KEY1_INT_GPIO_PIN);         /* HAL库默认先清中断再处理回调,退出时再清一次中断,避免按键抖动误触发 */
}/*** @brief       WK_UP 外部中断服务程序* @param       无* @retval      无*/
void WKUP_INT_IRQHandler(void)
{ HAL_GPIO_EXTI_IRQHandler(WKUP_INT_GPIO_PIN);        /* 调用中断处理公用函数 清除KEY_UP所在中断线 的中断标志位,中断下半部在HAL_GPIO_EXTI_Callback执行 */__HAL_GPIO_EXTI_CLEAR_IT(WKUP_INT_GPIO_PIN);        /* HAL库默认先清中断再处理回调,退出时再清一次中断,避免按键抖动误触发 */
}/*** @brief       中断服务程序中需要做的事情在HAL库中所有的外部中断服务函数都会调用此函数* @param       GPIO_Pin:中断引脚号* @retval      无*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{delay_ms(20);      /* 消抖 */switch(GPIO_Pin){case KEY0_INT_GPIO_PIN:if (KEY0 == 0){LED0_TOGGLE();  /* LED0 状态取反 */ LED1_TOGGLE();  /* LED1 状态取反 */ }break;case KEY1_INT_GPIO_PIN:if (KEY1 == 0){LED0_TOGGLE();  /* LED0 状态取反 */ }break;case WKUP_INT_GPIO_PIN:if (WK_UP == 1){BEEP_TOGGLE();  /* 蜂鸣器状态取反 */ }break;}
}/*** @brief       外部中断初始化程序* @param       无* @retval      无*/
void extix_init(void)
{GPIO_InitTypeDef gpio_init_struct;KEY0_GPIO_CLK_ENABLE();                                  /* KEY0时钟使能 */KEY1_GPIO_CLK_ENABLE();                                  /* KEY1时钟使能 */WKUP_GPIO_CLK_ENABLE();                                  /* WKUP时钟使能 */gpio_init_struct.Pin  = KEY0_INT_GPIO_PIN;gpio_init_struct.Mode = GPIO_MODE_IT_FALLING;            /* 下升沿触发 */gpio_init_struct.Pull = GPIO_PULLUP;HAL_GPIO_Init(KEY0_INT_GPIO_PORT, &gpio_init_struct);    /* KEY0配置为下降沿触发中断 */gpio_init_struct.Pin  = KEY1_INT_GPIO_PIN;gpio_init_struct.Mode = GPIO_MODE_IT_FALLING;            /* 下升沿触发 */gpio_init_struct.Pull = GPIO_PULLUP;HAL_GPIO_Init(KEY1_INT_GPIO_PORT, &gpio_init_struct);    /* KEY1配置为下降沿触发中断 */gpio_init_struct.Pin  = WKUP_INT_GPIO_PIN;gpio_init_struct.Mode = GPIO_MODE_IT_RISING;             /* 上升沿触发 */gpio_init_struct.Pull = GPIO_PULLDOWN;HAL_GPIO_Init(WKUP_GPIO_PORT, &gpio_init_struct);        /* WKUP配置为下降沿触发中断 */HAL_NVIC_SetPriority(KEY0_INT_IRQn, 0, 2);               /* 抢占0,子优先级2 */HAL_NVIC_EnableIRQ(KEY0_INT_IRQn);                       /* 使能中断线4 */HAL_NVIC_SetPriority(KEY1_INT_IRQn, 1, 2);               /* 抢占1,子优先级2 */HAL_NVIC_EnableIRQ(KEY1_INT_IRQn);                       /* 使能中断线3 */HAL_NVIC_SetPriority(WKUP_INT_IRQn, 2, 2);               /* 抢占2,子优先级2 */HAL_NVIC_EnableIRQ(WKUP_INT_IRQn);                       /* 使能中断线0 */
}

exti.h


#ifndef __EXTI_H
#define __EXTI_H#include "./SYSTEM/sys/sys.h"/******************************************************************************************/
/* 引脚 和 中断编号 & 中断服务函数 定义 */ #define KEY0_INT_GPIO_PORT              GPIOE
#define KEY0_INT_GPIO_PIN               GPIO_PIN_4
#define KEY0_INT_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOE_CLK_ENABLE(); }while(0)   /* PE口时钟使能 */
#define KEY0_INT_IRQn                   EXTI4_IRQn
#define KEY0_INT_IRQHandler             EXTI4_IRQHandler#define KEY1_INT_GPIO_PORT              GPIOE
#define KEY1_INT_GPIO_PIN               GPIO_PIN_3
#define KEY1_INT_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOE_CLK_ENABLE(); }while(0)   /* PE口时钟使能 */
#define KEY1_INT_IRQn                   EXTI3_IRQn
#define KEY1_INT_IRQHandler             EXTI3_IRQHandler#define WKUP_INT_GPIO_PORT              GPIOA
#define WKUP_INT_GPIO_PIN               GPIO_PIN_0
#define WKUP_INT_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)   /* PA口时钟使能 */
#define WKUP_INT_IRQn                   EXTI0_IRQn
#define WKUP_INT_IRQHandler             EXTI0_IRQHandler/******************************************************************************************/void extix_init(void);  /* 外部中断初始化 */#endif

main.c


#include "./stm32f1xx_it.h"
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/BEEP/beep.h"
#include "./BSP/EXTI/exti.h"int main(void)
{HAL_Init();                            /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9);    /* 设置时钟, 72Mhz */delay_init(72);                        /* 延时初始化 */usart_init(115200);                    /* 串口初始化为115200 */led_init();                            /* 初始化LED */beep_init();                           /* 初始化蜂鸣器 */extix_init();                          /* 初始化外部中断输入 */LED0(0);                               /* 先点亮红灯 */while (1){printf("OK\r\n");delay_ms(1000);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95357.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DVWA靶场通关笔记-Weak Session IDs (Impossible级别)

目录 一、Session ID 二、源码分析 1、index.php 2、impossible.php 三、Weak Session IDs安全级别对比 四、impossible防范方法分析 1、高随机性会话 ID 生成 2、严格的 Cookie 作用域限制 3、安全的传输与存储控制期 本系列为通过《DVWA靶场通关笔记》的Weak Sessio…

SyncBack 备份同步软件: 使用 FTPS、SFTP 和 HTTPS 安全加密传输文件

传输加密是使用安全连接在网络中传输数据(例如文件)的过程。TLS(传输层安全)、SSL(安全套接字层)、SSH(安全套接字外壳)、HTTPS(基于 SSL/TLS 的超文本传输协议&#xff…

保健品跨境电商:如何筑牢产品质量与安全防线?

保健品跨境电商:如何筑牢产品质量与安全防线?在保健品跨境电商领域,“质量与安全”是消费者信任的基石,也是品牌长期发展的生命线。从海外工厂生产到国内消费者手中,产品需经历“跨国运输、清关核验、仓储配送”多环节…

手把手教你搭建 UDP 多人聊天室(附完整源码)

一、项目介绍 本文将分享一个基于 UDP 协议的简易多人聊天室项目,包含服务器端和客户端的完整实现。该聊天室支持多客户端同时连接,能实现消息群发、用户加入 / 退出通知等核心功能,适合作为网络编程入门实践案例。项目采用 C 语言开发…

Vue基础知识-使用监视属性watch和计算属性computed实现列表过滤+排序

一、完整源码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src…

自动化运维-ansible中的管理机密

自动化运维-ansible中的管理机密 一、Ansible Vault 在自动化配置管理中&#xff0c;直接以纯文本形式存储密码、API密钥、证书等敏感信息是极大的安全漏洞。Ansible Vault 正是为了解决这一问题而设计的核心功能 Ansible Vault 是 Ansible 的一个核心功能&#xff0c;它允许用…

UFUNCTION C++ 的再次理解

一.UFUNCTION 格式和属性也比较像&#xff0c;两部分 函数说明符&#xff0c;和元数据说明符UFUNCTION不仅能 控制对蓝图公开&#xff0c;还能与 绑定委托&#xff0c;用户输入,网络回调功能相关联&#xff0c;而且还能创建自己控制带命令二.函数说明符控制 &#xff0c;函数在…

《论文阅读》从心到词:通过综合比喻语言和语义上下文信号产生同理心反应 2025 ACL findings

《论文阅读》从心到词:通过综合比喻语言和语义上下文信号产生同理心反应 2025 ACL findings 前言 创新点 形象语言 (Figurative Language) 语义上下文信号(Semantic Context Signals) 模型架构 情绪原因标注 形象语言元数据获取 共情回复生成 实验结果 总结 趋势 前言 亲…

MySQL内置的各种单行函数

精选专栏链接 &#x1f517; MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅&#xff0c;点赞&#xff0b;关注&#xff0c;每日精进1%&#xff0c;与百万开发者共攀技术珠峰 更多内容持续更新中&#xff01;希望能给大家带来…

Python OpenCV图像处理与深度学习:Python OpenCV视频处理入门

视频处理基础&#xff1a;掌握OpenCV视频操作 学习目标 通过本课程&#xff0c;学员们将学习如何使用Python和OpenCV库来处理视频文件&#xff0c;包括读取视频、捕获摄像头视频流、处理视频帧以及保存处理后的视频&#xff0c;同时&#xff0c;能够独立完成基本的视频处理任务…

AI 赋能 Java 开发效率:全流程痛点解决与实践案例(四)

文档与注释自动化&#xff1a;从 “手动撰写” 到 “实时同步”&#xff0c;降低维护成本 &#x1f4c4; Java 开发强调 “文档先行”&#xff0c;Javadoc 注释、架构文档、接口文档是项目维护的重要资产。但手动撰写文档存在两大痛点&#xff1a;一是耗时&#xff08;开发者平…

【机器学习学习笔记】pandas基础

零基础入门 Pandas&#xff1a;数据处理的 "万能工具"如果你是刚接触数据分析的小白&#xff0c;一定听过 "Pandas" 这个名字。简单说&#xff0c;Pandas 是 Python 中专门用来处理数据的工具库&#xff0c;就像 Excel 的 "高级版"—— 能更快、…

(Mysql)MVCC、Redo Log 与 Undo Log

1. MVCC&#xff08;多版本并发控制&#xff09;概念 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种数据库并发控制机制&#xff0c;用于解决 读写冲突&#xff0c;提高数据库并发性能。MySQL InnoDB 存储引擎使用 MVCC 来实现 非阻塞读&#xff08;即…

OpenCV-Python Tutorial : A Candy from Official Main Page(五)

4.5FAST Algorithm for Corner Detection 4.5.1FAST算法 我们已了解多种特征检测器&#xff0c;其中许多效果出色。但从实时应用的角度来看&#xff0c;它们的速度仍不够快。一个典型例子是计算资源有限的SLAM&#xff08;同步定位与建图&#xff09;移动机器人。 为解决此问…

LINUX 91 SHELL:删除空文件夹 计数

问题 [rootweb ~]# find -type f -exec echo "file:{}" $path; find: 遗漏“-exec”的参数 您在 /var/spool/mail/root 中有邮件[rootweb ~]# $path/root -bash: /root: 没有那个文件或目录 您在 /var/spool/mail/root 中有新邮件 [rootweb ~]# path/root [rootweb ~…

视频软解码技术详解:原理、应用与未来发展

视频软解码的基本原理 概念解析&#xff1a;CPU主导的通用解码方式 视频软解码是一种完全依赖通用CPU执行解码算法的视频还原技术&#xff0c;其核心特征在于不依赖任何专用硬件模块&#xff0c;而是通过软件程序调用CPU的通用计算能力完成压缩视频数据的解码过程[1][2]。与硬…

线性回归中梯度下降与正规方程以及拟合问题与正则化

线性回归实战指南&#xff1a;从理论到实践 目录 线性回归理论基础机器学习项目开发流程波士顿房价预测实战梯度下降与正规方程模型评估指标拟合问题与正则化总结与展望 1. 线性回归理论基础 1.1 什么是线性回归&#xff1f; 线性回归是一种监督学习算法&#xff0c;用于预…

为什么46.1k程序员都在用这个AI绘画神器?我体验一周后终于明白了

大家好&#xff0c;我是顾北&#xff0c;一名AI应用探索者&#xff0c;也是GitHub开源项目收集者。说起AI绘画这事儿&#xff0c;我之前真的是又爱又恨。上个月想给朋友搞张生日贺图&#xff0c;结果在Stable Diffusion WebUI里折腾了大半天。采样步数&#xff1f;CFG比例&…

Java基础第8天总结(map遍历、Stream流)

选中一部分代码&#xff0c;然后CTRLALTT&#xff0c;可以在外面套上while循环,try..catch之类的小案例&#xff1a;电影信息管理模块&#xff1a;用户可以上架、查询、下架、下架某个主演参演的电影package Demo;import lombok.AllArgsConstructor; import lombok.Data; impor…

总线矩阵的原理

总线矩阵&#xff08;Bus Matrix&#xff09;是多主设备共享多从设备的智能连接与仲裁核心&#xff0c;本质是一个“灵活的交叉开关阵列”&#xff0c;用于解决多个主设备&#xff08;如CPU、DMA、GPU&#xff09;同时访问多个从设备&#xff08;如内存、外设、存储芯片&#x…