Linux内核的定时器使用
Linux内核中提供一个定时器机制,我们只需要申请一个 struct time_list timing;
系统初始化定时器 init_timer( &timing)
struct timer_list { struct list_head entry; //定时值基于jiffies unsigned long expires; //定时器内部值 struct tvec_base *base; //定时器处理函数 void (*function)(unsigned long); //定时器处理函数参数 unsigned long data; …… };
可以看到timer_list中,expires是超时时间,jiffires是当前系统时间,function是超时之后执行的函数句柄,data是function的参数
在声明和初始化了timing之后,需要去对timing的data, function, expires赋值
struct timer_list timing; init_timer(&timing); timing.data = (unsigned long) something; timing.function = polling_handler; timing.expires = jiffies + 2 * HZ;
之后自己去定义void polling_handler(unsigned long data)
在需要开启定时器的地方,add_timer(&timing);
最后关闭定时器,del_timer(&timing);
周期性的执行只需在polling_handler中加入add_timer(&timing)即可
简单的定时器使用就是这样