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

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

3天内不再提示

Linux驱动高精度定时器hrtimer

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

高分辨率定时器hrtimer)以ktime_t来定义时间, 精度可以达到纳秒级别ktime_t定义如下:

typedef s64 ktime_t;

可以用ktime_set来初始化一个ktime对象,常用方法如下:

ktime_t t = ktime_set(secs, nsecs);

高分辨率hrtimer结构体定义如下:

struct hrtimer {  
    struct timerqueue_node      node;  
    ktime_t             _softexpires;  
    enum hrtimer_restart        (*function)(struct hrtimer *);  
    struct hrtimer_clock_base   *base;  
    unsigned long           state;  
        ......  
};  
enum hrtimer_restart {  
    HRTIMER_NORESTART,  /* Timer is not restarted */  
    HRTIMER_RESTART,    /* Timer must be restarted */  
};

struct hrtimer结构体中最主要的成员就是回调函数function,回调函数的返回值可以为HRTIMER_NORESTARTHRTIMER_RESTARTHRTIMER_NORESTART代表不需要重启定时器,HRTIMER_RESTART代表需要重启定时器。

最常用的接口如下:

hrtimer_init(struct hrtimer *timer, clockid_t clock_id , enum hrtimer_mode mode)
hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
hrtimer_forward_now(struct hrtimer *timer,ktime_t interval)
hrtimer_cancel(struct hrtimer *timer)

hrtimer_init:初始化 struct hrtimer结构对象。clockid_t时钟的类型, 种类很多,常见的有四种:

  • CLOCK_REALTIME:系统实时时间。
  • CLOCK_MONOTONIC:从系统启动时开始计时,自系统开机以来的单调递增时间
  • CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间,包含该进程下的所有线程。
  • CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间。

mode 是时间的模式,可以是 HRTIMER_MODE_ABS, 表示绝对时间, 也可以是 HRTIMER_MODE_REL,表 示相对时间。hrtimer_start:启动定时器。tim 是设定的到期时间, modehrtimer_init中的mode参数含义相同。hrtimer_forward_now: 修改到期时间为从现在开始之后的 interval 时间。hrtimer_cancel:取消定时器。

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

    关注

    12

    文章

    1840

    浏览量

    85296
  • Linux
    +关注

    关注

    87

    文章

    11304

    浏览量

    209532
  • 定时器
    +关注

    关注

    23

    文章

    3248

    浏览量

    114826
收藏 人收藏

    评论

    相关推荐

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

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

    GPT高精度延时定时器简介

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

    高精度定时器电路及制作

    高精度定时器电路及制作
    发表于 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 1080次阅读
    长时间<b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>

    用电子表作高精度定时器电路图

    用电子表作高精度定时器电路图
    发表于 07-29 08:34 1598次阅读
    用电子表作<b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>电路图

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

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

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

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

    详解高精度定时器与高级控制定时器

    高精度定时器中,可以使用外部事件来对 PWM 输出进行封锁,并可自动恢复;在高级控制定时器中,可以使用 Break 或是 Clr_input 来对 PWM 输出进行封锁, 然后也可以自动恢复,其中 Break 必须结合 AOE
    的头像 发表于 06-16 16:52 2791次阅读

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

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

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

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

    高精度定时器中single-shot计数模式不工作

    高精度定时器中single-shot计数模式不工作
    的头像 发表于 10-25 18:08 566次阅读
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>中single-shot计数模式不工作

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

    高精度定时器与高级控制定时器 PWM 封波后再恢复的区别
    的头像 发表于 10-17 16:52 788次阅读
    <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。 使用示例 单次定时 加载驱动一秒后输出“ hrtimer h
    的头像 发表于 10-04 15:38 1524次阅读