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,使用內核定時器去除按鍵的抖動
按鍵觸發中斷時,中斷處理函數延時執行