• linux内核定时器


    linux内核定时器
    度量时间差:时钟每隔一段时间就会产生一次中断,这是由系统的定时硬件以周期性的时间间隔产生,这个间隔由内核根据HZ来确定。每当时钟中断发生时,全局变量jiffies(unsigned long)就加1,因此jiffies(当前的时间点)记录了自linux启动后时钟中断发生的次数,驱动程序常利用jiffies来计算不同事件间的时间间隔。
    例如对延迟实现:
    unsigned long j=jiffies+jit_delay*HZ
    while (jiffies<j)
    {
    .............单位为s(秒)
    }

    --------------------------------------------------------------------------

    定时器:
    用于控制某个函数在未来的某个特定的时间执行,内核定时器注册的处理函数只执行一次。
    内核定时器被组织成双向链表,并使用struct timer-list结构描述。
    struct timer_list{
    struct list_head entry;/*内核使用*/
    unsigned long expires;/*超时的jiffies值*/
    void(*function)(unsigned long);/*超时处理函数*/
    unsigned long data;/*超时处理函数参数*/
    struct tvec_base *base;/*内核使用*/
    };

    ---------------------------------------------------------------------------------

    定时器操作:
    void init_timer(struct timer_list *timer);
    初始化定时器队列结构。
    void add_timer(struct timer_list *timer);
    启动定时器
    int del_timer(struct timer_list *timer);
    在定时器超时前将它删除,当定时器超时后,系统会自动地将它删除。

    -----------------------------------------------------------------------------------

    #include<linux/kernel.h>
    #include<linux/module.h>
    #include<linux/init.h>
    #incluee<linux/timer.h>
    #include<asm/uaccess.h>

    MODULE_LICENSE("GPL");

    struct timer_list timer;
    void timer_function(int para){
    printk("<0>Timer Expired and para is %d!! ",para);

    }
    int timer_init(){
    init_timer(&timer);//定时器初始化
    timer.data = 5;//定时函数的参数
    timer.expires = jiffies+(20*HZ);设置定时为20s
    timer.function = timer_function;//para这个参数有data传过来,定时过后执行的函数
    add_timer(&timer);//启动定时器
    return 0;

    void timer_exit(){
    del_timer(&timer);//定时器删除
    }
    module_init(timer_init);
    module_exit(timer_exit);

  • 相关阅读:
    ACM: SCU 4440 Rectangle
    ACM: NBUT 1646 Internet of Lights and Switches
    ACM: Long Live the Queen
    ACM: Racing Gems
    C++ 11 笔记 (一) : lambda
    cocos2d-x笔记2: 编译到安卓的步骤与注意事项
    C++笔记1: 单例模式。(一个简单的设计模式在C++中复杂出翔。。)
    Java笔记2 : 泛型的体现,及其上限、下限、通配符
    我终于忍不住喷一下某些书了,关于Java传引用的XX言论
    Java笔记1 : 在生产者消费者模式中,线程通信与共享数据,死锁问题与解决办法
  • 原文地址:https://www.cnblogs.com/defen/p/4728619.html
Copyright © 2020-2023  润新知