0

这里

HZ 的值因内核版本和硬件平台而异。在 i386 上情况如下:在 2.4.x 及以下的内核上,HZ 为 100,给出的 jiffy 值为 0.01 秒;从 2.6.0 开始,HZ 提高到 1000,即 0.001 秒。从内核 2.6.13 开始,HZ 值是内核配置参数,可以是 100、250(默认值)或 1000,产生的 jiffies 值分别为 0.01、0.004 或 0.001 秒。从内核 2.6.20 开始,可以使用更多频率:300,这是一个可平均划分常见视频帧速率(PAL,25 HZ;NTSC,30 HZ)的数字。

那么我该如何转换5usecjiffies?

extern unsigned long usecs_to_jiffies(const unsigned int u);

它似乎没用,因为 jiffies 分辨率不足以测量微秒。

4

1 回答 1

4

如有疑问,请阅读代码!

在这里(它的一个版本可以在这里找到):

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,无论它运行哪一段代码。

于 2013-02-04T01:58:17.477 回答