Chinaunix首页 | 论坛 | 博客
  • 博客访问: 286029
  • 博文数量: 59
  • 博客积分: 1346
  • 博客等级: 中尉
  • 技术积分: 461
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-06 17:17
文章分类

全部博文(59)

文章存档

2012年(9)

2011年(50)

分类: LINUX

2011-01-24 12:13:24

 一 度量时间
内核的时钟中断默认是1000HZ,也就是1s钟发生了1000次中断。 时钟中断发生时,全局变量

jiffies(unsigned long)就加1,因此 jiffies记录了自linux启动后时钟中断发 生的次数。

驱动程序常利用jiffies来计算不同事件间的时间间隔。

 

二 延迟执

 

如果对延迟的精度要求不高,最简单的 实现方法如下--忙等待:

unsigned long j=jiffies + jit_delay*HZ;

while (jiffies

{

/* do nothing */

这就意味着延迟了jit_delay*HZ时间。

 

三 内核定时器

定时器用于控制某个函数(定时器 处理函数)在未来的某个特定时间执行。内核定时器注册的处理函数

只执行一次,不是循环执行的。

 

 

内核定时器被组织成  向链表,并使用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);

在定时器超时前将它删除。  定时器超时后,系统会 自动将他删除

 

国嵌实验代码   timer.rar   

阅读(1504) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~