我要发布
仪器网/ 仪器社区/ 计时器/ 内核计时器hrtimer怎么获取计时时间

内核计时器hrtimer怎么获取计时时间

爱易昕8    2016-04-22    计时器    浏览 261 次

精彩问答
我想要个黑金 发布日期:2016-04-23
Linux 提供了一个简单的 API 来构造和管理计时器。它包含一些函数(和助手函数),用于创建、取消和管理计时器。

计时器通过 timer_list 结构定义,该结构包括实现一个计时器所需的所有数据(其中包括列表指针和在编译时配置的可选计时器统计数据)。从用户角度看,timer_list 包含一个过期时间,一个回调函数(当/如果计时器过期),以及一个用户提供的上下文。用户必须初始化计时器,可以采取几种方法,Z简单的方法是调用 setup_timer,该函数初始化计时器并设置用户提供的回调函数和上下文。或者,用户可以设置计时器中的这些值(函数和数据)并简单地调用 init_timer。注意,init_timer 由 setup_timer 内部调用。

void init_timer( struct timer_list *timer );
void setup_timer( struct timer_list *timer, void (*function)(unsigned long), unsigned long data );

拥有一个经过初始化的计时器之后,用户现在需要设置过期时间,这通过调用 mod_timer 来完成。由于用户通常提供一个未来的过期时间,他们通常在这里添加 jiffies 来从当前时间偏移。用户也可以通过调用 del_timer 来删除一个计时器(如果它还没有过期):

int mod_timer( struct timer_list *timer, unsigned long expires );
void del_timer( struct timer_list *timer );

Z后,用户可以通过调用 timer_pending(如果正在等待,将返回 1)来发现计时器是否正在等待(还没有发出):

int timer_pending( const struct timer_list *timer );

计时器示例

我们来检查一下这些 API 函数的实际运行情况。清单 1 提供了一个简单的内核模块,用于展示简单计时器 API 的核心特点。在 init_module 中,您使用 setup_timer 初始化了一个计时器,然后调用 mod_timer 来启动它。当计时器过期时,将调用回调函数 my_timer_callback。Z后,当您删除模块时,计时器删除(通过 del_timer)发生。(注意来自 del_timer 的返回检查,它确定计时器是否还在使用。)

清单 1. 探索简单计时器 API

#include
#include
#include

MODULE_LICENSE("GPL");

static struct timer_list my_timer;

void my_timer_callback( unsigned long data )
{
printk( "my_timer_callback called (%ld).\n", jiffies );
}

int init_module( void )
{
int ret;

printk("Timer module installing\n");

// my_timer.function, my_timer.data
setup_timer( &my_timer, my_timer_callback, 0 );

printk( "Starting timer to fire in 200ms (%ld)\n", jiffies );
ret = mod_timer( &my_timer, jiffies + msecs_to_jiffies(200) );
if (ret) printk("Error in mod_timer\n");

return 0;
}

void cleanup_module( void )
{
int ret;

ret = del_timer( &my_timer );
if (ret) printk("The timer is still in use...\n");

printk("Timer module uninstalling\n");

return;
}
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控