Linux内核定时器
打开内核sourceinsight工程,搜索timer.h,打开include/linux/time.h目录下的文件,ps:linux的头文件都是在某个include文件夹下,而linux/include目录下的头文件是用的最多的头文件,它一般是通用的头文件和硬件平台无关,而我们用的时候也是一般用这个目录下的头文件。
打开头文件
struct timer_list {
struct list_head entry;
unsigned long expires; /*定时时间点的绝对时间点,到这个时间点就产生就执行定时器函数*/
void(*function)(unsigned long); //定时器计时到后执行的函数
unsigned long data; /*data是传给function函数的参数,很明显这里内核开发者故意把这两条语句放在一起。可知他们的关联性很强*/
struct tvec_base *base;
#ifdef CONFIG_TIMER_STATS
void*start_site;
charstart_comm[16];
int start_pid;
#endif
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
常用的几个定时器函数
初始化定时器
#define init_timer(timer)\
init_timer_key((timer), NULL, NULL)
启动定时器
extern int mod_timer(struct timer_list*timer, unsigned long expires);
右击这个函数,GO TO CALLER看别人怎么调用这个函数
可以看到,第二个参数expires用到了HZ这个宏,HZ这个宏的值和具体平台相关,它是平台1秒钟内CPU时钟走过多少个时钟周期。