Linux驱动开发-9、Linux定时器

本文详细介绍了Linux内核定时器的使用,包括数据结构、初始化、添加、删除及修改定时器的方法。通过实例展示了如何在驱动编程中应用定时器,以及在中断底半部通过tasklet启动定时器,实现周期性任务。
摘要由CSDN通过智能技术生成

Linux定时器

1.定时器是对机器时钟中断的应用 -

2.内核提供一组数据结构来完成定时触发工作或者完成周期性的事务

3.操作系统中,一般不允许使用for循环来延时,一般使用定时器来完成延时功能

4.jiffies 表当前时间,HZ表示延迟1S

5.数据结构<linux/timer.h>

struct timer_list {

/*

 * All fields that change during normal runtime grouped to the

 * same cacheline

 */

struct list_head entry; /*定时器列表*/

unsigned long expires; /*定时器到期时间,以jiffy为单位*/

struct tvec_base *base; /**/

 

void (*function)(unsigned long);/*定时器到期处理函数*/

unsigned long data; /*作为参数被传入定时器处理函数*/

int slack;

....

};

 

6.相关函数

a) 初始化定时器

法一:

#define init_timer(timer)\

init_timer_key((timer), NULL, NULL)

 

void init_timer_key(struct timer_list *timer, const char *name,struct lock_class_key *key)

{

debug_init(timer);

__init_timer(timer, name, key);

}

 

static void __init_timer(struct timer_list *timer,const char *name,struct lock_class_key *key)

{

timer->entry.next = NULL;

timer->base = __raw_get_cpu_var(tvec_bases);

timer->slack = -1;

..

lockdep_init_map(&timer->lockdep_map, name, key, 0);

}

注:init_timer()宏初始化<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值