定时器的初步认识


一、定时器的一般流程为:

(1)编写function;
(2)为timer的expires、data、function赋值;
(3)调用add_timer将timer加入列表;
(4)在定时器到期时,function被执行;
(5)在程序中涉及timer控制的地方适当地调用del_timer、mod_timer删除timer或修改timer的expires。

二、参数
(1)expires主要是用来定义定时器到期的时间,通常采用jiffies这个全局变量和HZ这个全局变量配合设置该元素
   的值。比如expires = jiffies + n*HZ,其中jiffies是自启动以来的滴答数,HZ是一秒种的滴答数。
(2)function函数就是定时器的处理函数,类似我们在中断中的中断函数,其实定时器和中断有很大的相似性。定
   时器处理函数是自己定义的函数。
(3)data通常是实现参数的传递,从function的参数类型可以知道,data可以作为定时器处理函数的参数。

三、要点
(1)先声明一个timer_list结构,调用init_timer对它进行初始化。
(2)time_list结构里expires是标明这个时钟的周期,单位采用jiffies的单位。
(3)"function"就是时间到了以后的回调函数,它的参数就是timer_list中的data。
(4)data这个参数在初始化时钟的时候赋值,一般赋给它设备的device结构指针。
(5)在预置时间到系统调用function,同时系统把这个time_list从定时队列里清除,
   如果需要一直使用定时函数,要在function里再次调用mod_timer()。

四、代码实例   
这一小段代码实现的是每秒打印一次hello

struct test_data
{
    struct timer_list test_timer;
};

struct test_data *exam;  

void poll_func(unsigned long arg)
{
    printk("hello\n");
    mod_timer(&(exam->test_timer), jiffies + HZ*1);

}

exam = kzalloc(sizeof(*exam), GFP_KERNEL);
init_timer(&exam->test_timer);
exam->test_timer.function = poll_func;
exam->test_timer.data = 0;
exam->test_timer.expires = jiffies + HZ*1;
add_timer(&(exam->test_timer));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值