欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux内核定时器

程序员文章站 2022-06-09 13:08:06
...

jiffies记录了自linux启动后时钟中断发生的次数(每当时钟中断发生后,全局变量jiffies就加1),驱动程序常用jiffies来计算不同事件间的时间间隔。

应用1:延迟执行

unsigned long j=jiffies+jit_delay*HZ;
while(jiffies < j)
{
    do something;//逻辑处理
}

应用2:内核定时器
内核定时器用于控制某个函数(定时器处理函数)在未来的某个特定时间执行。内核定时器注册的处理函数只执行一次,不是循环执行的。

内核定时器的操作函数
Linux内核定时器
Linux内核定时器

#include <linux/device.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/timer.h>
#include <asm/uaccess.h>
#include <linux/jiffies.h>


MODULE_LICENSE("GPL");

struct timer_list timer;

void timer_function(int para)
{
     printk("<0>Timer Expired and para is %d !!!\n",para);
}

static int __init timer_init(void)
{
        init_timer(&timer);
        timer.data = 5;
        timer.expires = jiffies + (20 * HZ);
        timer.function = timer_function;
        add_timer(&timer);

        return 0;
}


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