Linux驱动定时器使用示例

描述

定时器使用示例

使用步骤:

1、调用init_timer初始化一个定时器,给struct timer_list各成员赋值。

2、调用add_timer将定时器添加到内核定时器链表,时间到后回调函数自动调用,用mod_timer修改expires的值可实现循环定时。

3、不需要定时器时,调用del_timer删除。

单次定时

加载驱动一秒钟后,打印出“timer handler, data:520”:

#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >

#include < linux/sched.h >//jiffies在此头文件中定义
#include < linux/timer.h >//struct timer_list

struct timer_list timer;

static void timer_handler (unsigned long arg)
{
 printk("timer handler, data:%dn", arg);
}

static int __init my_init(void)
{
 printk("%s entern", __func__);

 init_timer(&timer);
 timer.expires = get_jiffies_64() + msecs_to_jiffies(1000);//定时1秒
 timer.function = timer_handler;
 timer.data = 520;
 add_timer(&timer);

    return 0;
}

static void __exit my_exit(void)
{
 printk("%s entern", __func__);
 del_timer(&timer);
}

module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");

循环定时

实现循环定时就是在定时时间到了之后, 调用mod_timer函数再次修改定时时间

每隔一秒钟打印“timer handler, data:520

#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >

#include < linux/sched.h >//jiffies在此头文件中定义
#include < linux/timer.h >//struct timer_list

struct timer_list timer;

static void timer_handler (unsigned long arg)
{
 printk("timer handler, data:%dn", arg);

 mod_timer(&timer, get_jiffies_64() + msecs_to_jiffies (1000));
}

static int __init my_init(void)
{
 init_timer(&timer);
 timer.expires = get_jiffies_64() + msecs_to_jiffies (1000);//定时1秒
 timer.function = timer_handler;
 timer.data = 520;
 add_timer(&timer);

    return 0;
}

static void __exit my_exit(void)
{
 del_timer(&timer);
}

module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分