定時器使用示例
使用步驟:
1、調(diào)用init_timer
初始化一個定時器,給struct timer_list
各成員賦值。
2、調(diào)用add_timer
將定時器添加到內(nèi)核定時器鏈表,時間到后回調(diào)函數(shù)自動調(diào)用,用mod_timer
修改expires
的值可實現(xiàn)循環(huán)定時。
3、不需要定時器時,調(diào)用del_timer
刪除。
單次定時
加載驅(qū)動一秒鐘后,打印出“timer handler, data:520
”:
#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >
#include < linux/sched.h >//jiffies在此頭文件中定義
#include < linux/timer.h >//struct timer_list
struct timer_list timer;
static void timer_handler (unsigned long arg)
{
printk("timer handler, data:%dn", arg);
}
static int __init my_init(void)
{
printk("%s entern", __func__);
init_timer(&timer);
timer.expires = get_jiffies_64() + msecs_to_jiffies(1000);//定時1秒
timer.function = timer_handler;
timer.data = 520;
add_timer(&timer);
return 0;
}
static void __exit my_exit(void)
{
printk("%s entern", __func__);
del_timer(&timer);
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
循環(huán)定時
實現(xiàn)循環(huán)定時就是在定時時間到了之后, 調(diào)用mod_timer函數(shù)再次修改定時時間 。
每隔一秒鐘打印“timer handler, data:520
”
#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >
#include < linux/sched.h >//jiffies在此頭文件中定義
#include < linux/timer.h >//struct timer_list
struct timer_list timer;
static void timer_handler (unsigned long arg)
{
printk("timer handler, data:%dn", arg);
mod_timer(&timer, get_jiffies_64() + msecs_to_jiffies (1000));
}
static int __init my_init(void)
{
init_timer(&timer);
timer.expires = get_jiffies_64() + msecs_to_jiffies (1000);//定時1秒
timer.function = timer_handler;
timer.data = 520;
add_timer(&timer);
return 0;
}
static void __exit my_exit(void)
{
del_timer(&timer);
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40293 -
驅(qū)動
+關(guān)注
關(guān)注
12文章
1840瀏覽量
85296 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209539 -
定時器
+關(guān)注
關(guān)注
23文章
3248瀏覽量
114833
發(fā)布評論請先 登錄
相關(guān)推薦
評論