Linux驱动-内核定时器
- Fang XS.
- 1452512966@qq.com
- 如果有错误,希望被指出
前言
- 内核定时器是一种类似闹钟的定时器。
- 内核定时器不能作为高精度定时器使用。
- 内核定时器默认只启动一次定时,要周期定时需要重新启动定时器。
内核定时器
- 头文件
#include <linux/timer.h> - 内核定时器使用
timer_list结构体进行描述
相关操作函数和宏
- 时间转换函数
| 函数名 | unsigned long usecs_to_jiffies(const unsigned int u) |
|---|
| 功能 | 将us转换成时钟节拍数 |
| 形参 | u 要转换的值 |
| 返回值 | 时钟节拍数 |
| 函数名 | unsigned long msecs_to_jiffies(const unsigned int m) |
|---|
| 功能 | 将ms转换成时钟节拍数 |
| 形参 | m 要转换的值 |
| 返回值 | 时钟节拍数 |
- 相关操作函数和宏
#define DEFINE_TIMER(_name, _function, _expires, _data) \
struct timer_list _name = \
TIMER_INITIALIZER(_function, _expires, _data)
| 函数原型 | #define init_timer(timer) |
|---|
| 函数功能 | 初始化定时器 |
| 函数参数 | timer要初始化的定时器 |
| 函数原型 | void add_timer(struct timer_list *timer) |
|---|
| 函数功能 | 向 Linux 内核注册定时器 |
| 函数参数 | timer要注册的定时器 |
| 函数返回值 | 无 |
| 函数原型 | int mod_timer(struct timer_list timer, unsigned long expires) |
|---|
| 函数功能 | 修改定时器超时时间 |
| 函数参数 | timer对应的定时器结构体 |
| 函数参数 | expires超时时间 |
| 函数返回值 | 成功则返回 修改成功的时间值 |
| 函数原型 | int del_timer(struct timer_list *timer) |
|---|
| 函数功能 | 关闭定时器 |
| 函数参数 | timer要删除的定时器 |
| 函数返回值 | 返回0:成功 |
模板
#include <linux/timer.h>
void timer_cb_func(struct timer_list *tl);
DEFINE_TIMER(test_timer,timer_cb_func);
void timer_cb_func(struct timer_list *tl){
printk("timer_cb_func..\n");
mod_timer(&test_timer, jiffies + 1*HZ);
}
static int __init dev_init(void){
test_timer.expires = jiffies + 1*HZ;
add_timer(&test_timer);
printk("dev_init..\n");
return 0;
}
static void __exit dev_exit(void){
del_timer(&test_timer);
printk("dev_exit..\n");
}