内核中用一套timer函数的:主要是围绕struct timer_list来做的。
struct timer_list:
其中重要的成员:
unsigned long data:传递到超时处理函数的参数,主要在多定时器同时使用时,区别是哪个timer超时。
unsigned long expires:超时时间,以jiffies来衡量。
如设置超时时间为1s, timer.expires = jiffies + HZ
设置超时时间为10ms, timer.expires = jiffies + HZ/100
void (*function)(unsigned long):超时处理函数。
重要函数和宏定义:
DEFINE_TIMER(_name, _function, _expires, _data):一次性定义一个timer_list
init_timer(struct timer_list*):定时器初始化函数;
del_timer/add_timer(struct timer_list*):往系统删除/添加定时器;
mod_timer(struct timer_list *, unsigned long jiffier_timerout):修改定时器的超时时间为jiffies_timerout;
timer_pending(struct timer_list *):定时器状态查询,如果在系统的定时器列表中则返回1,否则返回0;
使用:
定义:
static struct timer_list buttons_timer;初始化,添加,设置处理函数
init_timer(&buttons_timer);
buttons_timer.function = buttons_timer_function;
//buttons_timer.expires = 0;
add_timer(&buttons_timer);一步到位定义:
static DEFINE_TIMER(buttons_timer, buttons_timer_function, 0, 0);static void buttons_timer_function(unsigned long data)
{
....
}