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

细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

目录

一、窗口看门狗的工作原理

1、递减计数器

2、窗口值和比较器

3、看门狗的启动

4、提前唤醒中断

二、窗口看门狗的HAL驱动程序

1、窗口看门狗初始化

2.窗口看门狗刷新

3.EWI中断及其处理

三、不开启EWI的WWDG示例

1、示例功能

2、项目设置

(1) 时钟、Debug

(2)GPIO 

(3) WWDG

(4)NVIC

(5)USART、 CodeGenrator

3、软件设计main.c

4、下载并调试

(1)启动后不按任何键,连续更新

(2) 442ms内按键,更新

(3)442ms~1094ms之间按键,不更新 

(4)1094ms以上按键,更新

四、开启EWI的WWDG示例

1、示例功能、项目配置

2、软件设计

3、下载并调试

(1)不按按任何键

(2)按S2,800ms

(3) 按S3,1200ms

(4)按S4,200ms


        窗口看门狗(Window Watchdog,WWDG)是STM32F407上的另一个看门狗,通常用来监测由外部干扰或不可预见的逻辑条件造成的应用程序软件故障

一、窗口看门狗的工作原理

        窗口看门狗的内部结构如图所示。

1、递减计数器

        窗口看门狗内部有一个7位递减计数器,控制寄存器WWDG_CR中的T[6:0]位,是计数器的计数值。7位计数器的时钟信号来源于PCLK1,看门狗内部首先对PCLK1进行4096分频,然后再经过可配置的预分频器分频,因此7位递减计数器的时钟频率是:

        f_{CNT}=f_{PCLK1}/(4096×DIV)

        f_{PCLK1}是时钟信号PCLK1的频率,4096是看门狗的固定分频系数,DIV是可设置的分频系数,由寄存器WWDG_CFR的WDGTB[1:0]位决定,DIV可取值为1、2、4、8。

        7位递减计数器在T6位由1变为0时,就会使系统产生复位(看门狗必须是激活的,也就是控制寄存器WWDG_CR中的WDGA位是1),也就是计数值由0x40变为0x3F时,产生复位。要避免系统复位,就必须在计数值变为0x3F之前重置计数器,重置计数器的值必须大于0x3F。

        窗口看门狗的递减计数器是自由运行计数器,即使没有开启看门狗,这个计数器也是在计数的。所以,在启动看门狗之前,应该重置计数器的值,以避免因为T6位是0而立刻复位。

2、窗口值和比较器

        在配置寄存器WWDG_CFR中,有个7位的窗口值W[6:0],这个值用来与计数器的当前值T[6:0]进行比较。

        窗口看门狗的工作时序图如图所示。当T[6:0]>W[6:0]时,比较器输出为1这时不允许重置计数器的值,也就是不允许写WWDG_CR否则系统复位。只有当T[6:0]≤W[6:0]时,才可以重置计数器的值,如果在T[6:0]变化到0x3F之前没有重置计数器,就会产生系统复位信号。所以,只能在这样一个窗口期重置看门狗计数器,这也是称为“窗口看门狗”的原因

        根据窗口看门狗的工作特点,在初始化设置时,窗口值W[6:0]必须小于或等于递减计数器的重置值。窗口看门狗的超时(timeout)就是计数器重置后,计数值变化为0x3F的这段时间长度,也就是图中不允许刷新和允许刷新两段的时间长度之和。用户可以根据计数器的时钟信号频率和T[6:0]的重置值计算超时。例如,设置计数器重置值为最大值0x7F,变化到0x3F时的计数周期个数是:

∆=0x7F-0x3F=0x40。

        计数器的时钟周期是:T_{CNT}= \frac{1}{f_{CNT}}= \frac{4096\times DIV}{f_{PCLK1}}

        所以,看门狗的超时是:timeout= \bigtriangleup T_{CNT}= \frac{4096\times DIV\times \Delta }{f_{PCLK1}}

       同样,也可以计算出不允许刷新的时间段的长度。

3、看门狗的启动

        控制寄存器WWDG_CR中的位WDGA用于启动看门狗。系统复位后WDGA被硬件清零,通过向WDGA写1可启动看门狗。此外,启动看门狗后就无法再停止,除非系统复位。

        根据窗口看门狗的特点,可以使用软件使系统立刻复位。具体的操作方法是将WDGA位置1(启动窗口看门狗),并将T6位清零(使看门狗立刻产生复位),也就是设置一个小于0x3F的重置值即可。

4、提前唤醒中断

        窗口看门狗有一个提前唤醒中断(Early Wakeup Interrupt,EWI)事件,如果已开启此中断事件源,且启动了看门狗,在递减计数器的值变为0x40时,就会触发此中断。

        可在此中断服务程序里执行系统复位之前的一些关键操作,但是执行时间有限,只有一个计数器时钟周期。当然,也可以在此中断服务程序里重置计数器的值,避免系统复位,但是这样似乎就违背了使用窗口看门狗的初衷。

二、窗口看门狗的HAL驱动程序

        窗口看门狗的驱动程序的头文件是stm32f4xx_hal_wwdg.h,WWDG的驱动函数不多。

1、窗口看门狗初始化

        使用函数HAL_WWDG_Init()进行窗口看门狗初始化,其原型定义如下:

WWDG_HandleTypeDef hwwdg;  //WWDG外设对象变量

        结构体WWDG_HandleTypeDef的定义如下:

typedef struct
{WWDG_TypeDef *Instance;	//寄存器基址WWDG_InitTypeDef Init;	//WWDG的参数
}WWDG_HandleTypeDef;

        其成员变量Init是结构体类型WWDG_InitTypeDef,包含WWDG的参数。该结构体定义如下,各成员变量意义见注释:

typedef struct
{uint32_t Prescaler;	//WWDG时钟预分频系数uint32_t Window;	//WWDG窗口值,设定值范围为0x40~0x7Euint32_t Counter;	//WWDG自由运行递减计数器的重载值,设定值范围为0×40~0×7Fuint32_t EWIMode;	//WWDG的EWI中断模式,开启或禁止
}WWDG_InitTypeDef;

2.窗口看门狗刷新

        函数HAL_WWDG_Refresh()用于刷新窗口看门狗,其原型定义如下:

HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg);

        其功能就是将计数器重置值加载到看门狗的递减计数器,以避免看门狗触发系统复位。但只能在允许刷新时间段才能刷新看门狗

3.EWI中断及其处理

        WWDG有一个全局中断,只有一个提前唤醒中断(EWI)事件。驱动程序头文件定义了EWI中断事件使能位的宏,也作为中断事件类型定义。

#define WWDG_IT_EWI WWDG_CFR_EWI	//EWI中断事件使能位,也作为中断事件类型

         有一个宏函数用于开启EWI中断事件,即

__HAL_WWDG_ENABLE_IT(__HANDLE__,__INTERRUPT__)

        参数__HANDLE__是WWDG对象指针,__INTERRUPT__就使用WWDG_IT_EWI作为参数值。EWI中断事件开启后就不能关闭,只能在硬件复位时才关闭,所以没有关闭EWI中断事件的函数

        WWDG全局中断ISR里调用的通用处理函数是HAL_WWDG_IRQHandler(),对应于EWI事件中断的回调函数是HAL_WWDG_EarlyWakeupCallback(),其原型定义如下:

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg);

        若要对EWI事件中断做出处理,重新实现这个回调函数即可。

三、不开启EWI的WWDG示例

1、示例功能

        本文作者旨在介绍如何WWDG及用法。继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。示例功能:看门狗在启动或上次刷新后,在442ms之内不能再刷新,在443ms至1049ms之内可以刷新看门狗,如果超过1049ms没有刷新看门狗,看门狗就会使系统复位

        使用开发板上的3个按键,按下案件后分别执行:在允许刷新的时间段内刷新、超时后刷新、在不允许刷新的时间段内刷新。LED1~LED3分别用于动作指示。

//显示菜单
[S2]KeyUp    = 在允许刷新时间段内,看门狗不会触发复位.         LED1闪烁
[S3]KeyDown  = 超时,看门狗会触发系统复位.                    LED2闪烁
[S4]KeyLeft  = 在不允许刷时间段内,刷新看门狗会导致系统复位.    LED3闪烁

        本示例不开启EWI中断。 

        部分内容需要参考本文作者写的其他文章。参考文章:细说STM32F407单片机独立看门狗IWDG的原理及使用方法-CSDN博客  https://wenchm.blog.csdn.net/article/details/145159637 

2、项目设置

(1) 时钟、Debug

         设置Debug接口为Serial Wire,设置HSE为Crystal/Ceramic Resonator

        配置时钟树,设置HSE为8MHz,HCLK为32MHz,设置APB1 Prescaler为16,使PCLK1为2MHz。这是因为窗口看门狗要用到PCLK1时钟,使PCLK1为2MHz是为得到一个较低频率时钟信号,用于看门狗的递减计数器,便于观察程序运行效果。 

 

(2)GPIO 

        本示例要用到两个LED,配置PA6和PA4引脚,设置初始输出为高电平,两个LED的GPIO引脚的配置结果如图所示,仍然使用keyled.h中的LED驱动函数。

(3) WWDG

        只需激活WWDG即可,参数设置部分的几个参数决定看门狗的特性。

 

  • WWDG counter clock prescaler,看门狗计数器预分频系数,有1、2、4、8几个可选值。
  • WWDG window value,窗口值,也就是W[6:0]的值。这个值必须小于计数器的重置值,也必须大于0x3F(十进制值63)。
  • WWDG free-running downcounter value,递减计数器T[6:0]的重置值,最大值为127(也就是0x7F)必须大于W[6:0]的值。根据设置的参数以及PCLK1为2MHz,可以计算出看门狗的超时为

         timeout= \bigtriangleup T_{CNT}= \frac{4096\times DIV\times \Delta }{f_{PCLK1}}=\frac{4096\times 8\times \left ( 127-63 \right )}{2\times 10^{6}}= 1049ms

        计数器重置后不允许刷新的时间段长度是

         time=\frac{4096\times 8\times \left ( 127-100 \right )}{2\times10 ^{6}}=442ms

        对照WWDG工作原理图,这两个时间对看门狗的意义:看门狗在启动或上次刷新后,在442ms之内不能再刷新,在443ms至1049ms之内可以刷新看门狗,如果超过1049ms没有刷新看门狗,看门狗就会使系统复位

  • Early wakeup interrupt,是否开启提前唤醒中断。这里开启EWI中断。还需要在WWDG的NVIC Settings页面开启WWDG的全局中断,使用默认的优先级即可。

(4)NVIC

        在WWDG的NVIC Settings页面开启WWDG的全局中断,使用默认的优先级。

(5)USART、 CodeGenrator

         与参考文章相同。

3、软件设计main.c

/* USER CODE BEGIN Includes */
#include "keyled.h"
#include <stdio.h>
/* USER CODE END Includes */
/* USER CODE BEGIN 2 *///系统复位、初始状态printf("Demo21_WWDG: Windows Watchdog\r\n\r\n");//显示菜单printf("[S2]KeyUp    = 在允许刷新时间段内,看门狗不会触发复位.\r\n");printf("[S3]KeyDown  = 超时,看门狗会触发系统复位.\r\n");printf("[S4]KeyLeft  = 在不允许刷时间段内,刷新看门狗会导致系统复位.\r\n\r\n");// MCU output low level LED light is onLED1_OFF();LED2_OFF();LED3_OFF();LED4_OFF();/* USER CODE END 2 */
    /* USER CODE BEGIN 3 */KEYS curKey = ScanPressedKey(KEY_WAIT_ALWAYS);switch(curKey){//1. 在允许刷新时间段内,看门狗不会触发复位,LED1闪烁case KEY_UP:{LED1_Toggle();LED2_OFF();LED3_OFF();HAL_Delay(800);HAL_WWDG_Refresh(&hwwdg); 	//刷新看门狗,也就是重置计数器的值printf("The watchdog will not trigger a reset during the allowed refresh period.\r\n\r\n");break;}//2. 超时,看门狗会触发系统自动复位,LED2亮case KEY_DOWN:{LED1_OFF();LED2_ON();LED3_OFF();printf("Timeout, the watchdog will trigger a reset automatically.\r\n\r\n");HAL_Delay(1200);HAL_WWDG_Refresh(&hwwdg);break;}//3. 在不允许刷时间段内,刷新看门狗会导致系统复位,LED3亮case KEY_LEFT:{HAL_Delay(200);LED1_OFF();LED2_OFF();LED3_ON();HAL_Delay(200);HAL_WWDG_Refresh(&hwwdg); 	//刷新看门狗,也就是重置计数器的值printf("During the period of time when refresh is not allowed,\r\n");printf("refreshing the watchdog will cause the system to reset.\r\n\r\n");break;}default:{printf("Keystroke error, refreshing watchdog will not cause system reset.\r\n\r\n");LED1_OFF();LED2_OFF();LED3_OFF();}}HAL_Delay(500);		//消除按键抖动影响}/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
int __io_putchar(int ch)
{HAL_UART_Transmit(&huart6,(uint8_t*)&ch,1,0xFFFF);return ch;
}
/* USER CODE END 4 */

4、下载并调试

        调试的时候,按键按下后不要抬起。 

(1)启动后不按任何键,连续更新

         启动后不按任何键,系统连续启动,串口助手连续显示启动信息,这是因为WWDG的窗口值100,重置值127,当减计数到100后,系统自动重启。

(2) 442ms内按键,更新

        在执行LED3_ON()前后各延时200ms是为了看到LED3的闪烁效果,这两个延时合计400ms,还在不允许刷新时间段内(小于442ms),这时调用HAL_WWDG_Refresh()刷新看门狗会使系统复位,后面如果有程序也是不会被执行的。 

(3)442ms~1094ms之间按键,不更新 

        看门狗在允许刷新的时间段内及时刷新。如果在while循环内调用HAL_Delay(800)延时800ms,然后调用HAL_WWDG_Refresh()刷新看门狗,则可以观察到LED1一直闪烁。因为延时800ms后进入允许刷新的时间段(大于442ms),也没有超过看门狗的超时时间(1049ms),这时候调用HAL_WWDG_Refresh()是可以刷新看门狗的,程序能一直正常运行,所以LED1闪烁,闪烁周期为800ms。

 

(4)1094ms以上按键,更新

        看门狗超时是自动复位的。如果将程序中的延时改为1200ms,则运行时会看到LED1一直亮着。因为在延时1200ms的过程中,看门狗已经超时导致系统复位,while循环里使LED1输出翻转的代码不会被执行。

四、开启EWI的WWDG示例

1、示例功能、项目配置

        除WWDG开启EWI中断外,其余都与三相同。

 

2、软件设计

        在不开启EWI的时候,程序下载后,即使不按任何键,WWDG的减计数器减到阈值后也会自动重置,现象就是串口助手连续不断底显示更新,一般情况下,这不是设计者的设计目的。

        开启EWI后,在EWI的回调函数里执行计数器重置。那么久解决了上面不需要的连续刷新WWDG的现象了。 

/* USER CODE BEGIN 4 */
// EWI中断事件回调函数
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{LED4_Toggle();HAL_WWDG_Refresh(hwwdg); //在此刷新看门狗,看门狗也是能被刷新的
}int __io_putchar(int ch)
{HAL_UART_Transmit(&huart6,(uint8_t*)&ch,1,0xFFFF);return ch;
}
/* USER CODE END 4 */

        看门狗的EWI中断是在递减计数器的值变为0x40时触发的,而递减计数器的值变为0x3F时就会导致系统自动复位。所以,EWI中断相当于在系统复位之前的一个预警,用户可以在此中断里做一些紧急处理,例如关闭某个开关,但是处理时间只有1个计数周期。

3、下载并调试

(1)不按按任何键

(2)按S2,800ms

 

(3) 按S3,1200ms

 

(4)按S4,200ms

 

相关文章:

细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

目录 一、窗口看门狗的工作原理 1、递减计数器 2、窗口值和比较器 3、看门狗的启动 4、提前唤醒中断 二、窗口看门狗的HAL驱动程序 1、窗口看门狗初始化 2.窗口看门狗刷新 3.EWI中断及其处理 三、不开启EWI的WWDG示例 1、示例功能 2、项目设置 &#xff08;1&…...

【.net core】【sqlsugar】时间查询示例

1、时间包含查询示例 //model.TimeInterval为时间区间参数&#xff0c;参数格式为2024-01-01~2025-01-01 //query为当前查询的语句内容 //为当前查询语句增加创建时间模糊搜索查询条件 query query.Where(a > ((DateTime)a.F_CreatorTime).ToString("yyyy-MM-dd HH:m…...

基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建

一、引言 1.1 研究背景阐述 在当今数字化时代,医疗行业正经历着深刻的变革,数字化转型的需求日益迫切。电子病历(EMR)作为医疗信息化的核心,其管理的高效性和数据利用的深度对于提升医疗服务质量、优化临床决策以及推动医学研究具有至关重要的意义。传统的电子病历管理系…...

STM32 HAL库函数入门指南:从原理到实践

1 STM32 HAL库概述 STM32 HAL(Hardware Abstraction Layer)库是ST公司专门为STM32系列微控制器开发的一套硬件抽象层函数库。它的核心设计理念是在应用层与硬件层之间建立一个抽象层&#xff0c;这个抽象层屏蔽了底层硬件的具体实现细节&#xff0c;为开发者提供了一套统一的、…...

Harmony面试模版

1. 自我介绍 看表达能力、沟通能力 面试记录&#xff1a; 2. 进一步挖掘 2.1. 现状 目前是在职还是离职&#xff0c;如果离职&#xff0c;从上一家公司离职的原因 2.2. 项目经验 如果自我介绍工作项目经验讲的不够清楚&#xff0c;可以根据简历上的信息再进一步了解 面试记…...

数据结构知识点

【1】栈&#xff08;stack&#xff09; C 标准库提供了 std::stack 模板类&#xff0c;用于实现栈的功能。std::stack 是基于其他容器&#xff08;如 std::vector、std::deque 或 std::list&#xff09;实现的适配器类。 std::stack 可以使用不同的底层容器来实现&#xff0c…...

RPC 简介

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种通过网络请求执行远程服务器上的代码的技术&#xff0c;使得开发者可以调用远程系统中的函数&#xff0c;就像调用本地函数一样。它隐藏了底层网络通信的细节&#xff0c;简化了分布式系统的开…...

qBittorent访问webui时提示unauthorized解决方法

现象描述 QNAP使用Container Station运行容器&#xff0c;使用Docker封装qBittorrent时&#xff0c;访问IP:PORT的方式后无法访问到webui&#xff0c;而是提示unauthorized&#xff0c;如图&#xff1a; 原因分析 此时通常是由于设备IP与qBittorrent的ip地址不在同一个网段导致…...

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中&#xff0c;下载、部署NVM&#xff08;node.js version management&#xff09;环境&#xff0c;并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshi…...

【大数据】机器学习 -----关于data.csv数据集分析案例

打开表 import pandas as pd df2 pd.read_csv("data.csv",encoding"gbk") df2.head()查看数据属性&#xff08;列标题&#xff0c;表形状&#xff0c;类型&#xff0c;行标题&#xff0c;值&#xff09; print("列标题:",df2.columns)Data…...

使用Newtonsoft.Json插件,打包至Windows平台显示不支持

在unity中使用Newtonsoft.Json插件&#xff0c;打包至Windows遇到的问题 string json JsonConvert.SerializeObject(msg); 打包windows平台&#xff0c;显示该平台不支持 出现问题的原因 JsonConvert.SerializeObject 使用了反射来动态遍历对象的属性和字段。这可能在某些平台…...

树莓派5--系统问题汇总

前言&#xff1a; 该文章是我在使用树莓派5时所遇到的问题以及解决方案&#xff0c;希望对遇到相同问题的能够有所帮助。我的树莓派系统版本为&#xff1a;Pi-OS-ROS_2024_09_29 注意&#xff1a;如果没有什么需求千万不要更新树莓派中任何软件或者系统&#xff0c;除非你真的…...

Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250116

逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/11nYhOf5TL9haZdXcYTxmHQ?pwdfwg8 提取码: fwg8 -------------------- Level2逐笔成交逐笔委托数据分享下载 利用Level2的逐笔交易和委托数据&#xff0c;这种以毫秒为单位的详细信息能揭露众多关键信息&#xff0c;如庄…...

小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2

文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下&#xff1a; form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…...

windows远程桌面连接限定ip

1&#xff0c;Windows防火墙->高级设置->远程桌面 - 用户模式(TCP-In)->作用域->远程IP地址 2&#xff0c;启用规则...

强化学习-蒙特卡洛方法

强化学习-数学理论 强化学习-基本概念强化学习-贝尔曼公式强化学习-贝尔曼最优公式强化学习-值迭代与策略迭代强化学习-蒙特卡洛方法 文章目录 强化学习-数学理论一、蒙特卡洛方法理论(Monte Carlo, MC)二、MC Basic2.1 算法拆解2.2 MC Basic算法 三、MC Exploring Starts3.1 …...

Java并发编程——线程池(基础,使用,拒绝策略,命名,提交方式,状态)

我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…...

浅谈云计算08 | 基本云架构

浅谈基本云架构 一、负载分布架构二、资源池架构三、动态可扩展架构四、弹性资源容量架构五、服务负载均衡架构六、云爆发架构七、弹性磁盘供给架构八、冗余存储架构 在当今数字化时代&#xff0c;云计算已成为企业发展的核心驱动力&#xff0c;而其背后的一系列关键架构则是支…...

element select 绑定一个对象{}

背景&#xff1a; select组件的使用&#xff0c;适用广泛的基础单选 v-model 的值为当前被选中的 el-option 的 value 属性值。但是我们这里想绑定一个对象&#xff0c;一个el-option对应的对象。 <el-select v-model"state.form.modelA" …...

MySQL SQL优化技巧与原理

前言 随着业务数据量的不断增加&#xff0c;MySQL查询语句的执行效率对程序的运行效率影响逐渐增大。因此&#xff0c;进行SQL优化变得至关重要。本文将结合SQL的执行语句顺序和各种SQL场景&#xff0c;介绍一些常见的MySQL SQL优化技巧及其背后的原理。 一、MySQL SQL执行语…...

SSL:WRONG_VERSION_NUMBER 或者 net::ERR_SSL_PROTOCAL_ERROR

记录一次SSL部署成功后&#xff0c;接口请求依然报SSL错误的问题。 首先排除SSL证据链不足&#xff0c;系统时间不正确&#xff0c;TLS配置不正确等问题。 浏览器直接访问可以打开网站&#xff0c;但是postman等接口访问就一直报SSL异常&#xff1a; 类似参考资料中的这种异…...

51单片机——DS18B20温度传感器

由于DS18B20数字温度传感器是单总线接口&#xff0c;所以需要使用51单片机的一个IO口模拟单总线时序与DS18B20通信&#xff0c;将检测的环境温度读取出来 1、DS18B20模块电路 传感器接口的单总线管脚接至单片机P3.7IO口上 2、DS18B20介绍 2.1 DS18B20外观实物图 管脚1为GN…...

单细胞组学大模型(8)--- scGenePT,scGPT和GenePT的结合,实验数据和文本数据的交融模型

–https://doi.org/10.1101/2024.10.23.619972 研究团队和单位 Theofanis Karaletsos–Head Of AI - Science at Chan Zuckerberg Initiative &#xff08;Chan Zuckerberg Initiative是扎克伯格和他妻子Chan成立的科研&教育机构&#xff09; 研究简介 研究背景&…...

详解如何自定义 Android Dex VMP 保护壳

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 Android Dex VMP&#xff08;Virtual Machine Protection&#xff0c;虚拟机保护&#xff09;壳是一种常见的应用保护技术&#xff0c;主要用于保护 And…...

PHP中的魔术函数

PHP 魔术函数是在某些情况下会自动调用的特殊函数&#xff0c;它们以双下划线 __ 开头&#xff0c;以下是对常见 PHP 魔术函数的详细介绍&#xff1a; ### 构造函数和析构函数 - **__construct()**&#xff1a; - 这是一个构造函数&#xff0c;在创建类的新对象时会自动调…...

excel 判断某个单元格的日期,如果超过3天,则在另一个单元格显示超过三天的公式

excel 判断某个单元格的日期&#xff0c;如果超过3天&#xff0c;则在另一个单元格显示超过三天的公式&#xff0c;公式如下&#xff1a; IF(DATEDIF(C627,TODAY(),"d")<4,"3天以内","超过三天") IF(D627"超过3天","文件赶紧…...

TCP 序列和确认号说明 | seq 和 ack 号计算方法

注&#xff1a;本文为 “TCP 序列” 相关文章合辑。 英文引文机翻未校。 TCP Sequence and Acknowledgement Numbers Explained TCP 序列和确认编号说明 TCP Sequence (seq) and Acknowledgement (ack) numbers help enable ordered reliable data transfer for TCP streams…...

【Linux】Mysql部署步骤

一、JDK安装配置 在home目录下执行命令&#xff1a;mkdir Jdk 1.将JDK 上传至该文件夹&#xff0c;有些终端工具可以直接上传文件&#xff0c;比如&#xff1a;MobaXterm 可以看到安装包已经上传上来了 2.直接安装 命令&#xff1a;rpm -ivh jdk-8u311-linux-x64.rpm 3.安装成…...

【算法】枚举

枚举 普通枚举1.铺地毯2.回文日期3.扫雷 二进制枚举1.子集2.费解的开关3.Even Parity 顾名思义&#xff0c;就是把所有情况全都罗列出来&#xff0c;然后找出符合题目要求的那一个。因此&#xff0c;枚举是一种纯暴力的算法。一般情况下&#xff0c;枚举策略都是会超时的。此时…...

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数&#xff01; 默认成员函数是程序猿不显示声明定义&#xff0c;编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的&#xff0c;关于类与对象不才在前面笔记中有详细的介绍&#xff1a;点我…...

力扣刷题汇总

动态规划 1 . 最大子序和 (Maximum Subarray Sum) Leetcode 53. 最大子数组和 经典dp 问题描述&#xff1a;给定一个整数数组&#xff0c;求其中和最大的连续子数组的和。 状态定义&#xff1a;dp[i] 表示以第 i 个元素结尾的最大子序和。 2 . 最长公共子序列 (Longest Commo…...

Ansible自动化运维:基础与实践

在当今的IT运维领域&#xff0c;Ansible作为一款强大的自动化运维工具&#xff0c;正发挥着日益重要的作用。本文将详细介绍Ansible的相关知识&#xff0c;包括其作用、特点、安装配置以及常用模块的使用方法&#xff0c;旨在帮助读者快速上手并熟练运用Ansible进行自动化运维工…...

微信小程序在使用页面栈保存页面信息时,如何避免数据丢失?

微信小程序在使用页面栈保存页面信息时避免数据丢失的方法&#xff1a; 一、使用全局变量存储关键数据&#xff1a; 定义一个全局变量&#xff0c;例如在 app.js 中&#xff0c;用于存储页面的重要信息。在页面的 onHide 或 onUnload 生命周期中&#xff0c;将需要保存的数据…...

我国无人机新增实名登记110.3 万架,累计完成飞行2666万小时

据央视新闻从中国民航局了解到&#xff0c;2024 年我国全年新增通航企业 145 家、通用机场 26 个&#xff0c;颁发无人驾驶航空器型号合格证 6 个、新增实名登记无人机 110.3 万架&#xff0c;无人机运营单位总数超过 2 万家&#xff0c;累计完成无人机飞行 2666 万小时&#x…...

vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建

1、使用vite构建项目 npm create vitelatest 填写项目名的时候不能大写 2、跑起来之后配置下 import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from path // https://vite.dev/config/ export default defineConfig({plugins: [vue…...

C语言:-三子棋游戏代码:分支-循环-数组-函数集合

思路分析&#xff1a; 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数&#xff0c;使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、…...

前端调试遇到的无限debugger的原理与绕过

背景 debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字,只要遇到它,JavaScript 的执行便会在此处中断,进入调试模式。有了 debugger 这个关键字,我们就可以非常方便地对 JavaScript 代码进行调试,比如使用 JavaScript Hook 时,我们可以加入 debugger 关键字…...

Java负载均衡

Java中的负载均衡原理是指通过合理分配网络请求或计算任务的方式&#xff0c;将工作负载分配到多个服务器、处理单元或服务实例上&#xff0c;从而提高系统的性能、可扩展性和可用性。负载均衡不仅可以分散请求压力&#xff0c;还能增强系统的容错能力&#xff0c;避免单点故障…...

spark,读取和写入同一张表问题

读取a表&#xff0c;写入a表 1.写入的是分区表&#xff0c;不报错 2.读取上来之后&#xff0c;创建为临时视图temp&#xff0c;然后先写入a表&#xff0c;再使用temp&#xff0c;就会报错 解决办法&#xff1a;可以先使用temp&#xff0c;再写入a表 3.写入的不是分区表&…...

用gpg和sha256验证ubuntu.iso

链接 https://ubuntu.com/tutorials/how-to-verify-ubuntuhttps://releases.ubuntu.com/jammy/ 本文是2的简明版 sha256sum介绍 sha256sum -c SHA256SUMS 2>&1这段脚本的作用是验证文件的 SHA-256 校验和。具体来说&#xff0c;命令的各个部分含义如下&#xff1a; …...

HIVE技术

本文章基于黑马免费资料编写。 hive介绍 简介 hive架构 hive需要启动的配置 执行元数据库初始化命令 使用hive必须启动的服务 ./schematool -initSchema -dbType mysql -verbos启动 Hive 创建一个 hive 的日志文件夹 mkdir /export/server/hive/logs启动元数据管理服务 n…...

我的世界-与门、或门、非门等基本门电路实现

一、红石比较器 (1) 红石比较器结构 红石比较器有前端单火把、后端双火把以及两个侧端 其中后端和侧端是输入信号,前端是输出信号 (2) 红石比较器的两种模式 比较模式 前端火把未点亮时处于比较模式 侧端>后端 → 0 当任一侧端强度大于后端强度时,输出…...

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了&#xff0c;整个GPU的架构基本就熟了。市面上有很多GPU厂家&#xff0c;他们产品的架构各不相同&#xff0c;但是核心往往差不多&#xff0c;整明白一了个基本上就可以触类旁通了。下面这张图信息量很大&#xff0c;可以结合博客GPU 英伟达GPU架构回…...

[Qt]窗口-QMainWindow类-QMenuBar、QToolBar、QStatusBar、QDockWidget控件

目录 1.QMainWindow类介绍 2.菜单栏-QMenuBar控件 创建菜单栏 添加菜单和菜单选项 triggered信号 设置快捷键 添加分割线 添加图标 使用案例 3.工具栏-QToolBar控件 使用介绍 设置停靠位置 设置浮动属性 设置移动属性 使用案例 4.状态栏-QStatusBar控件 状…...

Linux命令行工具-使用方法

参考资料 Linux网络命令&#xff1a;网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…...

HTML中如何保留字符串的空白符和换行符号的效果

有个字符串 储值门店{{thing3.DATA}}\n储值卡号{{character_string1.DATA}}\n储值金额{{amount4.DATA}}\n当前余额{{amount5.DATA}}\n储值时间{{time2.DATA}} &#xff0c; HTML中想要保留 \n的换行效果的有下面3种方法&#xff1a; 1、style 中 设置 white-space: pre-lin…...

ASP.NET Core WebApi接口IP限流实践技术指南

在当今的Web开发中&#xff0c;接口的安全性和稳定性至关重要。面对恶意请求或频繁访问&#xff0c;我们需要采取有效的措施来保护我们的WebApi接口。IP限流是一种常见的技术手段&#xff0c;通过对来自同一IP地址的请求进行频率控制&#xff0c;可以有效地防止恶意攻击和过度消…...

SparkSQL数据模型综合实践

文章目录 1. 实战概述2. 实战步骤2.1 创建数据集2.2 创建数据模型对象2.2.1 创建常量2.2.2 创建加载数据方法2.2.3 创建过滤年龄方法2.2.4 创建平均薪水方法2.2.5 创建主方法2.2.6 查看完整代码 2.3 运行程序&#xff0c;查看结果 3. 实战小结 1. 实战概述 在本次实战中&#…...

C++实现设计模式---外观模式 (Facade)

外观模式 (Facade) 外观模式 是一种结构型设计模式&#xff0c;为子系统中的一组接口提供一个一致的界面。外观模式定义了一个更高层次的接口&#xff0c;使得子系统更容易使用。 意图 简化复杂子系统的接口。为客户端提供一个统一的入口&#xff0c;屏蔽子系统的内部细节。 …...

计算机网络 (43)万维网WWW

前言 万维网&#xff08;World Wide Web&#xff0c;WWW&#xff09;是Internet上集文本、声音、动画、视频等多种媒体信息于一身的信息服务系统。 一、基本概念与组成 定义&#xff1a;万维网是一个分布式、联机式的信息存储空间&#xff0c;通过超文本链接的方式将分散的信息…...