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ミリ秒が正確に達成されないためだと思います。
私の実装をより正確にする方法はありますか?これにはハードウェアを使用できることはわかっていますが、ソフトウェアでもこれを実行できるかどうかを知りたいです。
時計を「聞いて」、ミリ秒のタイミングでアクションを実行するという選択肢はありますか?