如果jiffies的分辨率为msecs,usecs_to_jiffies如何将usecs转换为jiffies?

时间:2013-02-03 23:45:35

标签: c linux timer linux-kernel

来自here

  

HZ的值因内核版本而异   硬件平台。在i386上          情况如下:在内核上包括2.4.x,HZ为100,          给出0.01秒的jiffy值;从2.6.0开始,HZ被提升为          1000,给出0.001秒的瞬间。从内核2.6.13开始,HZ值为a          内核配置参数可以是100,250(默认值)或1000,          产生的jiffies值分别为0.01,0.004或0.001秒。          从内核2.6.20开始,可以获得另一个频率:300,一个数字          对于常见的视频帧速率(PAL,25 HZ; NTSC,30 HZ)均匀划分。

那么如何将5usec转换为jiffies

extern unsigned long usecs_to_jiffies(const unsigned int u);
由于jiffies分辨率不足以测量使用秒数,因此它似乎毫无用处。

1 个答案:

答案 0 :(得分:4)

如有疑问,请阅读代码!

在这里(可以找到here的版本):

unsigned long usecs_to_jiffies(const unsigned int u)
{
    if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
        return MAX_JIFFY_OFFSET;
#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
    return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ);
#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
    return u * (HZ / USEC_PER_SEC);
#else
    return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32)
        >> USEC_TO_HZ_SHR32;
#endif
}

所以,它确实有一些东西可以检查是否有快捷方式,如果没有其他工作,可以用一些64位数学来计算出来。

但是5usec将是一个jiffies,无论它运行的代码是什么。