我是靠谱客的博主 贤惠睫毛膏,最近开发中收集的这篇文章主要介绍高分辨率定时器1.定时器的工作模式2.高分辨率kernel定时器使用流程3.高分辨率定时器的一个简单使用例子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

高分辨率定时器

  • 1.定时器的工作模式
  • 2.高分辨率kernel定时器使用流程
  • 3.高分辨率定时器的一个简单使用例子

1.定时器的工作模式

enum hrtimer_mode {
	HRTIMER_MODE_ABS = 0x0,		/* Time value is absolute */ 绝对时间
	HRTIMER_MODE_REL = 0x1,		/* Time value is relative to now */相对时间
	HRTIMER_MODE_PINNED = 0x02,	/* Timer is bound to CPU */
	HRTIMER_MODE_ABS_PINNED = 0x02,
	HRTIMER_MODE_REL_PINNED = 0x03,
};

2.高分辨率kernel定时器使用流程

A、定义一个高分辨率定时器
	static struct hrtimer battery_kthread_timer;
	
B、初始化定时器工作模式,
hrtimer_init(&battery_kthread_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 

C、设置定时器的回调函数,定时器到时该函数将被调用
battery_kthread_timer.function = battery_kthread_hrtimer_func; 
                            // 定时器处理函数 
                            battery_kthread_hrtimer_func()
                                bat_thread_wakeup();  
                                    // 唤醒下面的 bat_thread_kthread() 线程
                                    wake_up(&bat_thread_wq); 
D、设置超时参数
  hrtimer_start(&vibe_timer,ktime_set(value / 1000, (value % 1000) * 1000000),HRTIMER_MODE_REL);
	for:
		ktime = ktime_set(1, 0);    // 1s
		hrtimer_start(&battery_kthread_timer, ktime, HRTIMER_MODE_REL)
		
E、要取消一个hrtimer,使用 hrtimer_cancel
		int hrtimer_cancel(struct hrtimer *timer); 

3.高分辨率定时器的一个简单使用例子

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/hrtimer.h>
#include <linux/jiffies.h>

/* 定时器操作_1: 定义定时器 */
static struct hrtimer timer;

static enum hrtimer_restart        hrtimer_hander(struct hrtimer *timer)
{
    printk("zbzhuang:I am in hrtimer handerrn");

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

    return HRTIMER_RESTART;       

}

static int __init test_init(void)
{
    printk("zbzhuang:---------%s-----------rn",__func__);

    kt = ktime_set(1,10);// 1s + 10ns
	/* 定时器操作_2: 初始化定时器 */
    hrtimer_init(&timer,CLOCK_MONOTONIC,HRTIMER_MODE_REL);
	
	/* 定时器操作_3: 设定超时时间  */
    hrtimer_start(&timer,kt,HRTIMER_MODE_REL);
	
	/* 定时器操作_4: 设定回调函数  */
    timer.function = hrtimer_hander;
    return 0;
}

static void __exit test_exit(void)
{
    hrtimer_cancel(&timer);
    printk("zbzhuang------------test over---------------rn");
}
module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zbzhuang@qq.com");

最后

以上就是贤惠睫毛膏为你收集整理的高分辨率定时器1.定时器的工作模式2.高分辨率kernel定时器使用流程3.高分辨率定时器的一个简单使用例子的全部内容,希望文章能够帮你解决高分辨率定时器1.定时器的工作模式2.高分辨率kernel定时器使用流程3.高分辨率定时器的一个简单使用例子所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部