linux内核定时器--------一个简单的timer的实现
2012-03-06 11:17
274 查看
时钟中断由系统的定时硬件以周期性的时间间隔来产生,这个间隔由内核根据HZ来确定,HZ是一个与体系结构无关的常熟,可配置在(50-----200),x86上默认的1000(每秒产生1000次中断)。
当时钟中断时,全局变量jiffies就加1,jiffiies则计算出产生了多少次的中断。如:
这就是一个延迟的内核程序了。
定时器用于控制某个函数在某个特定的时间执行,内核定时器注册的处理函数,只能执行一次。
内核定时器被组织成双向的链表,用struct timer_list 结构来描述秒个定时器。struvt timer_list 结构体如下:
操作定时器的函数通常有以下几个:
void init_timer(struct timer_list *timer) 定时器的初始化
void add_timer(struct timer_list *timer) 启动定时器
void del_time(struct timer_list *timer) 在定时超时之前删除它。但定时器超时后,内核自动会删除它。
来看个例:
加入内核进行编译,再传到开发板上,innsmod timer.ko 20秒后加入不rmmod timer.ko 的话则会有超时的提醒。
这就是一个最简单的一个timer定时的驱动程序了。
当时钟中断时,全局变量jiffies就加1,jiffiies则计算出产生了多少次的中断。如:
unsigned long j = jiffies + jit_delay*HZ while(jiffies < j) { do something; }
这就是一个延迟的内核程序了。
定时器用于控制某个函数在某个特定的时间执行,内核定时器注册的处理函数,只能执行一次。
内核定时器被组织成双向的链表,用struct timer_list 结构来描述秒个定时器。struvt timer_list 结构体如下:
struct timer_list{ struct list_head entry /*内核使用*/ unsigned list_head expire /超时的jiffies 的值*/ void (*function)(unsigned log)/*超时的处理函数*/ unsigned long data/*超时处理函数的参数*/ struct tvec_base *base /*内核使用*/}
操作定时器的函数通常有以下几个:
void init_timer(struct timer_list *timer) 定时器的初始化
void add_timer(struct timer_list *timer) 启动定时器
void del_time(struct timer_list *timer) 在定时超时之前删除它。但定时器超时后,内核自动会删除它。
来看个例:
#include<linux/kernel.h> #include<linux/module.h> #include<linux/init.h> #include<linux/timer.h>/*timer*/ #include<asm/uaccess.h>/*expires*/ MODULE_LISENCE("GPL"); MODULE_AUTHOR("KK"); MODULE_DESCRIPTION("TIME MODULES"); MODULE_ALIAS("time modules"); struct timer_list timer; void timer_function(int para) { prink("<0>timer is expires and the para is %d\n",para); } timer_init() { timer_init(&timer); timer.data= 5; time.expires = jiffies + (20*jiffies); timer_function = timer_function; add_timer(&timer); return 0; } timer_exit() { del_timer(&timer); } module_init(timer_init); module_exit(timer_exit);
加入内核进行编译,再传到开发板上,innsmod timer.ko 20秒后加入不rmmod timer.ko 的话则会有超时的提醒。
这就是一个最简单的一个timer定时的驱动程序了。
相关文章推荐
- 简单实现一个Unity3d的Timer
- 实现了一个简单的timer
- 实现了一个简单的timer
- 写一个python脚本,实现简单的http服务器功能:
- C语言实现的一个简单的万年历
- 用Python实现一个简单的WebSocket服务器
- Swift - 简单实现一个tableView
- iOS 一个简单的实现星级评分的方法
- java web 项目中 简单定时器实现 Timer
- asp.net core 实现一个简单的仓储
- 一个简单二叉树的C++实现(一)
- Java实现一个简单的RPC框架(二) 协议
- 用Ajax实现一个简单的进度条
- Java经典实例:实现一个简单堆栈
- 通过socket和Udp协议简单实现一个群体聊天工具(控制台)
- 一个简单的二叉搜索树(C++实现)
- 一个简单的一致性哈希算法实现(Java版本)
- 《uCOS51移植心得》---七年前之《快快乐乐跟我学51单片机操作系统和IP栈》 第七部分一个简单Ping的实现
- 一个简单的智能指针实现
- 一个简单的自定义EditText控件实现