我正在尝试使用Java在并口上创建一个方波。到目前为止,我有以下实现:
public class Wave extends Thread {
public Wave() {
super();
setPriority(MAX_PRIORITY);
}
@Override
public void run() {
Wave.high();
LockSupport.parkNanos(20000000);
Wave.low();
LockSupport.parkNanos(20000000);
}
public static native void high();
public static native void low();
}
在这个实现中,使用JNI(一个共享的C库控制并口)来实现high()和low()。它工作得非常好;它生成一个周期约为40ms的方形波。使用示波器观察时,当计算机处于空闲状态时,标准差大约为10微秒。当计算机不空闲时,标准差会变得更大。我认为这是因为发生了更多的上下文切换,线程在等待状态下停留时间过长,无法准确达到指定的20毫秒。
有没有办法使我的实现更精确?我知道我可以使用硬件来实现,但我想知道是否也可以使用软件来实现。
可能的一个选项是“听取”时钟并按毫秒执行操作吗?