Linux-内核定时器

2018-08-13  本文已影响0人  嵌入式工作

主要内容: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");
上一篇下一篇

猜你喜欢

热点阅读