一 度量时间
内核的时钟中断默认是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 | | | | | |
阅读(1511) | 评论(0) | 转发(0) |