• 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);

  • 相关阅读:
    C++调用WebService
    vs2005 环境的字体和颜色的设置
    自娱自乐~经典24点游戏
    再探利用C++的STL和堆栈编程思想实现数学四则运算计算结果
    如何在Linux中关闭apache服务(转)
    ios推送:本地通知UILocalNotification
    ASIHTTPRequest的使用(转)
    实战新浪微博、腾讯微博的分享功能(转)
    UIImagePickerController拍照与摄像(转)
    iOS通过http post上传图片 (转)
  • 原文地址:https://www.cnblogs.com/defen/p/4728619.html
Copyright © 2020-2023  润新知