我是靠谱客的博主 彪壮服饰,最近开发中收集的这篇文章主要介绍linux 内核 hrtimer,Linux 内核驱动 hrtimer的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在linux内核下编程,特别是驱动编程中,往往HZ的定时器精度不能满足我们的需求;此时,内核为高精度定时器重新设计了一套软件架构,它可以为我们提供纳秒级的定时精度,以满足对精确时间有迫切需求的应用程序或内核驱动,例如多媒体应用,音频设备的驱动程序等等。以下的讨论用hrtimer(high resolution timer)表示高精度定时器。,下面举一个例子予以说明:

#include 

#include 

#include 

#include 

static struct hrtimer hr_timer;

ktime_t ktime;

enum hrtimer_restart my_hrtimer_callback( struct hrtimer *timer )

{

printk( KERN_ALERT "my_hrtimer_callback called......n");

// hrtimer_start( &timer, ktime, HRTIMER_MODE_REL );                                 // 如果想一直运行下去

return HRTIMER_NORESTART;

}

/* 或者是下面的回调函数*/

/*static enum hrtimer_restart hrtimer_handler(struct hrtimer *timer)

{

//kt = ktime_set(1, 10);

printk(" ------ I am in hrtimer -----n");

hrtimer_forward(timer, timer->base->get_time(), kt);

return HRTIMER_RESTART;

}*/

static int __init my_hrtimer_init void )

{

printk( KERN_ALERT "HR Timer module installingn");

ktime = ktime_set( 0, 200*1000);                   // 200us

hrtimer_init( &hr_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL );

hr_timer.function = &my_hrtimer_callback;

hrtimer_start( &hr_timer, ktime, HRTIMER_MODE_REL );

return 0;

}

static void __exit my_hrtimer_exit( void )

{

int ret;

ret = hrtimer_cancel( &hr_timer );                                                // 取消定时器执行

if (ret){

printk( KERN_ALERT "The timer was still in use...n");

}

printk( KERN_ALERT "HR Timer module uninstallingn");

return;

}

MODULE_LICENSE("GPL");

module_init(my_hrtimer_init);

modlue_exit(my_hrtimer_exit);

想了解更多关于hrtimer的API函数,请参见linux内核树~/kernel/hrtimer.c文件

最后

以上就是彪壮服饰为你收集整理的linux 内核 hrtimer,Linux 内核驱动 hrtimer的使用的全部内容,希望文章能够帮你解决linux 内核 hrtimer,Linux 内核驱动 hrtimer的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部