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

4.STM32F407ZGT6-独立看门狗

参考:
1.正点原子

前言:
看门狗是一个项目或者产品中肯定需要的功能部分,必须会。常见的两种看门狗类型,独立看门狗和窗口看门狗,各有使用的场景。总结记录独立看门狗一些知识点:
1.独立看门狗的概念。(其他的芯片,独立看门狗大致也是这样的作用和使用方式。)
2.使用STM32CubeMX和HAL库配置使用独立看门狗。

18.1 IWDG 简介

独立看门狗(Independent Watchdog,独立看门狗)本质上是一个定时器,这个定时器有一个输出端,可以输出复位信号。该定时器是一个 12 位的递减计数器,当计数器的值减到 0 的时候,就会产生一个复位信号。如果在计数没减到 0 之前,重置计数器的值的话,那么就不会产生复位信号,这个动作我们称为喂狗。
看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍然可以工作。

18.1.1 IWDG 框图

下面先来学习 IWDG 框图,通过学习 IWDG 框图会有一个很好的整体掌握,同时对之后的编程也会有一个清晰的思路。
在这里插入图片描述

从 IWDG 框图整体认知就是,IWDG 有一个输入(时钟 LSI),经过一个 8 位的可编程预分频器提供时钟给一个 12 位递减计数器,满足条件就会输出一个复位信号(iwdg1_out_rst)。IWDG内部输入/输出信号如下表:
在这里插入图片描述

STM32F407 的独立看门狗由内部专门的 32Khz 低速时钟(lsi_ck)驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 32Khz,而是在 17~47Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 32Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

18.1.2 IWDG 寄存器

IWDG 的框图很简单,用到的寄存器也不多。我们主要用到其中 3 个寄存器:

⚫ 关键字寄存器(IWDG_KR)
关键字寄存器可以看作是独立看门狗的控制寄存器,其描述如图 18.1.2.1 所示:
在这里插入图片描述

在关键字寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
无论何时,只要关键字寄存器 IWDG_KR 中被写入 0xAAAA,IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位。
IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入 0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA)也会启动写保护功能。

⚫ 预分频寄存器(IWDG_PR
预分频寄存器描述如图 18.1.2.2 所示:
在这里插入图片描述

该寄存器用来设置看门狗时钟(LSI)的分频系数,最低为 4,最高为 256,该寄存器是一个 32 位的寄存器,但是我们只用了最低 3 位,其他都是保留位。

⚫ 重载寄存器(IWDG_ RLR)
在这里插入图片描述

该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32 位寄存器,只有低 12 位是有效的。

18.2 硬件设计

1. 例程功能
在配置看门狗后,LED_0 和 LED_1 将常亮,如果串口有输入“cmd_feed_dog”,就喂狗,只要串口输入“cmd_feed_dog”命令的周期小于500ms(测试小于450ms都是可以成功喂狗的. 看门狗溢出周期是1s,外部喂狗频率时1/2 s,就基本可以及时喂狗),看门狗就一直不会产生复位,保持 LED_0 和 LED_1 的常亮,一旦超过看门狗定溢出时间(Tout)还没输入“cmd_feed_dog”,那么将会导致程序重启,这将导致 LED_0 和 LED_1 熄灭一次。

2. 硬件资源
1)LED 灯
LED_0 – PF9
LED_1 – PF10
2)独立看门狗

3. 原理图
独立看门狗实验的核心是在 STM32F407 内部进行,并不需要外部电路。但是考虑到指示当前状态和喂狗等操作,我们需要 2 个 IO 口,用来指示程序是否重启。喂狗我们采用串口输入“cmd_feed_dog”,而程序重启,则是通过 LED_0 和 LED_1 来指示的。

18.3 程序设计

18.3.1 IWDG 的 HAL 库驱动

IWDG 在 HAL 库中的驱动代码在 stm32f4xx_hal_iwdg.c 文件(及其头文件)中。

1. HAL_IWDG_Init 函数
IWDG 的初始化函数,其声明如下:
HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);
⚫ 函数描述:
用于初始化 IWDG。
⚫ 函数形参:
形参 1 是 IWDG 句柄,IWDG_HandleTypeDef 结构体类型,其定义如下:

typedef struct
{IWDG_TypeDef *Instance; /* IWDG 寄存器基地址 */IWDG_InitTypeDef Init; /* IWDG 初始化参数 */
}IWDG_HandleTypeDef;

1)Instance:指向 IWDG 寄存器基地址。
2)Init:IWDG 初始化结构体,用于配置计数器的相关参数。
IWDG_InitTypeDef 这个结构体类型定义如下:

typedef struct
{uint32_t Prescaler; /* 预分频系数 */uint32_t Reload;    /* 重装载值 */
} IWDG_InitTypeDef;

1)Prescaler:预分频系数,IWDG_PRESCALER_4 到 IWDG_PRESCALER_256。
2)Reload:重装载值,范围:0 到 0x0FFF。
⚫ 函数返回值:
HAL_StatusTypeDef 枚举类型的值。

2. HAL_IWDG_Refresh 函数
HAL_IWDG_Refresh 函数是独立看门狗的喂狗函数。其声明如下:
HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);
⚫ 函数描述:
用于把重装载寄存器的值重载到计数器中,喂狗,防止 IWDG 复位。
⚫ 函数形参:
形参 1 是 IWDG_HandleTypeDef 结构体指针类型的 IWDG 句柄。
⚫ 函数返回值:
HAL_StatusTypeDef 枚举类型的值。

独立看门狗配置步骤

1)取消寄存器写保护,设置看门狗预分频系数和重装载值
首先我们必须取消 IWDG_PR 和 IWDG_RLR 寄存器的写保护,这样才可以设置寄存器IWDG_PR 和 IWDG_RLR 的值。取消写保护和设置预分频系数以及重装载值在 HAL 库中是通过函数 HAL_IWDG_Init 实现的。
通过该函数设置看门狗的分频系数,和重装载的值。看门狗的喂狗时间(也就是看门狗溢出时间)的计算方式为:
Tout=((4×2^prer) ×rlr) /32
其中 Tout 为看门狗溢出时间(单位为 ms)。
prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7。
rlr 为看门狗的重装载值(IWDG_RLR 的值)。
比如我们设定 prer 值为 4(4 代表的是 64 分频,HAL 库中可以使用宏定义标识符IWDG_PRESCALER_64),rlr 值为 500,那么就可以得到 Tout=64×500/32=1000ms,这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0xAAAA 到 IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确的32Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。

2)重载计数值喂狗(向 IWDG_KR 写入 0xAAAA)
在 HAL 中重载计数值的函数是 HAL_IWDG_Refresh,该函数的作用是把值 0xAAAA 写入到 IWDG_KR 寄存器,从而触发计数器重载,即实现独立看门狗的喂狗操作。

3)启动看门狗(向 IWDG_KR 写入 0xCCCC)
HAL 库函数里面启动独立看门狗是通过宏定义标识符来实现的:
#define __HAL_IWDG_START(HANDLE)
WRITE_REG((HANDLE)->Instance->KR, IWDG_KEY_ENABLE);
我们只需要调用宏定义标识符__HAL_IWDG_START 即可实现看门狗使能。实际上,当我们调用了看门狗初始化函数 HAL_IWDG_Init 之后,在内部已经调用了该宏启动看门狗。

18.3.3 程序解析

1. IWDG 驱动代码
先看 IWDG的初始化函数,其定义如下:

/**
* @brief 初始化独立看门狗
* @param prer: IWDG_PRESCALER_4~IWDG_PRESCALER_256,对应 4~256 分频
* @arg 分频因子 = 4 * 2^prer. 但最大值只能是 256!
* @param rlr: 自动重装载值,0~0XFFF. 
* @note 时间计算(大概):Tout=((4 * 2^prer) * rlr) / 40 (ms). 
* @retval 无
*/
void MX_IWDG_Init(void)
{/* USER CODE BEGIN IWDG_Init 0 *//* USER CODE END IWDG_Init 0 *//* USER CODE BEGIN IWDG_Init 1 *//* USER CODE END IWDG_Init 1 */hiwdg.Instance = IWDG;hiwdg.Init.Prescaler = IWDG_PRESCALER_64;   /* 设置 IWDG 分频系数 */hiwdg.Init.Reload = 500;                    /* 重装载值 */if (HAL_IWDG_Init(&hiwdg) != HAL_OK){Error_Handler();}/* USER CODE BEGIN IWDG_Init 2 *//* USER CODE END IWDG_Init 2 */}

MX_IWDG_Init 是独立看门狗初始化函数,主要设置预分频数和重装载寄存器的值。通过这两个寄存器,就可以大概知道看门狗复位的时间周期为多少了。
hiwdg.Init.Prescaler = IWDG_PRESCALER_64,即预分频系数为 64。
hiwdg.Init.Reload = 500,即重装载值是 500。
所以可由公式得到 Tout=64×500/32=1000ms,即溢出时间就是 1s。只要你在一秒钟之内,有一次写 0xAAAA 到 IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确的 32Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。

/**
* @brief 喂独立看门狗
* @param 无
* @retval 无
*/
HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
{/* Reload IWDG counter with value defined in the reload register */__HAL_IWDG_RELOAD_COUNTER(hiwdg);/* Return function status */return HAL_OK;
}

只需调用 HAL 库函数 HAL_IWDG_Refresh函数用来喂狗。

2. main.c 代码
在 main.c 里面编写如下代码:

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_IWDG_Init();/* USER CODE BEGIN 2 */HAL_Delay(300);/* 延时300ms再驱动LED。若是不延时,看门狗复位太快,人眼分不清LED是否在闪烁,也就没法方便辨别看门狗的溢出 */HAL_GPIO_WritePin(LED_0_GPIO_Port, LED_0_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin, GPIO_PIN_RESET);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){uart_debug_task();    /*串口数据接收处理*//* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

3.喂狗代码

void uart_debug_task(void)
{uint8_t len;static uint32_t once_flag = 0;uint8_t cmd_buf[64] = {0};uint32_t para_1 = 0;uint32_t para_2 = 0;uint32_t para_3 = 0;uint32_t ret = 0;if (0 == once_flag){once_flag = 1;HAL_UART_Receive_IT(&huart1, (uint8_t *)g_rx1_buffer, RX1BUFFERSIZE); }if (g_usart1_rx_sta & 0x8000)         /* 接收到了数据? */{if (1)//for debug{len = g_usart1_rx_sta & 0x3fff;  /* 得到此次接收到的数据长度 */printf("\r\nThe message you sent is:\r\n");HAL_UART_Transmit(&huart1, (uint8_t*)g_usart1_rx_buf, len, 1000);    /* 发送接收到的数据 */while(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != SET);           /* 等待发送结束 */printf("\r\n");             /* 插入换行 */}ret = sscanf((void*)g_usart1_rx_buf, "%s %d %d %d", cmd_buf, &para_1, &para_2, &para_3);if (1 <= ret){g_usart1_rx_sta = 0;memset((void*)g_usart1_rx_buf, 0, sizeof(g_usart1_rx_buf));printf("cmd:%s, ret:%d\r\n", cmd_buf, ret);uint8_t cmd_1[32] = "cmd_feed_dog";if (0 == strncmp((void*)cmd_1, (void*)cmd_buf, strlen((void*)cmd_1))){HAL_IWDG_Refresh(&hiwdg);        /*喂狗*/printf("feed dog success!!\r\n");}}/* Clear the receiving cache */g_usart1_rx_sta = 0;memset((void*)g_usart1_rx_buf, 0, sizeof(g_usart1_rx_buf));}else{   }return;
}

串口软件周期发送“cmd_feed_dog”命令来喂狗,LED灯就一直保持常亮。超过了500ms(实际是1s,中间有2倍的关系,类似于香农采样定理)周期没有喂狗就会导致LED亮灭一次。
操作效果如下:
在这里插入图片描述

18.4 下载验证

下载代码后,可以看到 LED_0 和 LED_1 不停的闪烁,证明系统在不停的复位,否则 LED_0 和 LED_1 常亮。这时我们串口软件周期发送“cmd_feed_dog”命令来喂狗,可以看到 LED_0 和 LED_1 就常亮了,不会再闪烁。说明我们的实验是成功的。
在这里插入图片描述

18.5 源代码路径

git clone git@gitee.com:xiaoliangliangcong/stm32.git
STM32F407ZGT6/4.IWDG

相关文章:

4.STM32F407ZGT6-独立看门狗

参考&#xff1a; 1.正点原子 前言&#xff1a; 看门狗是一个项目或者产品中肯定需要的功能部分&#xff0c;必须会。常见的两种看门狗类型&#xff0c;独立看门狗和窗口看门狗&#xff0c;各有使用的场景。总结记录独立看门狗一些知识点&#xff1a; 1.独立看门狗的概念。&am…...

RHCE实验-nfs及autofs

本次实验的目的&#xff1a;实现服务端的网络文件共享&#xff08;配置nfs&#xff09;,且实现客户端的自动挂载&#xff08;配置autofs&#xff09; 服务端配置&#xff1a; 关闭防火墙和selinux: 安装软件 [rootlocalhost ~]# yum install nfs-utils -y 创建需要被挂载的目…...

docker代理设置

最近遇到国内镜像无法下载的问题&#xff0c;因此需要配置docker代理来使其能够下载镜像 代理设置方法如下&#xff1a; 编辑 /etc/docker/daemon.json 文件&#xff1a; 配置 HTTP 和 HTTPS 代理&#xff1a; {"proxies": {"http-proxy": "http:/…...

死信交换机

什么是死信&#xff1f;什么是死信交换机&#xff1f; 在MQ中未能成功被消费的消息就被称之为死信&#xff0c;而死信交换机就用于存放死信消息。 消息转变成死信消息的原因&#xff1a; 消息被消费者拒绝或者需要重发&#xff08;nack、reject&#xff09; nack&#xff1a;消…...

cat命令详解

&#x1f3dd;️专栏&#xff1a;https://blog.csdn.net/2301_81831423/category_12872319.html &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” cat 是 Linux/Unix 中的一个非常常用的命令&…...

路由器的转发表

【4-24】 已知路由器R₁ 的转发表如表T-4-24 所示。 表T-4-24 习题4-24中路由器R₁的转发表 前缀匹配 下一跳地址 路由器接口 140.5.12.64/26 180.15.2.5 m2 130.5.8/24 190.16.6.2 ml 110.71/16 ----- m0 180.15/16 ----- m2 190.16/16 ----- ml 默认 11…...

腾讯云AI代码助手编程挑战赛-古诗词学习

一、作品介绍 在科技与文化深度交融的当下&#xff0c;“腾讯云 AI 代码助手编程挑战赛 - 每日古诗词” 宛如一颗璀璨的新星&#xff0c;闪耀登场。它绝非一场普通的赛事&#xff0c;而是一座连接编程智慧与古典诗词韵味的桥梁。 这项挑战赛以独特的视角&#xff0c;将每日古…...

积分系统的设计

1. 目的 学习是需要正反馈的&#xff0c;这样学员才能有源源不断的动力去继续学习。 为了激励学员&#xff0c;我们需要设定一个学习积分的排行榜系统。优秀的学员给予一定的奖励&#xff0c;比如奖励优惠券。大家互相比拼的&#xff0c;刺激学员持续学习&#xff0c;互相卷起…...

功能篇:spring事务配置

在 Java 应用程序中配置事务管理通常涉及使用 Spring 框架&#xff0c;因为 Spring 提供了强大的事务管理抽象&#xff0c;可以简化事务的配置和管理。Spring 支持两种类型的事务管理&#xff1a;编程式事务管理和声明式事务管理。 编程式事务管理 编程式事务管理是通过编写代…...

单元测试概述入门

引入 什么是测试&#xff1f;测试的阶段划分&#xff1f; 测试方法有哪些&#xff1f; 1.什么是单元测试&#xff1f; 单元测试&#xff1a;就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;编写测试代码对其正确性进行测试。 2.为什么要引入单元测试&#x…...

PySpark学习笔记2-RDD算子,RDD持久化

RDD定义 RDD是弹性分布式数据集&#xff0c;是spark中的最基本的数据抽象&#xff0c;里面的元素可以并行计算 RDD的五大特性 RDD是有分区的&#xff0c;它的分区是数据存储的最小单位 RDD的方法会作用在所有分区上 RDD之间是有依赖关系的 KV型的RDD可以有分区器 RDD的分区会尽…...

windows10下安装Microsoft SQL Server 2016

一、下载安装包 网站&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 选择需要的版本&#xff0c;点击详细信息&#xff0c;复制ed2k链接&#xff0c;打开eMule或迅雷&#xff0c;新建下载&#xff0c;粘贴链接&#xff0c;开始下载。 下载好的文件是一个.iso镜像文件。 二、…...

开关不一定是开关灯用 - 命令模式(Command Pattern)

命令模式&#xff08;Command Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;命令设计模式命令设计模式结构图命令设计模式涉及的角色 talk is cheap&#xff0c; show you my code总结 命令模式&#xff08;Command Pattern&#xff09; 命令模式&…...

急速了解什么是GPU服务器

GPU服务器是一种专门配置了高性能图形处理器&#xff08;GPU&#xff09;的服务器&#xff0c;旨在提供高性能计算、深度学习、科学计算等多种场景的计算服务。与传统的CPU服务器相比&#xff0c;GPU服务器在处理并行密集型计算任务时具有显著优势。本文将详细介绍GPU服务器的定…...

word论文排版常见问题汇总

word论文排版常见问题汇总 常用快捷键&#xff1a; Alt F9 正常模式与域代码模式切换 Ctrl F9 插入域代码 F9 刷新域代码显示&#xff0c;要注意选定后刷新才会有效果 word中在当前列表的基础上修改列表 在使用word时&#xff0c;我们会定义一个列表&#xff0c;并将其链接…...

作业:IO:day3

思维导图 使用3语言编写一个简易的界面 界面如下 1&#xff1a;标准输出流 2&#xff1a;标准错误流 3&#xff1a;文件流 要求&#xff1a; 按1的时候&#xff0c;通过printf输出数据&#xff0c; 按2的时候&#xff0c;通过perror输出数据&#xff0c; 按3的时候将输入写入文…...

H266/VVC 帧内预测 PDPC 技术

位置决定的帧内预测组合 PDPC 在 VVC 中&#xff0c;对于帧内预测的 Planar 模式、DC 模式和几种角度模式需要使用 PDPC (position dependent intra prediction combination) 方法进一步处理。 PDPC 用于 DC 模式、Planar 模式、小于等于水平模式(模式 18) 的角度模式、大于等于…...

微信小程序mp3音频播放组件,仅需传入url即可

// index.js // packageChat/components/audio-player/index.js Component({/*** 组件的属性列表*/properties: {/*** MP3 文件的 URL*/src: {type: String,value: ,observer(newVal, oldVal) {if (newVal ! oldVal && newVal) {// 如果 InnerAudioContext 已存在&…...

Hadoop3.x 万字解析,从入门到剖析源码

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

mysql的一些函数及其用法

mysql 1-来自于leetcode1517的题目 表: Users------------------------ | Column Name | Type | ------------------------ | user_id | int | | name | varchar | | mail | varchar | ------------------------已知一个表&#xff0c;它的…...

[java基础]LinkedList源码粗析

LinkedList 的数据结构 实现List、Deque 接口&#xff0c;基于 双向链表实现的列表。与基于数组的 ArrayList 不同&#xff0c;基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque&#xff0c;它提供了 add, offer, remove, poll, …...

基于Spring Boot的海滨体育馆管理系统的设计与实现

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 宠物医院…...

易支付二次元网站源码及部署教程

易支付二次元网站源码及部署教程 引言 在当今数字化时代&#xff0c;二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求&#xff0c;搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程&#xf…...

json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?

在使用 Python 的 json 模块进行序列化时&#xff0c;默认情况下会将中文转换为 Unicode 编码。如果你希望在序列化时保留中文&#xff0c;可以通过设置 ensure_asciiFalse 来实现。 以下是示例代码&#xff1a; import jsondata {"name": "李浩瑞", &q…...

Perl语言的循环实现

Perl语言的循环实现 引言 Perl是一种强大的脚本语言&#xff0c;以其灵活的语法和强大的文本处理能力著称。无论是在系统管理、网络编程&#xff0c;还是在Web应用开发中&#xff0c;Perl都广泛应用于各种领域。循环是编程语言中一个极其重要的概念&#xff0c;它允许程序重复…...

IOMMU PT

什么是 IOMMU PT IOMMU PT&#xff08;Input/Output Memory Management Unit - Pass-Through&#xff09;是一种技术&#xff0c;主要用于虚拟化环境中&#xff0c;特别是在使用直接设备分配&#xff08;也称为设备直通&#xff09;的情况下。这项技术允许虚拟机直接访问物理硬…...

DNS协议漏洞利用实验_hust计算机网络安全实验

文章目录 计算机网络安全实验 DNS协议漏洞利用实验 docker使用 建立实验环境docker常用指令 一些注意事项设置本地 DNS 服务器 配置用户计算机设置本地DNS服务器在本地 DNS 服务器中建一个区域 修改主机文件&#xff08;可略&#xff09;netwox实施DNS的用户响应欺骗攻击netwo…...

深度学习中的卷积和反卷积(二)——反卷积的介绍

1 简介 反卷积&#xff08;deconvolution&#xff09;又称转置卷积&#xff0c;是卷积的拟操作&#xff0c;常用于GAN等模型中。反卷积是上采样的一种&#xff0c;上采样是指将特征图维度恢复到原始图的维度&#xff0c;这种增大维度的过程被称为上采样。上采样可以用插值或反…...

PyCharm 引用其他路径下的文件报错 ModuleNotFound 或报红

PyCharm 中引用其他路径下的文件提示 ModuleNotFound&#xff0c;将被引用目录添加到系统路径&#xff1a; # # 获取当前目录 dir_path os.path.dirname(os.path.realpath(__file__)) # # 获取上级目录 parent_dir_path os.path.abspath(os.path.join(dir_path, os.pardir))…...

【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

​​​​​​​ 目录 一、引言 二、自动语音识别&#xff08;automatic-speech-recognition&#xff09; 2.1 概述 2.2 技术原理 2.2.1 whisper模型 2.2.2 Wav2vec 2.0模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数​​​​​​​ 2.3.2 pipeline对象使用参数…...

Linux 工作队列

系列文章目录 Linux内核学习 Linux 知识&#xff08;1&#xff09; Linux 知识&#xff08;2&#xff09; Linux 工作队列 Linux 内核源代码情景分析&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; 文章目录 系列文章目录综述工作&#xff08;work_…...

程序血缘分析技术在工商银行软件工程中的应用

当前,随着软件领域技术更新换代速度的日益加快,市场需求也变得更加多样化和个性化,业界普遍通过加速产品迭代来满足客户需求,但在此过程中也暴露出一些研发管理痛点问题,如服务和程序类资产信息分散于各个不同的应用和系统中,信息归集费时费力;设计、开发和测试人员无法…...

纯手工(不基于maven的pom.xml、Web容器)连接MySQL数据库的详细过程(Java Web学习笔记)

1 引言 最近读一些Java Web开发类的书籍时&#xff0c;发现书中的连接数据库的过程缺少了一些关键性的过程&#xff0c;这对初学者非常不友好。为此&#xff0c;本文将给出详细的连接MySQL数据库的过程&#xff0c;并且是纯手工&#xff0c;不依赖于pom.xml和Web容器&#xff…...

node-sass@4.14.1报错的最终解决方案分享

输入npm i全安装文件所需的依赖的时候&#xff0c;博主是使用sass去书写的&#xff0c;使用的是node-sass4.14.1和sass-loader7.3.1的版本的&#xff0c;安装的时候老是出现错误&#xff0c; node-sass4.14.1版本不再被支持的原因 node-sass 是一个基于 LibSass 的 Node.js 绑…...

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代&#xff0c;智能聊天助手已然化身成为提升用户体验的关键利器&#xff0c;全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮&#xff0c;我毅然投身于极具挑战性…...

【Linux系列】如何使用 nohup 命令在后台运行脚本

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Web渗透测试之XSS跨站脚本攻击 跨域是什么?同源机制又是什么? cors以及Jsonp是什么 一篇文章给你说明白

目录 Cookie的Httponly属性和逃过方式 浏览器同源机制 cors跨域和jsonp跨域和跨域标签 Cors跨域 - 跨源 Jsonp 跨域 jsonp跨域原理&#xff1a; 说明: Cookie的Httponly属性和逃过方式 Xss攻击手段 最常用的目的获取cookie Cookie中设置了 httponlyTrue 方式js操作获…...

K-Means 聚类算法:用生活场景讲解机器学习的“分组”方法

一、K-Means 算法概述 K-Means 是一种经典的无监督学习聚类算法&#xff0c;目的是将数据集中 n 个样本划分成 K 个簇&#xff08;cluster&#xff09;&#xff0c;每个样本根据其特征被归入与之最接近的簇。简单来说&#xff0c;这就像在超市购物时&#xff0c;顾客会被根据购…...

C语言与ASCII码应用之简单加密

加密是什么&#xff1f;什么是加密通话&#xff1f;用人话说就是一句有含义的话&#xff0c;经过一定的特殊规则把里面的每个字按照这个规则进行改变&#xff0c;但是这个规则只有你和你想让知道这条信息的人知道 今天我们来用ASCII码编写一个简单加密与解密的程序&#xff0c…...

python无需验证码免登录12306抢票 --selenium(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 就在刚刚我抢的票&#xff1a;2025年1月8日…...

[论文阅读]Corpus Poisoning via Approximate Greedy Gradient Descent

Corpus Poisoning via Approximate Greedy Gradient Descent [2406.05087] Corpus Poisoning via Approximate Greedy Gradient Descent 基于近似贪婪梯度下降的语料库投毒 面向检索器的攻击 AGGD 通过从所有符元位置中选择排名最高的符元&#xff0c;而不是从单个随机采样…...

C++—9、如何在Microsoft Visual Studio中调试C++

本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...

《深度剖析:开源与闭源模型,AI舞台上的不同角色》

在人工智能蓬勃发展的当下&#xff0c;模型的选择如同为一场战役挑选合适的武器&#xff0c;至关重要。开源模型与闭源模型作为AI领域的两大阵营&#xff0c;在性能和应用场景上展现出显著差异&#xff0c;深刻影响着开发者、企业以及整个行业的走向。 性能差异&#xff1a;实…...

开源 vGPU 方案 HAMi 解析

开源 vGPU 方案 HAMi 一、k8s 环境下 GPU 资源管理的现状与问题 &#xff08;一&#xff09;资源感知与绑定 在 k8s 中&#xff0c;资源与节点紧密绑定。对于 GPU 资源&#xff0c;我们依赖 NVIDIA 提供的 device-plugin 来进行感知&#xff0c;并将其上报到 kube-apiserver…...

Unity 大地图功能 离线瓦片地图

不使用第二个摄像机实现类似开放世界的大地图功能。 功能如下&#xff1a; 按下M键打开/关闭大地图功能 打开大地图时&#xff0c;默认玩家位置居中 大地图支持拖拽&#xff0c;可调节拖拽速度&#xff0c;支持XY轴翻转 支持大地图设置边缘偏移量 可设置是否启动拖拽边界 …...

【计算机网络】什么是网关(Gateway)?

网上冲浪多了&#xff0c;你可以听到过网关&#xff08;Gateway&#xff09;这个词&#xff0c;但是却不太清楚网关&#xff08;Gateway&#xff09;到底是干什么的、负责网络当中的什么任务&#xff0c;本篇文字将会为你介绍网关&#xff08;Gateway&#xff09;的作用&#x…...

AIOps 平台

AIOps&#xff08;Artificial Intelligence for IT Operations&#xff09;平台是一种结合人工智能&#xff08;AI&#xff09;技术和IT运营管理的解决方案&#xff0c;旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…...

使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备

一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB&#xff0c;这里会将创建数据库的代码放到了&#xff0c;将文件复制到data/sql目录中&#xff0c;然后在终端中的项目文件夹中执行&#xff1a; pip install sqlite3现在创建一个名为sqldb的数据库&a…...

TCP与UDP协议

一、主要区别 ① 连接的建立和断开&#xff1a; TCP&#xff08;Transform Control Protocol&#xff09;通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后&#xff0c;TCP提供稳定的数据传输服务。当通信结束时&#xff0c;TCP通过四次…...

【MySQL】MVCC详解, 图文并茂简单易懂

欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...