我有一个来自实时世界的事件,它会产生一个中断。我需要将此事件注册到Linux内核时间片之一,如CLOCK_MONOTONIC或CLOCK_REALTIME,目的是确定事件何时在实际日历时间内发生。目前推荐的方法是什么?我的谷歌搜索发现了2011年提交的一些补丁以支持它,但是从那时起中断处理代码已经过大量修改,我再也看不到对时间戳的引用了。
对于我的预期应用,精度要求很低(1 ms)。不过,我想知道如何正确地做到这一点。如果可以排除更高优先级中断的可能性,我认为可以进入微秒范围。
答案 0 :(得分:2)
如果您只需要低精度,那么您可以阅读jiffies
。
但是,如果CONFIG_HZ
小于1000,您甚至不会获得1 ms的分辨率。
要获得高分辨率时间戳,请参阅firewire-cdev.c如何执行此操作:
case CLOCK_REALTIME: getnstimeofday(&ts); break;
case CLOCK_MONOTONIC: ktime_get_ts(&ts); break;
case CLOCK_MONOTONIC_RAW: getrawmonotonic(&ts); break;
答案 1 :(得分:0)
如果我理解你的需要 - 你可以使用getnstimeofday()函数。
答案 2 :(得分:0)
如果您需要高精度单调时钟值(这通常是一个好主意),您应该查看ktime_get_ts()
函数(在linux/ktime.h
中定义)。在另一个答案中建议的getnstimeofday()
返回“墙”时间,这可能实际上似乎在某个时候倒退,导致某些应用程序出现意外行为。