本文主要是介绍内核学习——6、timer的学习和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
timer常用接口:
- 1、初始化timer:
void init_timer_key()
{
debug_init();
do_init_timer(); //这里初始化了一些通用性参数,也初始化了链表节点
} - 2、初始化完成后,需要使用add_timer函数将初始化的参数加到定时器链表中去
注意:内核定时器是一个单次的定时器
void add_timer()
{
BUG_ON(timer_pending(timer)); //检查该timer有没有被挂起
mod_timer(timer, timer->expires); //,没有被挂起,则修改定时器到期时间
}
mod_timer函数还是调用mod_timer函数来加入定时器链表中的 - 3、删除定时器:
del_timer - 4、简单实例:
#include <linux/time.h>
/* 定义一个定时器指针*/
static struct timer_list *timer;
/参数是timer中的变量data/
void func_handle(unsigned long data)
{
//做想做的事情
/因为内核定时器是一个单次的定时器,所以如果想要多次重复定时时需要在定时器绑定的函数结尾重新装载时间,并启动定时/
/kernel timer restatr/
mod_timer(timer, jiffies + HZ/50)
}
int xx_init(void)
{
timer = kzalloc(sizeof(struct timer_list), GFP_KERNEL)
…
init_timer(timer); //初始化定时器
timert->function = func_handle; //绑定定时时间到后的执行函数
timer->expites = jiffres + (HZ/50); //定时的时间点,当前时间的20ms之后
add_timer(timer); //添加并启动定时器
}
void xxx_exit(void)
{
…
del_timer(timer);
}
module_init(xxx_init);
module_exit(xxx_exit);
MODULE_LICENSE(“GPL”);
这篇关于内核学习——6、timer的学习和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!