嵌入式设备上的微秒(或1 ms)时间分辨率(Linux Kernel)

时间:2010-04-01 23:44:41

标签: c linux-kernel embedded-linux

我有一个内置模块,我需要至少1 ms的时间分辨率。我目前使用do_gettimeofday()但我担心一旦将模块移动到嵌入式设备,这将无法工作。该器件具有180 Mz处理器(MIPS),内核中的默认HZ值为100.因此使用jiffies只能给出最佳10 ms分辨率。这不会削减它。

我想知道的是do_gettimeofday()是否基于定时器中断(HZ)。可以保证提供至少1 ms的分辨率吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

ms不是微秒,它是毫秒。在不了解您的设备选择的情况下,没有人能够回答这样一个与实现相关的问题,因为gettimeofday是否基于定时器中断。如果您选择了一个知道指令集和时钟速度的设备,那么为什么不查看该特定内核的实现来查找呢?

答案 1 :(得分:2)

在嵌入式设备上,无法保证。看起来它是基于MIPS的,它可能没问题,大多数MIPS机器都有循环计数器。但是,你将不得不去阅读内核那部分的源代码,看看它在你的平台上做了什么。

答案 2 :(得分:2)

是的,您需要在内核中启用CONFIG_HIGH_RES_TIMERS,并确保您的平台注册clock_event_device。这是允许将高分辨率计时器暴露给用户空间的机制。您可以通过在用户空间中调用clock_getres()来检查计时器的分辨率。