内核定时器:定时触发定时器中断,执行定时器中断处理函数
头文件:<linux/timer.h>
定时器数据类型:
struct timer_list {
unsigned long expires; //定时器计数时间值
void (*function)(unsigned long); //定时器处理函数
unsigned long data; //私有数据
};
定义并初始化定时器:
#define DEFINE_TIMER(_name, _function, _expires, _data)
struct timer_list _name = {
.entry = { .prev = TIMER_ENTRY_STATIC },
.function = (_function),
.expires = (_expires),
.data = (_data),
.base = &boot_tvec_bases,
.slack = -1,
__TIMER_LOCKDEP_MAP_INITIALIZER(
FILE “:” __stringify(LINE))
}
内核中使用jiffies进行时间计数,计数的频率由HZ来决定
如果expires的值和jiffies值相等,就会触发定时器中断
expires = jiffies + HZ; //定时多长时间? 定时1S
expires = jiffies + n*HZ //定时n秒
init_timer(struct timer_list * timer) //初始化定时器的函数宏
void add_timer(struct timer_list *timer); //添加定时器
int del_timer(struct timer_list * timer); //删除定时器
修改定时器时间,再次触发定时器中断
int mod_timer(struct timer_list *timer, unsignedlong expires);
功能:修改定时器时间 参数:
@timer 定时器结构体指针
@expires 定时器定时时间