linux驱动之定时任务timer,队列queue,小任务tasklet机制及用法

本文介绍了Linux内核中的定时任务、小任务tasklet机制以及工作队列的使用方法。包括内核定时器的初始化和调度,tasklet的使能与失能,工作队列的创建、调度和取消,以及它们各自的特点和应用场景。
摘要由CSDN通过智能技术生成

1:内核定时器:

在内核中有系统自带的定时器,达到一定的时间就可以进行一个操作,这个和单片机中的定时器中断一样。

包含头文件是

Timer.h (\include\linux)
结构体是timer_list

struct timer_list{
	/*
	 * All fields that change during normal runtime grouped to the
	 * same cacheline
	 */
	struct list_head entry;
	unsigned long expires;
	struct tvec_base *base;

	void (*function)(unsigned long);
	unsigned long data;

	int slack;

#ifdef CONFIG_TIMER_STATS
	int start_pid;
	void *start_site;
	char start_comm[16];
#endif
#ifdef CONFIG_LOCKDEP
	struct lockdep_map lockdep_map;
#endif
};
@1:unsigned long expires;   定时的时间

@2:void (*function)(unsigned long);  具体执行的函数

@3:unsigned long data;          作为参数 传入function函数


使用方法:

(1) 定义一个timer_list的对象 timer

(2)初始化timer中的data字段,function字段,expires的字段

(2) 调用init_timer(&timer)

或者是使用其他函数,这个用实例来讲,所属平台是amlogic中,驱动是key_pad

利用定时器,去不断轮询看那个键位按下

  setup_timer(&kp->timer, kp_timer_sr, (unsigned int)kp) ;
  mod_timer(&kp->timer, jiffies+msecs_to_jiffies(100));

其中setup_timer的定义是

#define setup_timer(timer, fn, data)					\
	__setup_timer((timer), (fn), (data), 0)

#define __setup_timer(_timer, _fn, _data, _flags)			\
	do {								\
		__init_timer((_timer), (_flags));			\
		(_timer)->function = (_fn);				\
		(_timer)->data = (_data);				\
	} while (0)
实际上仍然调用的是init_timer,调用的是kp_timer_sr,传入的数据的data。

mod_timer(&kp->timer, jiffies+msecs_to_jiffies(100));

int mod_timer(struct timer_list *timer, unsigned long expires)
{
	expires = apply_slack(timer, expires);

	/*
	 * This is a common optimization triggered by the
	 * networking code - if the timer is re-modified
	 * to be the same thing then just return:
	 */
	if (timer_pending(timer) && timer->expires == expires)
		return 1;

	return __mod_timer(timer, expires, false, TIMER_NOT_PINNED);
}
这个函数的作用是修改timer的定时时间。

</

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值