内核定时器可以实现软中断,在某一时刻执行特定的函数。如何使用它呢?主要五步:声明、初始化、配置、激活、释放。
在使用之前,先讲解一个最重要的结构体:
struct timer_list {
struct list_head entry,
unsigned long expires,
void (*function)(unsigned long ),
unsigned long data,
struct timer_base_s *base,
}
function:定义了定时器超时处理函数,从使用的角度来将是最关键的。
expires:定义了相对目前的延时时间。当前时间用jiffiers来度量,延时一秒用expires=jiffiers+Hz,延时10秒就是expires=jiffiers+10*Hz,延时10ms就是expires=jiffiers+Hz/100。如果没有对其初始化,或者初始化为0,则激活定时器之后,内核会拿expires和jiffiers比较,当expires<jiffiers是,定时器就已经超时,则超时处理函数不会执行。
data:传递给超时处理函数function的参数。如果函数function不需要传递参数,则data可以不用配置。
另外两个参数不需要我们配置,由内核帮我们完成。
entry:添加到内核链表
base: