在Linux或Windows中安排精确时段的任务

时间:2011-07-22 16:12:02

标签: c++ windows linux embedded interrupt

我有这个奇怪的问题。 我想知道是否有可能在C / C ++中创建一个可以在Linux或Windows上运行的程序,并将中断处理程序挂钩到设置为特定时间段的系统计时器(例如,每秒2000次),我想要这个中断具有最高优先级,这意味着它必须每半毫秒执行一次,并且执行它时不得中断。

我们已经使用Borland Turbo C 3.1完成了MS-DOS。我们有一个在ISA插槽上运行的接口卡(我们自己的)。每半毫秒,我们的程序就会通过界面读取控制工业过程的电子状态。在过去的15年里,这对我们有用,但是我们的主板已经没有ISA插槽了,所以我们正在寻找新的解决方案。

我们也有基于PIC微控制器的解决方案,但我们的视野将通过通用处理器扩大。

我的猜测是有一些针对嵌入式应用程序的自定义Linux内核,所以我正在寻找一些我们可以开始试验的来源。

3 个答案:

答案 0 :(得分:6)

是的,您可以在MS-DOS中执行此操作,因为它不是多用户或多任务操作系统。但是,同样的事情在Windows中工作,因为 是一个多用户和多任务操作系统。它也不是实时的,这意味着当您要求执行任务时,无法保证您的任务将完全执行。所有事情都是先发制人的,这意味着任何数量的其他流程和任务(用户模式或系统级)都可以有效地将您的流程“颠覆”到优先级列表中并迫使其等待执行,直到其他任务完成或者自己被打断,让你的过程有机会跑一会儿。

我不了解Linux,但我想大多数主要发行版的编写方式与Windows类似。

您需要找到一个实时的单用户操作系统来执行此操作。 Unix衍生产品可能是开始寻找的最好的地方,但我不会是能够推荐它的人。

或者,您可以继续使用MS-DOS(或FreeDOS等替代品),但切换到新板上 可用的其他接口技术。没有理由更新适合您的内容,特别是如果更新对您的目标产生反作用。

答案 1 :(得分:2)

典型的操作系统(如标准Linux或Windows)并非旨在实现,也无法实现这种程度的实时准确性和可用性。

听起来我需要调查Real-Time Linux或类似的内容。

RTLinux是Linux内核的修改版本,旨在为此类应用程序实时执行。

希望有所帮助。

答案 2 :(得分:0)

多年来个人和经济实惠的计算性能不断提高,除了一个领域,低延迟。当您比较486和现代桌面CPU时,在许多用例中延迟实际上已经增加。

也就是说,看看this paper,作者得出的结论是,在Linux上的商用硬件上可以进行亚毫秒级调度。