Linux驱动开发之内核定时器

本文介绍了Linux内核定时器的原理和使用,包括API函数如初始化、关闭和时间转换,以及如何通过定时器结构体成员进行操作。此外,还讨论了内核提供的延时函数和获取高精度时间的方法。
摘要由CSDN通过智能技术生成

本文章向大家介绍Linux驱动开发-内核定时器,主要内容包括

内核定时器介绍、

内核定时器相关API函数、

2.2 初始化定时器、

2.3 关闭定时器、

2.4 关闭定时器、

2.5 转换时间(微妙单位)、

2.6 转换时间(毫秒为单位)、

2.7 初始化定时器的结构体成员、

2.8 初始化定时器并且赋值、

2.9 定时器初始化赋值、

使用定时器的步骤、

内核提供的延时函数、

精度较高的时间获取方式、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

1. 内核定时器介绍

内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 <linux/timer.h> 和 kernel/timer.c 文件中。

当内核定时器定时时间到达时,会进入用户指定的函数,相当于软中断。内核定时器注册开启后,运行一次就不会再运行(相当于自动注销),我们可以重新设置定时器的超时时间,让定时器重复运行。

每当时钟中断发生时,全局变量jiffies(一个32位的unsigned long 变量)就加1,因此jiffies记录了linux系统启动后时钟中断发生的次数,驱动程序常利用jiffies来计算不同事件间的时间间隔。内核每秒钟将jiffies变量增加HZ次。因此,对于HZ值为100的系统,jiffy+1等于隔了10ms,而对于HZ为1000的系统,jiffy+1仅为1ms。

内核定时器结构体: 下面列出了需要关心的成员

struct timer_list {
	unsigned long expires;         //设置超时时间,用jiffies作为基准值
	void (*function)(unsigned long); //类似中断服务函数,设置定时器到时后处理的函数 
	unsigned long data;           //中断服务函数的参数
}

expires设置:以当前时间为基准加上延时时间,时间基准用jiffies变量表示,延时时间可以使用以下两个宏转换成jiffies单位。

2. 内核定时器相关API函数

2.1 修改定时器超时时间

函数原型

*int mod_timer(struct timer_list timer, unsigned long expires)

函数功能

修改定时器超时时间

函数参数

timer:对应的定时器结构体 expires:超时时间

函数返回值

成功返回 :修改成功的时间值

函数定义文件

linux-3.5kerneltimer.c

2.2 初始化定时器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值