我正在尝试用Java编程。到目前为止,我已经能够从并行端口获取数据,但是很难保持时间间隔。
我的问题是:在Windows XP环境下是否真的可以以微秒级精度完成?如果是,请指点我一些指南/资源?
非常感谢您的任何帮助。
这取决于您的软件是否需要可靠运行还是只需在大多数情况下正常运行。
使用普通的Java虚拟机,您无法预测垃圾回收器的行为,因此基本上没有办法防止虚拟机随意中断您的软件执行。
使用支持“实时规范Java”(JSR-1)扩展的VM,可以在Java中实现实时软件,但据我所知,在Windows上没有这样的实现,因为Windows本身没有实时功能。Sun的原始参考实现(现在由Oracle维护)可以在Solaris和启用了实时功能的Linux版本上运行,并且还有其他适用于嵌入式系统的实现。
System.nanoTime() 甚至以纳秒时间精度返回时间,您也可以将其用于微秒。
如果您不一定要使用Windows,添加一些额外的硬件可能会很有效。虽然硬件可以像FPGA那样复杂,但您可能可以使用简单的8位微控制器,例如Arduino板和IDE中使用的Atmega328来完成。通过这种方式,您可以对输入进行采样,缓冲数据,并驱动并口连接到PC,微控制器充当实时数据源和接近实时PC数据消耗之间的FIFO。
Atmega328只有2K的RAM,因此您需要确定是否足以覆盖PC的死时间。如果不够,有类似的具有更大RAM的微控制器。
Arduino UNO可用于
如果您不熟悉微控制器,那么皮下没有操作系统引入的不确定性。没有正在“隐形”维护的系统问题。编写代码更像是编写内核驱动程序(因为您需要了解实时考虑因素、中断处理和维护CPU状态的完整性),但周围的系统尽可能简单。
-- Carl
有第三方实时扩展程序可用于Windows。这是其中之一:http://www.directinsight.co.uk/products/venturcom/rtx.html
他们声称可以提供硬实时性能。现在,Java是否适合进行实时编程是一个很大的难题。有垃圾回收,JIT编译可能会妨碍...我建议-对于时间关键部分(信号收集),请使用本机代码,为漂亮的GUI构建与Java的接口。
C ++在概念上与Java非常不同,但至少语法相近。
RTX团队明确将自己定位为定制硬件的替代品,声称基于通用主板的Intel CPU可以提供实时处理。然而他们的东西并不免费。如果您想要免费的话,可以选择嵌入式Linux版本。或者选择QNX。