我正在尝试使用 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();
}
其中 high() 和 low() 是使用 JNI 实现的(一个共享的 C 库控制并行端口)。它工作得很好;它会产生一个周期约为 40ms 的方波。当计算机空闲时,使用示波器看起来标准偏差约为 10 微秒。当计算机不空闲时,标准偏差变得更大。我认为这是因为发生了更多的上下文切换,线程在等待状态中停留的时间太长,并且没有准确地达到指定的 20 毫秒。
有没有办法让我的实现更准确?我知道我可以为此使用硬件,但我想知道我是否也可以使用软件来做到这一点。
是否可以选择“听”时钟并执行计时到毫秒的操作?