美文网首页
Linux-内核定时器

Linux-内核定时器

作者: 嵌入式工作 | 来源:发表于2018-08-13 11:28 被阅读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");
    

    相关文章

      网友评论

          本文标题:Linux-内核定时器

          本文链接:https://www.haomeiwen.com/subject/mubybftx.html