zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    [学习笔记]设计模式之Bridge
    整数划分问题 动态规划
    powershell 发邮件
    python 对象序列化并压缩
    python的序列化与反序列化(例子:dict保存成文件,文件读取成dict)
    ACM-ICPC 2018 world final A题 Catch the Plane
    AlphaPose论文笔记《RMPE: Regional Multi-person Pose Estimation》
    《DensePose: Dense Human Pose Estimation In The Wild》阅读笔记
    [转]tensorflow 中的卷积conv2d的padding 到底要padding多少
    OpenPose论文笔记《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》
  • 原文地址:https://www.cnblogs.com/defen/p/4728619.html
Copyright © 2011-2022 走看看