Linux定时器
1.定时器是对机器时钟中断的应用 -
2.内核提供一组数据结构来完成定时触发工作或者完成周期性的事务
3.操作系统中,一般不允许使用for循环来延时,一般使用定时器来完成延时功能
4.jiffies 表当前时间,HZ表示延迟1S
5.数据结构<linux/timer.h>
struct timer_list {
/*
* All fields that change during normal runtime grouped to the
* same cacheline
*/
struct list_head entry; /*定时器列表*/
unsigned long expires; /*定时器到期时间,以jiffy为单位*/
struct tvec_base *base; /**/
void (*function)(unsigned long);/*定时器到期处理函数*/
unsigned long data; /*作为参数被传入定时器处理函数*/
int slack;
....
};
6.相关函数
a) 初始化定时器
法一:
#define init_timer(timer)\
init_timer_key((timer), NULL, NULL)
void init_timer_key(struct timer_list *timer, const char *name,struct lock_class_key *key)
{
debug_init(timer);
__init_timer(timer, name, key);
}
static void __init_timer(struct timer_list *timer,const char *name,struct lock_class_key *key)
{
timer->entry.next = NULL;
timer->base = __raw_get_cpu_var(tvec_bases);
timer->slack = -1;
..
lockdep_init_map(&timer->lockdep_map, name, key, 0);
}
注:init_timer()宏初始化<