Linux内核定时器

1. 内核时间管理

Linux内核中很多函数需要时间管理,比如周期性的调度程序、延时程序、定时器。硬件定时器提供时钟源,时钟源的频率可以设置,设置好后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率 (tick rate)。系统节拍率是可以设置的,单位是 Hz,在编译 Linux内核的时候可以通过图形化界面设置系统节拍率,按照如下路径打开配置界面:

-> Kernel Features-> Timer frequency (<choice>[=y])

在这里插入图片描述
默认情况下系统节拍率选择:100Hz,设置好后在Linux内核源码根目录下的 .config文件中可见系统节拍率被设置为100Hz
在这里插入图片描述
Linux内核会使用 CONFIG_HZ来设置自己的系统时钟。文件 include/asm-generic/param.h 中有如下内容:

#undef HZ 
#define HZ CONFIG_HZ 
#define USER_HZ 100 9 
#define CLOCKS_PER_SEC (USER_HZ)

Linux内核使用全局变量 jiffies 来记录系统从启动以来的系统节拍数,系统启动的时候会将 jiffies 初始化为 0,jiffies定义在文件 include/linux/jiffies.h 中,定义如下:

extern u64 __jiffy_data jiffies_64;		//定义一个64位的 jiffies_64,用于64位系统
extern unsigned long volatile __jiffy_data jiffies;		//32位的 jiffies,用于32位系统

HZ 表示每秒的节拍数,jiffies 表示系统运行的jiffies 节拍数,因此 jiffies/HZ 就是系统运行时间,单位为秒。不管是32 位还是64 位的jiffies,都有溢出的风险,溢出以后会重新从 0 开始计数,相当于绕回来了,因此也将这个现象也叫做绕回。假如HZ 为最大值 1000 的时候,32 位的jiffies 只需要49.7 天就发生了绕回,对于64 位的jiffies 来说大概需要5.8 亿年才能绕回,因此jiffies_64 的绕回忽略不计

处理32位 jiffies 的绕回显得尤为重要,Linux 内核提供了如下所示的几个API 函数来处理绕回
在这里插入图片描述
如果unkown 超过known 的话,time_after 函数返回真,否则返回假。如果unkown 没有超过known 的话time_before 函数返回真,否则返回假。time_after_eq 函数和time_after 函数类似,只是多了判断等于这个条件。同理,time_before_eq 函数和time_before 函数也类似。

若要判断某段代码执行时间有没有超时,可以使用如下所示代码:

unsigned long timeout;
timeout = jiffies + (2 * HZ); /* 超时的时间点 */
/*************************************
具体的代码
************************************/
/* 判断有没有超时 */
if(time_before(jiffies, timeout)) {/* 超时未发生 */
} else {/* 超时发生 */
}

为了方便开发, Linux内核提供了几个 jiffies 和 ms、 us、 ns之间的转换函数,如下示
在这里插入图片描述

2. 内核定时器

定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。 Linux内核定时器采用系统时钟来实现,并不是 PIT 等硬件定时器。 Linux内核定时器使用很简单,只需要提供超时时间 (相当于定时值 )和定时处理函数即可,当超时时间到了以后设置的定时处理函数就会执行

内核定时器并不是周期性运行的,超时以后就会自动关闭,如果想要实现周期性定时,就需要在定时处理函数中重新开启定时器。 Linux内核使用 timer_list结构体表示内核定时器, timer_list 定义在文件 include/linux/timer.h 中,定义如下:

struct timer_list { struct list_head entry; unsigned long expires; 				/* 定时器超时时间,单位是节拍数 */ struct tvec_base *base; void (*function)(unsigned long); 	/* 定时处理函数 */ unsigned long data; 				/* 要传递给function函数的参数 */ int slack; 
}; 

要使用内核定时器首先要先定义一个 timer_list变量,表示定时器,定义好定时器以后还需要通过一系列的 API函数来初始化此定时器,这些函数如下:

  • init_timer 函数:初始化 timer_list类型变量
void init_timer(struct timer_list *timer)
//timer: 要初始化的定时器
//无返回值
  • add_timer函数:向 Linux 内核注册定时器,注册后定时器就开始运行
void add_timer(struct timer_list *timer)
//timer: 要注册的定时器
//无返回值
  • del_timer函数:删除一个定时器,不管有没有被激活都可以删除
int del_timer(struct timer_list * timer)
//timer: 要删除的定时器
//返回值: 0,定时器还没被激活 1,定时器已经激活
  • del_timer_sync函数:del_timer 函数的同步版,会等待其他处理器使用完定时器再删除
int del_timer_sync(struct timer_list * timer)
//timer: 要删除的定时器
//返回值: 0,定时器还没被激活 1,定时器已经激活
  • mod_timer函数:修改定时值,若定时器还没被激活,此函数会激活定时器
int mod_timer(struct timer_list *timer, unsigned long expires)
//timer:要修改超时时间 (定时值 )的定时器
//expires:修改后的超时时间

函数就讲这些,内核定时器一般的使用方法如下所示:

struct timer_list timer; /* 定义定时器 */ /* 定时器回调函数 */ 
void function(unsigned long arg){ /* * 定时器处理代码 */ /* 如果需要定时器周期性运行的话就使用mod_timer * 函数重新设置超时值并且启动定时器。 */ mod_timer(&dev->timertest, jiffies + msecs_to_jiffies(2000)); 
} /* 初始化函数 */ 
void init(void){ init_timer(&timer); 	/* 初始化定时器 */ timer.function = function; 		/* 设置定时处理函数 */ timer.expires=jffies + msecs_to_jiffies(2000);		/* 超时时间2秒 */ timer.data = (unsigned long)&dev; 		/* 将设备结构体作为参数 */ add_timer(&timer); 				/* 启动定时器 */ 
} /* 退出函数 */ 
void exit(void) { del_timer(&timer); 		/* 删除定时器 */ /* 或者使用 */ del_timer_sync(&timer); 
}

有时候需要在内核中实现短延时,Linux内核提供了毫秒、微秒和纳秒延时函数,这三个函数如下表所示:

在这里插入图片描述

3. 实验程序编写

本实验使用内核定时器周期性的点亮和熄灭开发板上的 LED灯, LED灯的闪烁周期由内核定时器来设置,测试应用程序可以控制内核定时器周期

3.1 修改设备树文件

设备树节点信息的添加,可参考设备树下的LED驱动开发一文

3.2 定时器驱动程序编写

设备树准备好后就可以编写驱动程序了,新建“timer”文件夹,并在文件夹中创建vscode工程,新建 timer.c 文件,编写程序

#define TIMER_CNT		1					/* 设备号个数 	*/
#define TIMER_NAME		"timer"				/* 名字 		*/
#define CLOSE_CMD 		(_IO(0XEF, 0x1))	/* 关闭定时器 */
#define OPEN_CMD		(_IO(0XEF, 0x2))	/* 打开定时器 */
#define SETPERIOD_CMD	(_IO(0XEF, 0x3))	/* 设置定时器周期命令 */
#define LEDON 			1					/* 开灯 */
#define LEDOFF 			0					/* 关灯 *//* timer设备结构体 */
struct timer_dev{dev_t devid;			/* 设备号 	 */struct cdev cdev;		/* cdev 	*/struct class *class;	/* 类 		*/struct device *device;	/* 设备 	 */int major;				/* 主设备号	  */int minor;				/* 次设备号   */struct device_node	*nd; /* 设备节点 */int led_gpio;			/* key所使用的GPIO编号		*/int timeperiod; 		/* 定时周期,单位为ms */struct timer_list timer;/* 定义一个定时器*/spinlock_t lock;		/* 定义自旋锁 */
};struct timer_dev timerdev;	/* timer设备 *//** @description	: 初始化LED灯IO,open函数打开驱动的时候* 				  初始化LED灯所使用的GPIO引脚。* @param 		: 无* @return 		: 无*/
static int led_init(void)
{int ret = 0;timerdev.nd = of_find_node_by_path("/gpioled");if (timerdev.nd== NULL) {return -EINVAL;}timerdev.led_gpio = of_get_named_gpio(timerdev.nd ,"led-gpio", 0);if (timerdev.led_gpio < 0) {printk("can't get led\r\n");return -EINVAL;}/* 初始化led所使用的IO */gpio_request(timerdev.led_gpio, "led");		/* 请求IO 	*/ret = gpio_direction_output(timerdev.led_gpio, 1);if(ret < 0) {printk("can't set gpio!\r\n");}return 0;
}/** @description		: 打开设备* @param - inode 	: 传递给驱动的inode* @param - filp 	: 设备文件,file结构体有个叫做private_data的成员变量* 					  一般在open的时候将private_data指向设备结构体。* @return 			: 0 成功;其他 失败*/
static int timer_open(struct inode *inode, struct file *filp)
{int ret = 0;filp->private_data = &timerdev;	/* 设置私有数据 */timerdev.timeperiod = 1000;		/* 默认周期为1s */ret = led_init();				/* 初始化LED IO */if (ret < 0) {return ret;}return 0;
}/** @description		: ioctl函数,* @param - filp 	: 要打开的设备文件(文件描述符)* @param - cmd 	: 应用程序发送过来的命令* @param - arg 	: 参数* @return 			: 0 成功;其他 失败*/
static long timer_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{struct timer_dev *dev =  (struct timer_dev *)filp->private_data;int timerperiod;unsigned long flags;switch (cmd) {case CLOSE_CMD:		/* 关闭定时器 */del_timer_sync(&dev->timer);break;case OPEN_CMD:		/* 打开定时器 */spin_lock_irqsave(&dev->lock, flags);timerperiod = dev->timeperiod;spin_unlock_irqrestore(&dev->lock, flags);mod_timer(&dev->timer, jiffies + msecs_to_jiffies(timerperiod));break;case SETPERIOD_CMD: /* 设置定时器周期 */spin_lock_irqsave(&dev->lock, flags);dev->timeperiod = arg;spin_unlock_irqrestore(&dev->lock, flags);mod_timer(&dev->timer, jiffies + msecs_to_jiffies(arg));break;default:break;}return 0;
}/* 设备操作函数 */
static struct file_operations timer_fops = {.owner = THIS_MODULE,.open = timer_open,.unlocked_ioctl = timer_unlocked_ioctl,
};/* 定时器回调函数 */
void timer_function(unsigned long arg)
{struct timer_dev *dev = (struct timer_dev *)arg;static int sta = 1;int timerperiod;unsigned long flags;sta = !sta;		/* 每次都取反,实现LED灯反转 */gpio_set_value(dev->led_gpio, sta);/* 重启定时器 */spin_lock_irqsave(&dev->lock, flags);timerperiod = dev->timeperiod;spin_unlock_irqrestore(&dev->lock, flags);mod_timer(&dev->timer, jiffies + msecs_to_jiffies(dev->timeperiod)); }/** @description	: 驱动入口函数* @param 		: 无* @return 		: 无*/
static int __init timer_init(void)
{/* 初始化自旋锁 */spin_lock_init(&timerdev.lock);/* 注册字符设备驱动 *//* 1、创建设备号 */if (timerdev.major) {		/*  定义了设备号 */timerdev.devid = MKDEV(timerdev.major, 0);register_chrdev_region(timerdev.devid, TIMER_CNT, TIMER_NAME);} else {						/* 没有定义设备号 */alloc_chrdev_region(&timerdev.devid, 0, TIMER_CNT, TIMER_NAME);	/* 申请设备号 */timerdev.major = MAJOR(timerdev.devid);	/* 获取分配号的主设备号 */timerdev.minor = MINOR(timerdev.devid);	/* 获取分配号的次设备号 */}/* 2、初始化cdev */timerdev.cdev.owner = THIS_MODULE;cdev_init(&timerdev.cdev, &timer_fops);/* 3、添加一个cdev */cdev_add(&timerdev.cdev, timerdev.devid, TIMER_CNT);/* 4、创建类 */timerdev.class = class_create(THIS_MODULE, TIMER_NAME);if (IS_ERR(timerdev.class)) {return PTR_ERR(timerdev.class);}/* 5、创建设备 */timerdev.device = device_create(timerdev.class, NULL, timerdev.devid, NULL, TIMER_NAME);if (IS_ERR(timerdev.device)) {return PTR_ERR(timerdev.device);}/* 6、初始化timer,设置定时器处理函数,还未设置周期,所有不会激活定时器 */init_timer(&timerdev.timer);timerdev.timer.function = timer_function;timerdev.timer.data = (unsigned long)&timerdev;return 0;
}/** @description	: 驱动出口函数* @param 		: 无* @return 		: 无*/
static void __exit timer_exit(void)
{	gpio_set_value(timerdev.led_gpio, 1);	/* 卸载驱动的时候关闭LED */del_timer_sync(&timerdev.timer);		/* 删除timer */
#if 0del_timer(&timerdev.tiemr);
#endif/* 注销字符设备驱动 */cdev_del(&timerdev.cdev);/*  删除cdev */unregister_chrdev_region(timerdev.devid, TIMER_CNT); /* 注销设备号 */device_destroy(timerdev.class, timerdev.devid);class_destroy(timerdev.class);
}module_init(timer_init);
module_exit(timer_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("andyxi");
3.3 测试程序编写

新建名为 timerApp.c的文件,并编写测试代码

/* 命令值 */
#define CLOSE_CMD 		(_IO(0XEF, 0x1))	/* 关闭定时器 */
#define OPEN_CMD		(_IO(0XEF, 0x2))	/* 打开定时器 */
#define SETPERIOD_CMD	(_IO(0XEF, 0x3))	/* 设置定时器周期命令 *//** @description		: main主程序* @param - argc 	: argv数组元素个数* @param - argv 	: 具体参数* @return 			: 0 成功;其他 失败*/
int main(int argc, char *argv[])
{int fd, ret;char *filename;unsigned int cmd;unsigned int arg;unsigned char str[100];if (argc != 2) {printf("Error Usage!\r\n");return -1;}filename = argv[1];fd = open(filename, O_RDWR);if (fd < 0) {printf("Can't open file %s\r\n", filename);return -1;}while (1) {printf("Input CMD:");ret = scanf("%d", &cmd);if (ret != 1) {				/* 参数输入错误 */gets(str);				/* 防止卡死 */}if(cmd == 1)				/* 关闭LED灯 */cmd = CLOSE_CMD;else if(cmd == 2)			/* 打开LED灯 */cmd = OPEN_CMD;else if(cmd == 3) {cmd = SETPERIOD_CMD;	/* 设置周期值 */printf("Input Timer Period:");ret = scanf("%d", &arg);if (ret != 1) {			/* 参数输入错误 */gets(str);			/* 防止卡死 */}}ioctl(fd, cmd, arg);		/* 控制定时器的打开和关闭 */	}close(fd);
}
3.4 程序编译
  • 修改Makefile编译目标变量
obj-m := timer.o
  • 使用“make -j32”编译出驱动模块文件
make -j32
  • 使用“arm-linux-gnueabihf-gcc”命令编译测试APP
arm-linux-gnueabihf-gcc timerApp.c -o timerApp
3.5 运行测试
  • 将驱动文件和APP可执行文件拷贝至“rootfs/lib/modules/4.1.15”中
  • 第一次加载驱动时,需使用“depmod”命令
depmod
  • 使用“modprobe”命令加载驱动
modprobe timer.ko
  • 使用“./timerApp /dev/timer "命令后,终端显示如下
    在这里插入图片描述

  • 输入“ 2”,打开定时器,此时 LED灯就会以默认的 1秒周期开始闪烁

  • 输入“ 3” 来设置定时周期,根据提示输入要设置的周期值,输入“ 500”,表示设置定时器周期值为 500ms,设置好以后 LED灯就会以 500ms为间隔,开始闪烁
    在这里插入图片描述

  • 输入“ 1”,关闭定时器

  • 使用”rmmod"命令卸载驱动

rmmod timer.ko
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Mysql数据库技术

    1.数据库MySQL分页时用的语句 使用limit关键字。Select * from 表名 where 条件 limit 开始位置&#xff0c;结束位置。通过动态的改变开始和结束位置的值来实现分页。 2.根据你以往的经验简单叙述一下MYSQL的优化 a、尽可能使用更小的整数类型.(mediumint就比int更合适). b、…...

    2024/3/6 17:58:20
  2. python绘制混淆矩阵

    test_generator test_datagen.flow_from_directory(dataset/test,target_size(48, 48),shuffle False ,#随机打乱默认为true# batch_size16,color_mode"grayscale",class_mode categorical) predictions model.predict_generator(test_generator) predicted_clas…...

    2024/3/6 5:02:15
  3. redhat8.4初学者配置共享文件夹(samba)

    redhat8.4环境下samba的搭建和配置 1.安装samba yum -y install samba 2.添加用户 smbpasswd -a 用户名随后输入密码&#xff0c;再次确认密码 3.在根目录下创建文件夹 mkdir mysahrels -l查看文件夹属性 &#xff0c;如果文件是在root下创建的&#xff0c;或者读写权限不…...

    2024/3/24 8:59:14
  4. Linux SVN “db/txn-current-lock: Permission denied”

    文章标题是一个统一问题&#xff0c;主要是在Linux上部署SVN服务端时&#xff0c;客户端提交代码时出现的错误。 Linux 运行SVN服务端&#xff0c;一般包括两种方式&#xff1a; 原生Linux安装基于docker方式的svn服务端&#xff0c;比如我用的 elleflorio/svn-server:latest…...

    2024/3/8 6:58:53
  5. 【Linux系统编程学习】信号、信号集以其相关函数

    此为牛客Linux C和黑马Linux系统编程课程笔记。 文章目录0. 信号的概念1. Linux信号一览表2. 信号相关函数3. kill函数4. raise函数5. abort函数6. alarm函数7. setitimer函数8. signal函数9. 信号集10. 自定义信号集相关函数11. sigprocmask函数12. sigpending函数13. sigacti…...

    2024/3/10 19:08:07
  6. Educoder题目:Java入门 - 数组进阶答案解析

    数组的复制 chapter8/src/step1/HelloWorld.java package step1;import java.util.Scanner;public class HelloWorld {public static void main(String...

    2024/3/6 5:02:11
  7. 2021-2027中国固定式液压动力装置市场现状及未来发展趋势

    2021-2027中国固定式液压动力装置市场现状及未来发展趋势 本报告研究中国市场固定式液压动力装置的生产、消费及进出口情况&#xff0c;重点关注在中国市场扮演重要角色的全球及本土固定式液压动力装置生产商&#xff0c;呈现这些厂商在中国市场的固定式液压动力装置销量、收入…...

    2024/3/6 5:02:10
  8. Educoder题目:Java入门 - 数组基础答案解析

    初识数组 chapter7/src/step1/HelloWorld.java package step1;public class HelloWorld {public static void main(String[] args) {/********** Begin **********/int...

    2024/3/15 4:50:26
  9. 基于Amis对Low Code前端的一些思考

    本文首发于&#xff1a;https://github.com/bigo-frontend/blog/ 欢迎关注、转载。 前言 Bigo计算平台前端组其中的两个产品&#xff0c;前端的框架都使用了 Amis&#xff0c;一个百度开源的低代码前端框架&#xff0c;公司之前也有几篇文章介绍了 Amis&#xff0c;其适用场景…...

    2024/3/9 11:15:50
  10. CentOS 6下编译安装Nginx

    CentOS 6下编译安装Nginx By&#xff1a;老宁 一、准备make环境 yum -y install gcc gcc-c automake autoconf libtool make 二、准备Nginx环境 安装pcre、zlib&#xff0c;前者为了重写rewrite&#xff0c;或者为了gzip压缩。 安装openssl 1、安装PCRE库 cd /usr/loca…...

    2024/3/12 19:50:06
  11. LINUX进阶(系统篇)之消息队列msgrcv()和msgsnd()详解

    目录 1.msgsnd()函数原型 1.1 函数说明 1.2 参数说明 1.3 返回值说明 1.4 所需...

    2024/3/28 12:15:29
  12. 2021-2027中国工作船喷水驱动器市场现状及未来发展趋势

    2021-2027中国工作船喷水驱动器市场现状及未来发展趋势 本报告研究中国市场工作船喷水驱动器的生产、消费及进出口情况&#xff0c;重点关注在中国市场扮演重要角色的全球及本土工作船喷水驱动器生产商&#xff0c;呈现这些厂商在中国市场的工作船喷水驱动器销量、收入、价格、…...

    2024/3/25 17:33:25
  13. 项目管理十大知识领域之项目成本管理

    (1) 项目成本管理主要包括哪些过程&#xff1f; ✧ 成本管理主要包含的过程&#xff1a; 三大规划&#xff0c;一大监控 (2) 估算成本过程和制定预算过程有什么区别&#xff08;考点&#xff09;&#xff1f; ✧ 成本管理的定义&#xff1a; 项目成本管理重点关注完成项目活…...

    2024/3/28 21:00:19
  14. IIC 简单介绍

    IIC介绍&#xff1a; IIC历史&#xff1a; IIC (Inter-Integrated Circuit)&#xff0c;是一种同步、多主、多从、分组交换、单端、串行计算机总线&#xff0c;由飞利浦半导体(现在的 NXP 半导体)在 1982 年发明。它广泛用于在短距离、板内通信中将低速外设集成电路附加到处理…...

    2024/3/11 20:32:34
  15. Python学习总结

    基础数据类型&#xff1a; Int&#xff1b; float&#xff1b; string&#xff1b; complex&#xff1b; 基础数据结构&#xff1a; List&#xff1b; >>> dir(list) [__add__, __class__, __contains__, __delattr__, __delitem__, __dir__, __doc__, __eq__,…...

    2024/3/8 10:00:21
  16. 官方消息:Filecoin已完成v14 Chocolate网络升级

    官方消息&#xff0c;Filecoin已完成v14 Chocolate网络升级。此前消息&#xff0c;Filecoin网络将于10月26日12:30PM&#xff08;UTC&#xff09;在区块高度1231620开始进行v14 Chocolate网络升级&#xff0c;结束时间约为10月26日2:30PM&#xff08;UTC&#xff09;。V14升级包…...

    2024/3/11 15:59:48
  17. 法医检验鉴定中心实验室建设思路

    SICOLAB实验室小编从多方面了解到&#xff1a;公安局法医检验鉴定中心实验室法医科学是一种特殊的科技行业&#xff0c;其结论将为法庭提供论据&#xff0c;关系到公民的权利保障和司法公正。公安局法医检验鉴定中心实验室在公安部工作的中国实验室国家认可委员会法庭科学分委会…...

    2024/3/12 15:36:14
  18. 网络操作系统之网络操作系统的功能

    网络操作系统简介 网络操作系统(Network Operating System&#xff0c;NOS)是使网络上各计算机能方便而有效地共享网络资源&#xff0c;为网络用户提供所需的各种服务的软件和有关规程的集合。网络操作系统实质上就是具有网络功能的操作系统。 网络操作系统的功能和特性 网络…...

    2024/3/4 15:58:14
  19. 2021年陕西省安全员C证考试题库及陕西省安全员C证考试总结

    题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;2021年陕西省安全员C证考试报名为正在备考陕西省安全员C证操作证的学员准备的理论考试专题&#xff0c;每个月更新的陕西省安全员C证考试总结祝您顺利通过陕西省安全员C证考试。 …...

    2024/3/15 11:34:33
  20. PMP考试难度大吗?

    难不难&#xff0c;要先了解到PMP的考试通过率&#xff0c;考试难度&#xff0c;学的什么&#xff0c;怎么去学才是适合自己的学习方法。 PMP考试通过率 考一个证书&#xff0c;首先考虑的问题一定是难不难&#xff0c;有没有用。那对于PMP的考试难度一定是很多人关注的重点&…...

    2024/3/4 15:58:12

最新文章

  1. 【漏洞复现】chatgpt pictureproxy.php SSRF漏洞(CVE-2024-27564)

    0x01 漏洞概述 ChatGPT pictureproxy.php接口存在服务器端请求伪造 漏洞&#xff08;SSRF&#xff09; &#xff0c;未授权的攻击者可以通过将构建的 URL 注入 url参数来强制应用程序发出任意请求。 0x02 测绘语句 fofa: icon_hash"-1999760920" 0x03 漏洞复现 G…...

    2024/3/29 6:39:36
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 构建Pytorch虚拟环境教程

    引言 在深度学习和机器学习领域&#xff0c;PyTorch是一个广受欢迎的开源库。为了确保PyTorch与其他库和项目的依赖关系不会发生冲突&#xff0c;我们通常会创建一个虚拟环境来隔离PyTorch和其依赖项。本文将向您展示如何构建PyTorch虚拟环境&#xff0c;以便您可以轻松地在其…...

    2024/3/28 19:41:42
  4. 缓存知识回顾

    - 缓存的使用场景 系统查询性能较低&#xff0c;且对数据实时性要求不高的 - 两种常见的缓存 本地缓存&#xff1a; java中的Map、List 的确这种方式简单有效&#xff0c;但是带来的弊端就是过于简单&#xff0c;功能也就过于缺乏&#xff0c;而且如果使用不当&#xff0c;将带…...

    2024/3/27 14:52:41
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/24 20:11:23
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/24 5:55:47
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/26 23:04:51
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/26 11:20:25
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/24 20:11:18
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/28 9:10:53
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/24 20:11:15
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/27 7:12:50
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/24 20:11:13
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/26 11:21:23
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/28 12:42:28
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57