Linux内核中提供了timer使用的API,做一个简单的记要。

1. 包含的头文件:linux/timer.h

2. 数据类型:struct timer_list;

包含的主要成员:
a. data:传递到超时处理函数的参数,主要在多个定时器同时使用时,区别是哪个timer超时。
b. expires:定时器超时的时间,以linux的jiffies来衡量。
c. void (*function)(unsigned long):定时器超时处理函数。
  • 1
  • 2
  • 3
  • 4
  • 5

3. 主要相关的API函数:

a. init_timer(struct timer_list*):定时器初始化函数;
b. add_timer(struct timer_list*):往系统添加定时器;
c. mod_timer(struct timer_list *, unsigned long jiffier_timerout):修改定时器的超时时间为jiffies_timerout;
d. timer_pending(struct timer_list *):定时器状态查询,如果在系统的定时器列表中则返回1,否则返回0;
e. del_timer(struct timer_list*):删除定时器。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4. 时间与jiffies的转换函数:

Linux系统中的jiffies类似于Windows里面的TickCount,它是定义在内核里面的一个全局变量,只是它的单位并不是秒或是毫秒。通常是250个jiffies为一秒,在内核里面可以直接使用宏定义:HZ。这里有几个时间和jiffies的相互转换函数:
unsigned int jiffies_to_msecs(unsigned long);
unsigned int jiffies_to_usecs(unsigned long);
unsigned long msecs_to_jiffies(unsigned int);
unsigned long usecs_to_jiffies(unsigned int);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5. 使用简例:

步骤:init_timer->[timer.expires=? & timer.function=?]->add_timer->[mod_timer]->del_timer.
  • 1
  • 2
#include <linux/init.h>
#include <linux/module.h>
#include <linux/timer.h>
struct timer_list timer;void timer_handler(unsigned long data) {printk(KERN_INFO"timer pending:%d\n", timer_pending(&timer));mod_timer(&timer, jiffies+msecs_to_jiffies(1000));printk(KERN_INFO"jiffies:%ld, data:%ld\n", jiffies, data);
}
int timer_init(void) {printk(KERN_INFO"%s jiffies:%ld\n", __func__, jiffies);printk(KERN_INFO"ji:%d,HZ:%d\n", jiffies_to_msecs(250), HZ);init_timer(&timer);timer.data = 45;timer.function = timer_handler;timer.expires = jiffies + HZ;add_timer(&timer);printk(KERN_INFO"timer pending:%d\n", timer_pending(&timer));return 0;
}void timer_exit(void) {printk(KERN_INFO"%s jiffies:%ld\n", __func__, jiffies);del_timer(&timer);
}module_init(timer_init);
module_exit(timer_exit);
MODULE_LICENSE("GPL");

内核定时器timer_list使用相关推荐

  1. 【Linux开发】linux设备驱动归纳总结(七):2.内核定时器

    linux设备驱动归纳总结(七):2.内核定时器 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  2. Linux 内核定时器使用 二 高精度定时器 hrtimer 的用例

    之前介绍了timer_list内核定时器,它的精度在毫秒级别,再高一点它就无能为力了,所幸内核提供了高精度定时器 hrtimer. 源文件在linux/kernel/hrtimer.c中.接口简单.下 ...

  3. Linux 内核定时器使用 一 低精度定时器

    内核定时器是一个数据结构,它告诉内核在用户定义的时间点使用用户定义的参数来执行一个用户定义的函数.其实现位于 <linux/timer.h>中. 内核提供了一组用来声明.注册和删除内核定时 ...

  4. Linux 内核定时器实验————复习到这

    目录 Linux 时间管理和内核定时器简介 内核时间管理简介 内核定时器简介 Linux 内核短延时函数 硬件原理图分析 实验程序编写 修改设备树文件 定时器驱动程序编写 编写测试APP 运行测试 编 ...

  5. linux内核定时器编程

    1.linux内核定时器基本结构和函数 1)struct timer_list 一个struct timer_list对应了一个定时器. #include <linux/timer.h> ...

  6. (十二)linux内核定时器

    目录 (一)内核定时器介绍 (二)内核定时器相关接口 (三)使用步骤 (四)实例代码 (一)内核定时器介绍 内核定时器并不是用来简单的定时操作,而是在定时时间后,触发事件的操作,类似定时器中断,是内核 ...

  7. android 全局定时器,高通Android LED驱动移植-GPIO,内核定时器

    有些设备需要有灯的闪烁来表达一些含义,比如电池电量.利用GPIO实现灯的灭.亮.慢闪.快闪需要配合内核定时器来实现. 首先我们找到高通内核自带的LED相关的文件, /kernel/driver​s/l ...

  8. Linux内核——定时器和时间管理

    定时器和时间管理 系统定时器是一种可编程硬件芯片.它能以固定频率产生中断.该中断就是所谓的定时器中断.它所相应的中断处理程序负责更新系统时间,还负责执行须要周期性执行的任务. 系统定时器和时钟中断处理 ...

  9. linux内核定时器 详解,Linux系统内核定时器机制详解(下)

    7.6.3.4 把一个定时器插入到链表中 函数add_timer()用来把参数timer指针所指向的定时器插入到一个合适的定时器链表中.它首先调用timer_pending()函数判断所指定的定时器是 ...

最新文章

  1. 实战:使用 OpenCV 的自动驾驶汽车车道检测(附代码)
  2. redis操作大数据
  3. 阿里云帮助江苏省财政厅力推统一公共支付平台
  4. 3秒取暖,超高颜值!冬日必备的大宇取暖器
  5. 企业实战_03_MyCat下载、安装、启动
  6. Flask 开发填坑
  7. Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx
  8. 使用Liquid实现简单的数据交换
  9. Myeclipse 10破解run.bat和cracker.jar打不开的问题
  10. matlab对数组中的某一列进行排序
  11. REST Assured 56 - JSON Schema Validation Without Rest Assured
  12. 基于cooja的RPL OF的修改与仿真
  13. Origin | 数据处理 | 公式编辑栏 | F(x)栏的使用 | 数据提取 | 数据筛选及删减
  14. Pr零基础入门指南笔记一——项目、序列、预设
  15. linux蓝屏漏洞,WIN 10漏洞:访问特定本地设备导致系统崩溃
  16. OpenHarmony 软总线lite 源码分析
  17. [2016ACM多校] HDU5784 极角序 正难则反
  18. gitlab备份与恢复
  19. RIP协议;OSPF协议;BGP协议
  20. 删除Windows服务

热门文章

  1. 关于手机端CSS Sprite图标定位的一些领悟
  2. android:configChanges属性总结
  3. MVC学习笔记1 MVC概述
  4. mysql数据库version版本控制_MySQL数据库版本控制
  5. Linux装ntfs后内存不够,Linux_安装Ubuntu后无法使用NTFS硬盘或移动硬盘,  在安装Ubuntu系统后,存在 - phpStudy...
  6. linux的kerne启动过程,linux
  7. php试卷A高质量含答案,php试卷A高质量含答案
  8. url存在宽字节跨站漏洞_利用WebSocket跨站劫持(CSWH)漏洞接管帐户
  9. 2014编程之美资格赛
  10. 操作系统上机题目(多进程1)