linux kernel中struct timer_list使用

linux kernel中struct timer_list使用

内核中最终的计时资源是定时器。定时器用于定时器超时处理程序在未来某个特定时间点执行,或者周期性的轮询硬件的状态。Linux提供了内核定时器完成这类工作。

一般来说,定时器都在超时后马上就会执行超时处理函数,但是也有可能被推迟到下一个时钟节拍时才能执行,所以不能用定时器来实现任何硬实时任务。

kernel中如果想周期性的干些什么事情,或者某个特定时间干些什么事情,可以使用timer。例如像周期性地dump某段buffer的数据等等。

先来看看使用方法。
先定义一个struct timer_list的对象。

struct timer_list dump_t;
这个对象相当于一个闹钟,其中包含了时间点,也就是什么时候激活闹钟;一个函数指针,闹钟激活后干活的地方;
还有一个void 指针,在闹钟干活的时候可能需要传给它一些当前的数据。

先看使用方法,之后再稍微深入了解一下。前面定义好了struct timer_list对象,接下来就需要初始化该对象。
调用函数init_timer进行初步初始化然后对结构体中的一些成员进行赋值:
 init_timer(&dump_t);
  dump_t.function = dump_function;
dump_t.data = (unsigned long) my_dev;
dump_t.expires = jiffies + HZ;    // 1秒钟之后timer被激活,如果是n秒,将HZ改为n*HZ。注意单位是tick
这样就OK了么?当然没有,需要把timer加到timer list中,也就是要告诉系统,你申请了这么一个timer
   add_timer(&dump_t);
现在不明白的地方就是timer到了,干活的地方,即dump_function函数。
函数声明:
static void dump_function(unsigned long channel);
其中的实现么,就随意了,看你想让这个timer干些什么活。注意一点,这个timer只会响应一次,因为jiffies + HZ时间点只有一个。如果想让此timer周期性地干活,就需要在dump_function函数中重新启动该timer
启动方法:
  del_timer(&dump_t);
 dump_t.function = dump_function;
 dump_t.data = (unsigned long) mydev;
  dump_t.expires = jiffies + HZ;
  add_timer(&dump_t);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值