主要内容:Linux-定时器
知识点:
1.Linux定时器基础知识
1.1 定时器的使用范围(延后执行某个操作,定时查询某个状态;前提是对时间要求不高的地方)
1.2 内核时间概念
HZ:(系统时钟通过CONFIG_HZ来设置,范围是100-1000;HZ决定时钟中断发生的频率)
内核的全局变量jiffies:(记录内核自启动来的节拍数,内核之启动以来,产生的中断数)
jiffies/HZ 内核自启动以来的秒数
2 内核定时器的例程
结构体timer_list,函数setup_timer,add_timer,del_timer,mod_timer
2.1 timer_list参数struct list_head entry 双向链表。
unsigned long expires;超时时间。记录什么时候产生时钟中断。
struct tvec_base base;管理时钟的结构体
void (function)(unsigned long);时钟中断产生之后的动作
unsigned long data;传递的参数
2.2 定时器的使用
启动定时器,1秒以后调用time_func
setup_timer(&demo_timer,time_func,(unsigned long) "demo_timer!");
demo_timer.expires = jiffies + 1*HZ;
add_timer(&demo_timer);
修改定时器(只能在没有dle之前使用)
mod_timer(&demo_timer,jiffies + 5*HZ);
关闭定时器
del_timer(&demo_timer);
#include "linux/module.h"
#include "linux/timer.h"
#include "linux/jiffies.h"
struct timer_list demo_timer;
static void time_func(unsigned long data)
{
printk("%s ,secs = %ld!\n",(char *)data,jiffies/HZ);
mod_timer(&demo_timer,jiffies + 5*HZ);
}
static int __init mytimer_init(void)
{
printk("mytimer_init!\n");
setup_timer(&demo_timer,time_func,(unsigned long) "demo_timer!");
demo_timer.expires = jiffies + 1*HZ;
add_timer(&demo_timer);
return 0;
}
static void __exit mytimer_exit(void)
{
printk("mytimer_exit!\n");
del_timer(&demo_timer);
}
module_init(mytimer_init);
module_exit(mytimer_exit);
MODULE_LICENSE("Dual BSD/GPL");
网友评论