现在的位置: 首页 > 综合 > 正文

linux内核定时器

2013年09月23日 ⁄ 综合 ⁄ 共 1773字 ⁄ 字号 评论关闭

struct list_head {

        struct list_head *next, *prev;

}

 

定时器(内核定时器、动态定时器)由结构timer_list表示,定义在文件linux/timer.h中。

struct timer_list {

            struct list_head entry; /* 定时器链表的入口 */

            unsighed long expires; /* 以jiffies为单位的定时值 */

            spinlock_t lock; /* 保护定时器的锁 */

            void (*function) (unsighed long); /* 定时器处理函数 */

            unsighed long data; /* 传给处理函数的长整形参数 */

            struct tvec_t_base_s *base; /* 定时器内部值,用户不要使用 */

}

<注:这是2.6老版本的内核定义>

data参数使你可以用一个处理函数注册多个定时器,只要通过该参数就能够区别它们。

内核提供了一组与定时器相关的接口来简化管理定时器的操作。这些接口的声明都在<linux/timer.h>中,大多数

接口的实现在<kernel/timer.c>中获得实现。

/* 创建定时器 */

struct time_list my_timer;

/* 初始化定时器 */

init_timer(&my_timer);

/* 设置定时器 */

my_timer.expires = jiffies + delay; /* delay为定时器超时时间的节拍数 */

my_timer.data = 0; /* 给定时器处理函数传入0值 */

my_timer.function = my_function; /* 定时器超时调用的处理函数 */

/* 激活定时器 */

add_timer(&my_timer);

/* 修改定时器的超时时间 */

mod_timer(&my_timer, jiffies + new_delay); /* 如定时器未被激活,则激活它,返回0;否则,返回1 */

/* 删除定时器 */

del_timer(&my_timer); /* 定时器未被激活时,返回0;否则,返回1

/* 删除定时器的同步方法 */

del_timer_sync(&my_timer); /* 以同步的方式删除定时器,防止它同时在多个cpu上使用 */

 

/* 实现定时器处理函数 */

void my_timer_function(unsigned long data)

{

    printk(KERN_EMERG“Current jiffies is %lu\n", jiffies);

}

 18 MODULE_LICENSE("GPL");
 19 MODULE_AUTHOR("XIE Wei");
 20 MODULE_DESCRIPTION("timer module");
 21
 22 struct timer_list timer;
 23
 24 void timer_function(unsigned long para)
 25 {
 26     mod_timer(&timer, jiffies + (2 * HZ));
 27     printk("<0>Timer Expired and para is %ld !!\n",para);
 28 }
 29
 30 static int __init timer_init(void)
 31 {
 32     printk(KERN_ERR "timer_init OK!\n");
 33
 34     init_timer(&timer);
 35     timer.data = 6;
 36     timer.expires = jiffies + (6 * HZ);
 37     timer.function = timer_function;
 38     add_timer(&timer);
 39
 40     return 0;
 41
 42 }
 43 static void __exit timer_exit(void)
 44 {
 45     del_timer( &timer );
 46     printk(KERN_EMERG "timer_exit OK!\n");
 47 }
 48
 49 module_init(timer_init);
 50 module_exit(timer_exit);

抱歉!评论已关闭.