High Resolution Timer内核高精度时钟

关键数据结构:struct clock_event_device表示一个时钟源,其最重要的两个域是set_next_event()和event_handler()。set_next_event()用来设置下一次时钟中断的触发时间,通常需要操作Timer的硬件寄存器,以及使能Timer中断。event_handler()是Timer中断产生之后,将要执行的函数。

static DEFINE_PER_CPU(structclock_event_device, tile_timer) = {
       .name= "tile timer",
       .features= CLOCK_EVT_FEAT_ONESHOT,
       .min_delta_ns = 1000,
       .rating = 100,
       .irq = -1,
       .set_next_event &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
High Resolution Timer(HRT)是Linux内核提供的一种精度计时器,可以提供纳秒级别的计时精度。下面是HRT的使用步骤: 1. 定义一个hrtimer结构体变量,该结构体变量用于表示一个HRT计时器。 2. 使用hrtimer_init()函数来初始化hrtimer结构体变量,设置HRT计时器的回调函数以及计时器的模式(相对或绝对时间)。 3. 使用hrtimer_start()函数来启动HRT计时器,设置计时器的超时时间。 4. 在HRT计时器超时时,内核会自动调用设置的回调函数。 5. 在回调函数中,可以进行需要精度计时的操作,例如测量函数执行时间、执行周期性任务等。 6. 若需要取消已经启动的HRT计时器,可以使用hrtimer_cancel()函数来取消计时器。 下面是一个简单的HRT计时器示例代码,用于测量函数执行时间: ``` #include <linux/hrtimer.h> #include <linux/ktime.h> static struct hrtimer my_hrtimer; static ktime_t start_time; enum hrtimer_restart my_hrtimer_callback(struct hrtimer *timer) { ktime_t end_time = ktime_get(); printk(KERN_INFO "Function execution time: %lld ns\n", ktime_to_ns(ktime_sub(end_time, start_time))); return HRTIMER_NORESTART; } void my_function() { start_time = ktime_get(); hrtimer_init(&my_hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); my_hrtimer.function = my_hrtimer_callback; hrtimer_start(&my_hrtimer, ktime_set(1, 0), HRTIMER_MODE_REL); // do something here hrtimer_cancel(&my_hrtimer); } ``` 在上述代码中,my_function()函数调用时会启动一个HRT计时器,并在计时器超时时自动调用my_hrtimer_callback()函数,该函数会输出函数执行时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值