2013-03-22 76 views
1

我需要在linux内核中使用timer,mdelay()函数设置信号的高低。Linux核心延迟,低于jiffies,没有忙等待

hightime:0.01ms-20.00ms; lowtime:10ms-1000ms

两者都可以通过用户空间进行调整。 对于lowtime我使用API​​计时器和高峰期我使用mdelay()和udelay()。

现在的问题是:如果hightime是9.9ms,lowtime是10ms,那么整个内核都会睡着(期望0.1ms)。但是当内核定时器正在运行时,用户空间中的用户界面需要工作。 在我的系统中,一个jiffie大约是10ms,所以我不能在lowtime使用定时器。

有人有一个想法,我怎么能做到这些0.01ms - 10毫秒在内核中等待,以便我的用户界面仍然正常工作?

感谢

+0

我想你应该指定一个平台。我没有理由期望内核应该能够满足这样的要求,而无需使用某种形式的专用计时器硬件。 – unwind 2013-03-22 16:13:40

回答

1

可以减少10毫秒:

编辑/usr/include/asm/param.h,寻找HZ的定义。我想你会发现100. 100赫兹呈现10毫秒的时间段。更现代的Linux有250 HZ,这将把你的时间 切片降低到4毫秒。您可以将其平方化为1000 HZ,让您以1 ms的时间片运行。

延伸阅读:Linux kernel map, 7.1. Measuring Time Lapses