struct timer_list {
struct list_head entry;
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
struct timer_base_s *base;
};
1,定义一个timer_list定时器
struct timer_list my_timer;
2,初始化定时器
1)void init_timer(struct timer_list *timer);
上述init_timer()函数初始化timer_list 的entry 的next 为NULL,并给base 指针赋值。
timer->function = xxx_do_timer;
timer->data = (unsigned long)data;
timer->expires = jiffies + delay;
2)TIMER_INITIALIZER(_function, _expires, _data)
宏用于赋值定时器结构体的function、expires、data和ba se 成员,
3,增加定时器
void add_tiemr(struct timer_list * timer);
将定时器加入到内核动态定时器链表中
4,删除定时器
int del_timer(struct timer_list *timer);
5,修改定时器
int mod_timer(struct timer_list *timer,unsigned long expires);
修改定时器的到期时间,在新的被传入的expires 到来后才会执行定时器函数。
简单的使用模版
struct mdevice {
...
struct timer_list mtimer;
...
};
struct mdevice mdve;
void xxx_do_timer(unsigned long data)
{
printk("Executed\n");
}
int __init mdevice_init(void)
{
...
struct mdevice *mdvp = &mdve;
init_timer(&mdvp->timer);
mdvp->timer.function=xxx_do_timer;
mdvp->timer.data = data;
timer->expires = jiffies + HZ;
...
add_timer(&mdvp->timer);
}
void __exit mdevice_exit(void)
{
...
del_timer(&mdvp->timer);
...
}
举例:
1,使用内核定时器去除按键的抖动
按键触发中断时,中断处理函数延时执行