Linux 内核定时器
来源:互联网 发布:网站源码小偷破解版 编辑:程序博客网 时间:2024/05/24 11:15
定时器,有时也称为动态定时器或内核定时器,是管理内核时间的基础
内核经常要推迟执行一些代码,如下半部机制就是为了将工作推后执行
时钟中断由系统的定时硬件以周期性的时间间隔产生,这个间隔(即频率)由内核根据HZ来确定
每当时钟中断发生时,全局变量jiffies(unsigned long)就加1,因此jiffies记录了自linux启动后时钟中断发生的次数。
内核定时器用于控制某个函数(定时器处理函数)在未来的某个特定时间执行。
内核定时器注册的处理函数只执行一次--不是循环执行的。(定时器并不周期运行,它在超时后就自行销毁,动态
定时器不断地创建和销毁,而且它的运行次数也不受限制)
定时器的使用只须执行一些初始化工作,设置一个超时时间,指定超时发生后执行的函数,然后激活定时器就可以了
1. 定时器结构timer_list
include/linux/timer.h
struct timer_list {
struct list_head entry;//定时器链表的入口
unsigned long expires;//定时器到期时间
struct tvec_base *base;
void (*function)(unsigned long);//定时器处理函数
unsigned long data;//传给定时器处理函数的长整形参数
int slack;
...
};
2. 定时器的使用
1)定义一个定时器结构
struct timer_list timer;
2)初始化定时器
有很多接口函数可以初始化定时器
init_timer(struct timer_list* timer);
TIMER_INITIALIZER(_function, _expires, _data);
DEFINE_TIMER(_name, _function, _expires, _data);
通常可以这样初始化定时器并赋值func,data
setup_timer(&timer, gpio_keys_timer, (unsigned long)data);
定时器处理函数
static void gpio_keys_timer(unsigned long data)
{
schedule_work(&work);
}
3)增加定时器,并激活定时器
void add_timer(struct timer_list* timer);
注册内核定时器,并将定时器加入到内核动态定时器链表中
4)删除定时器
int del_timer(struct timer_list *timer);
del_timer_sync(struct timer_list *timer);
del_timer_sync()是del_timer()的同步版,在删除一个定时器时需等待其被处理完(不能在中断上下文中使用)
5)修改定时器的expire,并启动
int mod_timer(struct timer_list *timer, unsigned long expires);
mod_timer(&timer, jiffies + msecs_to_jiffies(50));//未考虑jiffies溢出问题
msecs_to_jiffies()用于将ms转换成jiffies
- linux-内核-内核定时器
- Linux嵌入式 -- 内核 - 内核定时器
- Linux 内核开发 - 内核定时器
- Linux内核定时器
- linux 内核定时器
- linux内核定时器分析
- Linux内核定时器
- Linux内核定时器
- Linux 2.6 内核定时器
- linux内核定时器
- Linux内核定时器
- linux内核定时器编程
- linux内核定时器
- Linux内核定时器
- linux内核定时器
- linux 内核定时器编程
- linux 内核定时器
- linux内核定时器
- C# winform DataGridt将行中标记字段转换为要展示的字段名称 比如0,1转换为是或否
- 源码安装rsyslog
- html5新版桌面通知
- ListView的精确定位 和 自下而上展示的ListView
- The Most Popular Java API Classes 地址
- Linux 内核定时器
- Python - Requests 模拟 DWR框架的请求
- pom.xm配置解析
- 基于Hadoop生态圈的数据仓库实践 —— 进阶技术(十一)
- HTTP错误码详解
- html5之Canvas绘制刮刮卡
- 解决 - java.lang.OutOfMemoryError: unable to create new native thread
- 阿里云安装jdk
- Android apk代码中动态设置背景图片