linux内核-定时机制API函数

388 阅读4分钟
mindmap
      定时机制API
          init_timer
          mod_timer
          add_timer
          del_timer
          current_kernel_time
          msecs_to_jiffies
          jiffies_to_msecs
          usecs_to_jiffies

init_timer

init_timer函数功能描述

  • 函数init_timer( )用于初始化结构体struct timer_list变量,将此结构体变量存储的定时器插入到系统内核定时器模块中,并确定由哪个CPU处理。

init_timer函数定义

init_timer(struct timer_list *timer);

init_timer输入参数说明

  • 此函数的输入参数是struct timer_list类型的变量,此变量用于存放动态定时器。

init_timer返回参数说明

  • 函数init_timer()返回值是void类型的变量,即不返回任何结果。

init_timer实例解析

struct timer_list timer;
init_timer(&timer);
timer.function = function; /* 设置定时处理函数 */
timer.expires=jffies + msecs_to_jiffies(2000);/* 超时时间 2 秒 */
timer.data = (unsigned long)&dev; /* 将设备结构体作为参数 */

setup_timer

setup_timer函数功能描述

  • 与init_timer()类似,初始化timer

setup_timer函数定义

setup_timer(struct timer_list *timer, static void (*fn),unsigned long *data);

setup_timer输入参数说明

  • 第一个参数是struct timer_list类型的变量,此变量用于存放动态定时器,是即将要被初始化的对象。
  • 第二个参数是定时器到期时将要执行的函数,用于给定时器变量的function字段赋值。
  • 第三个参数用于给定时器变量的data字段赋值。

setup_timer返回参数说明

  • 函数setup_timer()返回值是void类型的变量,即不返回任何结果。

setup_timer实例解析

struct gpio_desc{
	int gpio;
	int irq;
	char *name;
	int key;
	struct timer_list key_timer;
};
static struct gpio_desc gpios[2] = {
    {131, 0, "gpio_100ask_1", 1, },
    {132, 0, "gpio_100ask_2", 2, },
};
setup_timer(&gpios[i].key_timer, fn_name, (unsigned long)&gpios[i]);

add_timer

add_timer函数功能描述

  • 根据参数struct timer_list变量的expires值将定时器插入到合适的动态定时器的链表中,并激活定时器。

add_timer函数定义

void add_timer(struct timer_list *timer)

add_timer输入参数说明

  • 函数add_timer()入参strcut timer_list结构体

add_timer返回参数说明

  • 函数add_timer( )返回值是void类型的变量,即不返回任何结果。

add_timer实例解析

add_timer(&gpios[i].key_timer);

mod_timer

mod_timer函数功能描述

  • 主要用于更改动态定时器的到期时间,从而可更改定时器的执行顺序,相当于执行如下代码序列:
del_timer(timer);
timer->expires=expires;
add_timer(timer);

mod_timer函数定义

int mod_timer(struct timer_list *timer, unsigned long expires)

mod_timer输入参数说明

  • 第一个输入参数是struct timer_list类型的变量,用于存放动态定时器,其定义及详细信息参考add_timer( )分析文档的输入参数说明部分。
  • 第二个参数是传入的新的定时器到期节拍数,把此参数赋给定时器的字段expires。

mod_timer返回参数说明

  • 返回0:调用 mod_timer 函数前定时器未被激活;
  • 返回1:调用 mod_timer 函数前定时器已被激活。

mod_timer实例解析

/* 1HZ = 1s  = 1000ms  HZ/5 = 200ms */
mod_timer(&gpio_desc->key_timer, jiffies + HZ/5);
或者
mod_timer(&gpio_desc->key_timer, jiffies + msecs_to_jiffies(2000));/* 超时时间2s*/

del_timer

del_timer函数功能描述

  • 函数del_timer( )用于将处于非活动状态的定时器从动态定时器链表中删除。

del_timer函数定义

void add_timer(struct timer_list *timer)

del_timer输入参数说明

  • 此函数的输入参数是struct timer_list类型的变量,此变量用于存放动态定时器。

del_timer返回参数说明

  • 返回1:说明删除的定时器处于激活状态,删除成功;
  • 返回0:说明删除的定时器已经处于到期函数执行状态或已经不存在,删除无效。

current_kernel_time

current_kernel_time函数功能描述

  • 用于获得当前系统内核的时间,该时间是距离1970年1月1日0时0分0秒的时间,是用秒和纳秒表示的。

current_kernel_time函数定义

struct timespec current_kernel_time(void)

current_kernel_time输入参数说明

  • 该函数不需要任何参数。

current_kernel_time返回参数说明

  • 函数返回值类型是一个struct timespec类型的结构体变量。
struct timespec 
{
    __kernel_time_t  tv_sec;         /*秒数 */
    long             tv_nsec;        /*纳秒数*/
};

msecs_to_jiffies

msecs_to_jiffies函数功能描述

  • 将毫秒转换为 jiffies 类型

msecs_to_jiffies函数定义

long msecs_to_jiffies(const unsigned int m);

msecs_to_jiffies输入参数说明

  • 需要转化jiffies的毫秒数

msecs_to_jiffies输出参数说明

  • 返回 jiffies 数

jiffies_to_msecs

jiffies_to_msecs函数功能描述

  • jiffies 转毫秒

jiffies_to_msecs函数定义

int jiffies_to_msecs(const unsigned long j);

jiffies_to_msecs输入参数说明

  • 返回 jiffies 数

jiffies_to_msecs输出参数说明

  • 需要转化jiffies的毫秒数

usecs_to_jiffies

usecs_to_jiffies函数功能描述

微秒转 jiffies

usecs_to_jiffies函数定义

long usecs_to_jiffies(const unsigned int u);

usecs_to_jiffies输入参数说明

  • 需要转化jiffies的微秒数

usecs_to_jiffies输出参数说明

  • 返回 jiffies 数