当前位置: 技术问答>linux和unix
linux下高精度定时间hrtimer的问题
来源: 互联网 发布时间:2017-03-25
本文导语: 我最近做东西要用到定时器,由于要求定时精度高,所以找到了这个高精度定时器。我的代码如下 static struct hrtimer my_timer; static ktime_t ktime; ktime = ktime_set(0,1000000000/baud); hrtimer_init(&my_timer,CLOCK_MONOTONIC,HRTIMER_MODE_REL...
我最近做东西要用到定时器,由于要求定时精度高,所以找到了这个高精度定时器。我的代码如下
static struct hrtimer my_timer;
static ktime_t ktime;
ktime = ktime_set(0,1000000000/baud);
hrtimer_init(&my_timer,CLOCK_MONOTONIC,HRTIMER_MODE_REL);
my_timer.function = &my_hrtimer_callback;
hrtimer_start(&my_timer,ktime,HRTIMER_MODE_REL);
其余的就不贴了,和定时器相关的只有这一部分了。现在问题是:不管我怎么改变ktime的值,中断时间都是1微妙。
求高人解决啊
static struct hrtimer my_timer;
static ktime_t ktime;
ktime = ktime_set(0,1000000000/baud);
hrtimer_init(&my_timer,CLOCK_MONOTONIC,HRTIMER_MODE_REL);
my_timer.function = &my_hrtimer_callback;
hrtimer_start(&my_timer,ktime,HRTIMER_MODE_REL);
其余的就不贴了,和定时器相关的只有这一部分了。现在问题是:不管我怎么改变ktime的值,中断时间都是1微妙。
求高人解决啊
|
pselect精确到纳秒,够么?
|
还要硬件支持,LZ有找到其他的方法吗?
|
内核本身精度有限,都基于中jiffies, 这和内核设置的HZ值有关
所以想要真正的高精度,还是要通过硬件来实现,比如访问rtc寄存器
所以想要真正的高精度,还是要通过硬件来实现,比如访问rtc寄存器
|
纳秒级的:
#include
struct itimerval value;
value.it_interval.tv_sec = 0;
value.it_interval.tv_usec = 1000; // 1毫秒
value.it_value = value.it_interval; // 重启后装载的时间
setitimer(ITIMER_REAL, &value, NULL);