Linux内核定时器(标准定时器)

1、分配对象

struct timer_list {
	struct hlist_node	entry;                  // 内核链表
	unsigned long		expires;                // 定时器超时时间,单位是节拍数
	void			(*function)(unsigned long); // 定时器处理函数
	unsigned long		data;                   // 向定时器函数传递的参数
}

其中expires的单位是节拍数,节拍数等于 1 / HZ,而HZ是内核中定义好的,比如说内核中定义的HZ为100, jiffies(jiffies记录了系统启动后的滴答数)就会增加100。

2、初始化定时器

//初始化定时器
void timer_setup(struct timer_list *timer, void (*func)(struct timer_list *), 
            unsigned int flags)

//修改或者再次启动定时器
int mod_timer(struct timer_list *timer, unsigned long expires)

3、启动定时器

//启动定时
void add_timer(struct timer_list *timer)

//再次启动定时器
int mod_timer(struct timer_list *timer, unsigned long expires)

4、删除定时器

//删除定时器
int del_timer(struct timer_list *timer)

5、总体驱动代码 

struct timer_list mytimer;

void timer_function(unsigned long data) 
{
	mod_timer(&mytimer,jiffies+HZ);
}

static int __init mycdev_init(void)
{
    mytimer.expires = jiffies+HZ;  //加HZ就可以在任何系统上都是1s的定时
    timer_setup(&mytimer,timer_function,0);
    add_timer(&mytimer);
}

static void __exit mycdev_exit(void) 
{
	del_timer(&mytimer);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值