概述
文章目录
- 时钟源
- 系统节拍设置
- jiffies和时间之间的转换函数
- 内核定时器
- 一般使用流程
- 其它相关函数
时钟源
应该是generic timer,百度吧
系统节拍设置
比如我想定时3s钟,那么就是3*HZ
即可。
Linux 内核使用全局变量 jiffies 来记录系统从启动以来的系统节拍数,系统启动的时候会将 jiffies 初始化为 0,jiffies 定义在文件 include/linux/jiffies.h 中,定义如下:
extern u64 __jiffy_data jiffies_64; /* 用于64位系统*/
extern unsigned long volatile __jiffy_data jiffies; /* 用于32位系统,49.7天就会溢出 */
Linux 内核提供了如表 50.1.1.1 所示的几个 API 函数来处理绕回(溢出)。
jiffies和时间之间的转换函数
内核定时器
参看:include/linux/timer.h
Linux 内核使用 timer_list 结构体表示内核定时器,定义如下(省略掉条件编译):
struct timer_list {
struct list_head entry;
unsigned long expires; /* 定时器超时时间,单位是节拍数 */
struct tvec_base *base;
void (*function)(unsigned long); /* 定时处理函数 */
unsigned long data; /* 要传递给 function 函数的参数 */
int slack;
};
一般使用流程
-
定义一个定时器
struct timer_list mytimer
。 -
初始化定时器
void init_timer(struct timer_list *timer)
。 -
向内核添加定时器
void add_timer(struct timer_list *timer)
,这样定时器就会开始运行。-
配置定时器
mytimer.function = function; /* 定时器处理函数*/ mytimer.expires = jiffies + msecs_to_jiffies(2000); /* 超时时间为2s */ mytimer.data = (unsigned long)&dev; /* 自己的数据 */ add_timer(&mytimer); /* 启动定时器 */
-
-
删除一个定时器
int del_timer(struct timer_list * timer)
,返回值1->定时器已经激活,0->定时器还没有被激活。
其它相关函数
参看:include/linux/timer.h
extern void add_timer_on(struct timer_list *timer, int cpu);
extern int del_timer(struct timer_list * timer);
extern int mod_timer(struct timer_list *timer, unsigned long expires);
extern int mod_timer_pending(struct timer_list *timer, unsigned long expires);
extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires);
extern void set_timer_slack(struct timer_list *time, int slack_hz);
最后
以上就是典雅盼望为你收集整理的linux内核定时器的使用的全部内容,希望文章能够帮你解决linux内核定时器的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复