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, ¶_1, ¶_2, ¶_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-独立看门狗
参考: 1.正点原子 前言: 看门狗是一个项目或者产品中肯定需要的功能部分,必须会。常见的两种看门狗类型,独立看门狗和窗口看门狗,各有使用的场景。总结记录独立看门狗一些知识点: 1.独立看门狗的概念。&am…...
RHCE实验-nfs及autofs
本次实验的目的:实现服务端的网络文件共享(配置nfs),且实现客户端的自动挂载(配置autofs) 服务端配置: 关闭防火墙和selinux: 安装软件 [rootlocalhost ~]# yum install nfs-utils -y 创建需要被挂载的目…...
docker代理设置
最近遇到国内镜像无法下载的问题,因此需要配置docker代理来使其能够下载镜像 代理设置方法如下: 编辑 /etc/docker/daemon.json 文件: 配置 HTTP 和 HTTPS 代理: {"proxies": {"http-proxy": "http:/…...
死信交换机
什么是死信?什么是死信交换机? 在MQ中未能成功被消费的消息就被称之为死信,而死信交换机就用于存放死信消息。 消息转变成死信消息的原因: 消息被消费者拒绝或者需要重发(nack、reject) nack:消…...
cat命令详解
🏝️专栏:https://blog.csdn.net/2301_81831423/category_12872319.html 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 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代码助手编程挑战赛-古诗词学习
一、作品介绍 在科技与文化深度交融的当下,“腾讯云 AI 代码助手编程挑战赛 - 每日古诗词” 宛如一颗璀璨的新星,闪耀登场。它绝非一场普通的赛事,而是一座连接编程智慧与古典诗词韵味的桥梁。 这项挑战赛以独特的视角,将每日古…...
积分系统的设计
1. 目的 学习是需要正反馈的,这样学员才能有源源不断的动力去继续学习。 为了激励学员,我们需要设定一个学习积分的排行榜系统。优秀的学员给予一定的奖励,比如奖励优惠券。大家互相比拼的,刺激学员持续学习,互相卷起…...
功能篇:spring事务配置
在 Java 应用程序中配置事务管理通常涉及使用 Spring 框架,因为 Spring 提供了强大的事务管理抽象,可以简化事务的配置和管理。Spring 支持两种类型的事务管理:编程式事务管理和声明式事务管理。 编程式事务管理 编程式事务管理是通过编写代…...
单元测试概述入门
引入 什么是测试?测试的阶段划分? 测试方法有哪些? 1.什么是单元测试? 单元测试:就是针对最小的功能单元(方法),编写测试代码对其正确性进行测试。 2.为什么要引入单元测试&#x…...
PySpark学习笔记2-RDD算子,RDD持久化
RDD定义 RDD是弹性分布式数据集,是spark中的最基本的数据抽象,里面的元素可以并行计算 RDD的五大特性 RDD是有分区的,它的分区是数据存储的最小单位 RDD的方法会作用在所有分区上 RDD之间是有依赖关系的 KV型的RDD可以有分区器 RDD的分区会尽…...
windows10下安装Microsoft SQL Server 2016
一、下载安装包 网站:MSDN, 我告诉你 - 做一个安静的工具站 选择需要的版本,点击详细信息,复制ed2k链接,打开eMule或迅雷,新建下载,粘贴链接,开始下载。 下载好的文件是一个.iso镜像文件。 二、…...
开关不一定是开关灯用 - 命令模式(Command Pattern)
命令模式(Command Pattern) 命令模式(Command Pattern)命令设计模式命令设计模式结构图命令设计模式涉及的角色 talk is cheap, show you my code总结 命令模式(Command Pattern) 命令模式&…...
急速了解什么是GPU服务器
GPU服务器是一种专门配置了高性能图形处理器(GPU)的服务器,旨在提供高性能计算、深度学习、科学计算等多种场景的计算服务。与传统的CPU服务器相比,GPU服务器在处理并行密集型计算任务时具有显著优势。本文将详细介绍GPU服务器的定…...
word论文排版常见问题汇总
word论文排版常见问题汇总 常用快捷键: Alt F9 正常模式与域代码模式切换 Ctrl F9 插入域代码 F9 刷新域代码显示,要注意选定后刷新才会有效果 word中在当前列表的基础上修改列表 在使用word时,我们会定义一个列表,并将其链接…...
作业:IO:day3
思维导图 使用3语言编写一个简易的界面 界面如下 1:标准输出流 2:标准错误流 3:文件流 要求: 按1的时候,通过printf输出数据, 按2的时候,通过perror输出数据, 按3的时候将输入写入文…...
H266/VVC 帧内预测 PDPC 技术
位置决定的帧内预测组合 PDPC 在 VVC 中,对于帧内预测的 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 万字解析,从入门到剖析源码
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...
mysql的一些函数及其用法
mysql 1-来自于leetcode1517的题目 表: Users------------------------ | Column Name | Type | ------------------------ | user_id | int | | name | varchar | | mail | varchar | ------------------------已知一个表,它的…...
[java基础]LinkedList源码粗析
LinkedList 的数据结构 实现List、Deque 接口,基于 双向链表实现的列表。与基于数组的 ArrayList 不同,基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque,它提供了 add, offer, remove, poll, …...
基于Spring Boot的海滨体育馆管理系统的设计与实现
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 宠物医院…...
易支付二次元网站源码及部署教程
易支付二次元网站源码及部署教程 引言 在当今数字化时代,二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求,搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程…...
json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
在使用 Python 的 json 模块进行序列化时,默认情况下会将中文转换为 Unicode 编码。如果你希望在序列化时保留中文,可以通过设置 ensure_asciiFalse 来实现。 以下是示例代码: import jsondata {"name": "李浩瑞", &q…...
Perl语言的循环实现
Perl语言的循环实现 引言 Perl是一种强大的脚本语言,以其灵活的语法和强大的文本处理能力著称。无论是在系统管理、网络编程,还是在Web应用开发中,Perl都广泛应用于各种领域。循环是编程语言中一个极其重要的概念,它允许程序重复…...
IOMMU PT
什么是 IOMMU PT IOMMU PT(Input/Output Memory Management Unit - Pass-Through)是一种技术,主要用于虚拟化环境中,特别是在使用直接设备分配(也称为设备直通)的情况下。这项技术允许虚拟机直接访问物理硬…...
DNS协议漏洞利用实验_hust计算机网络安全实验
文章目录 计算机网络安全实验 DNS协议漏洞利用实验 docker使用 建立实验环境docker常用指令 一些注意事项设置本地 DNS 服务器 配置用户计算机设置本地DNS服务器在本地 DNS 服务器中建一个区域 修改主机文件(可略)netwox实施DNS的用户响应欺骗攻击netwo…...
深度学习中的卷积和反卷积(二)——反卷积的介绍
1 简介 反卷积(deconvolution)又称转置卷积,是卷积的拟操作,常用于GAN等模型中。反卷积是上采样的一种,上采样是指将特征图维度恢复到原始图的维度,这种增大维度的过程被称为上采样。上采样可以用插值或反…...
PyCharm 引用其他路径下的文件报错 ModuleNotFound 或报红
PyCharm 中引用其他路径下的文件提示 ModuleNotFound,将被引用目录添加到系统路径: # # 获取当前目录 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)
目录 一、引言 二、自动语音识别(automatic-speech-recognition) 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 知识(1) Linux 知识(2) Linux 工作队列 Linux 内核源代码情景分析(一) Linux 设备驱动程序(二) 文章目录 系列文章目录综述工作(work_…...
程序血缘分析技术在工商银行软件工程中的应用
当前,随着软件领域技术更新换代速度的日益加快,市场需求也变得更加多样化和个性化,业界普遍通过加速产品迭代来满足客户需求,但在此过程中也暴露出一些研发管理痛点问题,如服务和程序类资产信息分散于各个不同的应用和系统中,信息归集费时费力;设计、开发和测试人员无法…...
纯手工(不基于maven的pom.xml、Web容器)连接MySQL数据库的详细过程(Java Web学习笔记)
1 引言 最近读一些Java Web开发类的书籍时,发现书中的连接数据库的过程缺少了一些关键性的过程,这对初学者非常不友好。为此,本文将给出详细的连接MySQL数据库的过程,并且是纯手工,不依赖于pom.xml和Web容器ÿ…...
node-sass@4.14.1报错的最终解决方案分享
输入npm i全安装文件所需的依赖的时候,博主是使用sass去书写的,使用的是node-sass4.14.1和sass-loader7.3.1的版本的,安装的时候老是出现错误, node-sass4.14.1版本不再被支持的原因 node-sass 是一个基于 LibSass 的 Node.js 绑…...
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代,智能聊天助手已然化身成为提升用户体验的关键利器,全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮,我毅然投身于极具挑战性…...
【Linux系列】如何使用 nohup 命令在后台运行脚本
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Web渗透测试之XSS跨站脚本攻击 跨域是什么?同源机制又是什么? cors以及Jsonp是什么 一篇文章给你说明白
目录 Cookie的Httponly属性和逃过方式 浏览器同源机制 cors跨域和jsonp跨域和跨域标签 Cors跨域 - 跨源 Jsonp 跨域 jsonp跨域原理: 说明: Cookie的Httponly属性和逃过方式 Xss攻击手段 最常用的目的获取cookie Cookie中设置了 httponlyTrue 方式js操作获…...
K-Means 聚类算法:用生活场景讲解机器学习的“分组”方法
一、K-Means 算法概述 K-Means 是一种经典的无监督学习聚类算法,目的是将数据集中 n 个样本划分成 K 个簇(cluster),每个样本根据其特征被归入与之最接近的簇。简单来说,这就像在超市购物时,顾客会被根据购…...
C语言与ASCII码应用之简单加密
加密是什么?什么是加密通话?用人话说就是一句有含义的话,经过一定的特殊规则把里面的每个字按照这个规则进行改变,但是这个规则只有你和你想让知道这条信息的人知道 今天我们来用ASCII码编写一个简单加密与解密的程序,…...
python无需验证码免登录12306抢票 --selenium(2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示:这里可以添加本文要记录的大概内容: 就在刚刚我抢的票: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 通过从所有符元位置中选择排名最高的符元,而不是从单个随机采样…...
C++—9、如何在Microsoft Visual Studio中调试C++
本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...
《深度剖析:开源与闭源模型,AI舞台上的不同角色》
在人工智能蓬勃发展的当下,模型的选择如同为一场战役挑选合适的武器,至关重要。开源模型与闭源模型作为AI领域的两大阵营,在性能和应用场景上展现出显著差异,深刻影响着开发者、企业以及整个行业的走向。 性能差异:实…...
开源 vGPU 方案 HAMi 解析
开源 vGPU 方案 HAMi 一、k8s 环境下 GPU 资源管理的现状与问题 (一)资源感知与绑定 在 k8s 中,资源与节点紧密绑定。对于 GPU 资源,我们依赖 NVIDIA 提供的 device-plugin 来进行感知,并将其上报到 kube-apiserver…...
Unity 大地图功能 离线瓦片地图
不使用第二个摄像机实现类似开放世界的大地图功能。 功能如下: 按下M键打开/关闭大地图功能 打开大地图时,默认玩家位置居中 大地图支持拖拽,可调节拖拽速度,支持XY轴翻转 支持大地图设置边缘偏移量 可设置是否启动拖拽边界 …...
【计算机网络】什么是网关(Gateway)?
网上冲浪多了,你可以听到过网关(Gateway)这个词,但是却不太清楚网关(Gateway)到底是干什么的、负责网络当中的什么任务,本篇文字将会为你介绍网关(Gateway)的作用&#x…...
AIOps 平台
AIOps(Artificial Intelligence for IT Operations)平台是一种结合人工智能(AI)技术和IT运营管理的解决方案,旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…...
使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备
一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB,这里会将创建数据库的代码放到了,将文件复制到data/sql目录中,然后在终端中的项目文件夹中执行: pip install sqlite3现在创建一个名为sqldb的数据库&a…...
TCP与UDP协议
一、主要区别 ① 连接的建立和断开: TCP(Transform Control Protocol)通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后,TCP提供稳定的数据传输服务。当通信结束时,TCP通过四次…...
【MySQL】MVCC详解, 图文并茂简单易懂
欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...