Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108484
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 287
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-01 19:56
文章分类
文章存档

2017年(6)

2016年(21)

2015年(8)

我的朋友

分类: 嵌入式

2016-03-16 23:16:10

内核定时器是内核用来控制在未来某个时间点(基于 jiffies)调度执行某个函数的一种
机制,其实现位于 和 kernel/timer.c 文件中。

内核定时器的结构描述
struct timer_list {            
    struct list_head entry;           //内核初始化
    unsigned long expires;          //超时的jiffies值
    void (*function)(unsigned long);      //超时处理函数
    unsigned long data;             //超时处理函数的参数
    struct tvec_base *base;          //内核初始化
};

expires 字段表示期望定时器执行的 jiffies 值,到达该 jiffies 值时,将调用 function处理
函数,并传递 data 作为参数。

当一个定时器被注册到内核之后,entry 字段用来连接该定
时器到一个内核链表中。base 字段是内核内部实现所用的。
init_timer注册定时器,内核自动帮你初始化两个参数entry和base,剩下三个需要自己初始化
需要注意的是 expires 的值是 32 位的,因为内核定时器并不适用于长的未来时间点

使用定时器流程
1.注册定义timer_list结构描述
2.初始化定时器init_timer.
3.给timer_listexpires(到期时间),data(函数参数),function(处理函数)初始化。
4.调用add_timer将timer加入列表,启动定时器
5.在程序中涉及timer控制的地放适当调用del_timer,mod_timer来删除或者修改timer的expires


  1. #include <linux/module.h>
  2. #include <linux/timer.h>
  3. #include <linux/jiffies.h>

  4. struct timer_list timer;

  5. void timer_function(int para)
  6. {
  7.     printk("<0>Timer Expired and para is %d !!\n",para);    
  8. }

  9. int timer_init()
  10. {
  11.     init_timer(&timer);    
  12.     timer.data = 5;
  13.     timer.expires = jiffies + (20*HZ);
  14.     timer.function = timer_function;
  15.     add_timer(&timer);
  16.     
  17.     return 0;
  18. }

  19. void timer_exit()
  20. {
  21.     del_timer(&timer);    
  22. }

  23. module_init(timer_init);
  24. module_exit(timer_exit);S123456


阅读(1279) | 评论(0) | 转发(0) |
0

上一篇:linux 串口

下一篇:linux 中断驱动详解

给主人留下些什么吧!~~