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:内核定时器
内核定时器用于控制某个函数(定时器处理函数)在未来的某个特定时间执行。内核定时器注册的处理函数只执行一次,不是循环执行的。
内核定时器的操作函数
#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);
}