内核定时器是内核用来控制在未来某个时间点(基于 jiffies)调度执行某个函数的一种
机制,其实现位于
和 kernel/timer.c 文件中。
内核定时器的结构描述
struct timer_list {
struct list_head entry; //内核初始化
unsigned long expires; //超时的jiffies值
void (*function)(unsigned long); //超时处理函数
unsigned long data; //超时处理函数的参数
struct tvec_base *base; //内核初始化
};
expires 字段表示期望定时器执行的 jiffies 值,到达该 jiffies 值时,将调用 function处理
函数,并传递 data 作为参数。
当一个定时器被注册到内核之后,entry 字段用来连接该定
时器到一个内核链表中。base 字段是内核内部实现所用的。
init_timer注册定时器,内核自动帮你初始化两个参数entry和base,剩下三个需要自己初始化
需要注意的是 expires 的值是 32 位的,因为内核定时器并不适用于长的未来时间点
使用定时器流程
1.注册定义timer_list结构描述
2.初始化定时器init_timer.
3.给timer_list的expires(到期时间),data(函数参数),function(处理函数)初始化。
4.调用add_timer将timer加入列表,启动定时器
5.在程序中涉及timer控制的地放适当调用del_timer,mod_timer来删除或者修改timer的expires
-
#include <linux/module.h>
-
#include <linux/timer.h>
-
#include <linux/jiffies.h>
-
-
struct timer_list timer;
-
-
void timer_function(int para)
-
{
-
printk("<0>Timer Expired and para is %d !!\n",para);
-
}
-
-
int timer_init()
-
{
-
init_timer(&timer);
-
timer.data = 5;
-
timer.expires = jiffies + (20*HZ);
-
timer.function = timer_function;
-
add_timer(&timer);
-
-
return 0;
-
}
-
-
void timer_exit()
-
{
-
del_timer(&timer);
-
}
-
-
module_init(timer_init);
-
module_exit(timer_exit);S123456
阅读(1314) | 评论(0) | 转发(0) |