1 / 9
文档名称:

linux内核定时器.doc

格式:doc   大小:55KB   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

linux内核定时器.doc

上传人:iris028 2022/5/8 文件大小:55 KB

下载得到文件列表

linux内核定时器.doc

文档介绍

文档介绍:Linux内核定时器
一、定义:
/include/linux/
struct timer_list {
struct list_head entry;
unsigned long expires;
voidcec_bases是在kernel/timer中定义的一个全局的tvec_t_base_s类型的变量。
(3)--DEFINE_TIMER(timer,function,expires,data);
定义并初始化定时器timer,相当于(2).其中DEFINE_TIMER宏的定义为:
#define DEFINE_TIMER(_name, _function, _expires, _data) \
struct timer_list _name = \
TIMER_INITIALIZER(_function, _expires, _data)
(4)--setup_timer(&timer);
等同于定义方式(2)和(3),不过对base字段的赋值是调用了init_timer()函数。setup_timer()原型为:
static inline void setup_timer(struct timer_list * timer,
void (*function)(unsigned long),
unsigned long data)
{
timer->function = function;
timer->data = data;
init_timer(timer);
}
2、注册定时器:
在定义并初始化了定时器之后,就要调用add_timer()函数来将该定时器注册到内核中,这样定时器才会工作。在注册之后,定时器就开始计时,在到达时间expires时,执行回调函数function(->data)。add_timer()函数的原型为:
static inline void add_timer(struct timer_list *timer)
{
BUG_ON(timer_pending(timer));
__mod_timer(timer, timer->expires);
}
3、删除定时器:
int del_timer(struct timer_list *timer);
从内核中删除已经注册的定时器timer。如果该定时器是活动的,则返回1,否则返回0。
int del_timer(struct timer_list *timer)
{
tvec_base_t *base;
unsigned long flags;
int ret = 0;
timer_stats_timer_clear_start_info(timer);
if (timer_pending(timer)) {
base = lock_timer_base(timer, &flags);
if (timer_pending(timer)) {
detach_timer(timer, 1);
ret = 1;
}
spin_unlock_irqrestore(&base->lock, flags);
}
return ret;