0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux高精度定时器hrtimer使用示例

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-04 15:38 次阅读

低分辨率定时器是用jiffies来定时的,所以会受到HZ影响,如果HZ为200,代表每秒种产生200次中断,那一个jiffies就需要5毫秒,所以精度为5毫秒。

如果精度需要达到纳秒级别,则需要使用高精度定时器hrtimer。

使用示例

单次定时

加载驱动一秒后输出“hrtimer handler”:

#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >

#include < linux/ktime.h >
#include < linux/hrtimer.h >

static struct hrtimer timer;

static enum hrtimer_restart timer_handler(struct hrtimer *timer )
{
 printk("hrtimer handlern");
    
    return HRTIMER_NORESTART;
}

static int __init my_init(void) 
{
    ktime_t tim;
    
    hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
    timer.function = timer_handler;
    tim = ktime_set(1,0); //1s
    hrtimer_start(&timer,tim,HRTIMER_MODE_REL);

    return 0;
}

static void __exit my_exit(void)
{
 printk("%s entern", __func__);
 hrtimer_cancel(&timer);
}

module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");

循环定时

循环定时可以在回调函数中调用hrtimer_forward_now()重新设置定时时间,然后将返回值设置为HRTIMER_RESTART代表重启定时器,就可以做到循环定时的效果。

每隔一秒输出“hrtimer handler”:

#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >

#include < linux/ktime.h >
#include < linux/hrtimer.h >

static struct hrtimer timer;

static enum hrtimer_restart timer_handler(struct hrtimer *timer )
{
    printk("hrtimer handlern");
    
    hrtimer_forward_now(timer, ktime_set(1,0));//重新设置定时时间
    
    return HRTIMER_RESTART;//重启定时器
}

static int __init my_init(void) 
{
    ktime_t tim;
    
    hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
    timer.function = timer_handler;
    tim = ktime_set(1,0); //1 s
    hrtimer_start(&timer,tim,HRTIMER_MODE_REL);

    return 0;
}

static void __exit my_exit(void)
{
    printk("%s entern", __func__);
    hrtimer_cancel(&timer);
}

module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11030

    浏览量

    207269
  • 定时器
    +关注

    关注

    23

    文章

    3186

    浏览量

    112711
  • 函数
    +关注

    关注

    3

    文章

    4142

    浏览量

    61553
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #LinuxLinux-2.18.1 高精度延时实验-GPT定时器原理-1

    高精度Linux
    水管工
    发布于 :2022年11月10日 18:08:13

    #硬声创作季 #LinuxLinux-2.18.1 高精度延时实验-GPT定时器原理-2

    高精度Linux
    水管工
    发布于 :2022年11月10日 18:08:37

    #硬声创作季 #LinuxLinux-2.18.1 高精度延时实验-GPT定时器原理-3

    高精度Linux
    水管工
    发布于 :2022年11月10日 18:09:02

    GPT高精度延时定时器简介

    Linux NXP (I.MX6ULL) GPT高精度延时定时器0、GPT 定时器简介1、GPT 定时器特性如下:2、GPT
    发表于 01-12 06:46

    Linux和RTOS的时钟和定时器怎么使用

    定时器1.7初始化和脱离定时器1.8启动和停止定时器1.9高精度延时1.10实战篇:RTOS定时器代码演示2
    发表于 01-17 08:13

    高精度定时器电路及制作

    高精度定时器电路及制作
    发表于 04-14 11:39 14次下载
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>电路及制作

    高精度定时器电路图

    高精度定时器电路图
    发表于 05-18 11:40 287次下载
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>电路图

    长时间高精度定时器

    长时间高精度定时器:某些场合需要长时间高精度定时器,此图定时电路定时时间较长,
    发表于 12-14 08:05 1036次阅读
    长时间<b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>

    Linux时间子系统中的高精度定时器HRTIMER)的原理和实现

    虽然大部分时间里,时间轮可以实现O(1)时间复杂度,但是当有进位发生时,不可预测的O(N)定时器级联迁移时间,这对于低分辨率定时器来说问题不大,可是它大大地影响了定时器精度
    发表于 05-10 14:11 7508次阅读

    LINUX内核定时器高精度&低精度

    linux从内核2.6.16开始引入了高精度定时器,达到ns级别。自此,内核拥有两套并行计时器,低精度高精度。如果
    发表于 05-13 09:41 3969次阅读

    Linux驱动开发高精度定时器精度测量评测

    前言 今天我们来评测linux内核的高精度定时器。顺便利用通过Tektronix示波器 和 DS100 Mini 数字示波器进行交叉测试。 因项目需要用到精准的时间周期,所以要评估它的可行性,并验证
    的头像 发表于 08-09 11:17 1755次阅读

    工程师笔记|高精度定时器的同步功能

    关键词:高精度定时器, 同步 目录预览 1.引言 2.定时器同步结构 3.高精度定时器内部同步 4.高精
    的头像 发表于 11-22 18:15 1118次阅读

    高精度定时器与高级控制定时器 PWM 封波后再恢复的区别

    高精度定时器与高级控制定时器 PWM 封波后再恢复的区别
    的头像 发表于 10-17 16:52 445次阅读
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>与高级控制<b class='flag-5'>定时器</b> PWM 封波后再恢复的区别

    高精度定时器的同步功能

    电子发烧友网站提供《高精度定时器的同步功能.pdf》资料免费下载
    发表于 09-19 14:17 0次下载
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>的同步功能

    Linux驱动高精度定时器hrtimer

    高分辨率定时器hrtimer )以 ktime_t 来定义时间, 精度可以达到纳秒级别 , ktime_t 定义如下: typedef s64 ktime_t ; 可以用 ktime_set
    的头像 发表于 10-04 15:32 398次阅读