您的位置:首页 > 运维架构 > Linux

linux3.4.2内核定时器time_list的使用

2016-10-27 00:56 405 查看
在有些驱动程序中,我们需要用定时的功能去扫描一个硬件,或者说成去执行一个函数,那么我们可以采用内核动态定时器:

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.定义一个内核定时器

2.初始化内核结构体
        init_timer(&xxx_timer);
xxx_timer.function = xxx_timer_function;
add_timer(&buttons_timer);

    xxx_timer.function = xxx_timer_function这里就是指定定时时间到时,去执行的函数,其实干脆就叫定时器中断得了。

3.修改定时器的值:

mod_timer(&xxx_timer, jiffies+HZ/100);

   将定时器的值设置为当前的内核计时器值+HZ/100,意思就是10ms以后执行xxx_timer_function函数,干脆叫定时器中断服务程序。

   jiffies是内核的一个时钟节拍,研究过操作系统的都知道,相当于是这个CPU只要在工作,这个值就在++。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: