1

私の組み込みシステムは Linux OS を実行しています。システムには、USB 経由で接続された 2 つのジョイスティックがあります。私のプログラムは、準備ができたらこれら 2 つのデバイスのいずれかを読み取り、ジョイスティックのキー情報を上位層に渡す必要があります。
私のプログラムは次のことを行います。

  1. ジョイスティック ファイル/dev/js0/dev/js1がまだ開いていない場合は、両方を開きます。
    つまり、fd0 または fd1 == -1 (デフォルト値は -1) の場合、それを開きます。
  2. select() // maxfd+1 と readset が select に渡されます
  3. どのデバイスの準備ができていても、プログラムはread()を使用してデータを読み取ります。
  4. 上記の 3 つの手順はすべて、タイマーで定期的に実行されます。

上記のコードは正常に動作します。問題ない。
否定的なテスト ケースの一部として、USB を開いて正常に読み取った後、ジョイスティックの 1 つを USB から取り外しました。次の perror が表示されるようになりました -> "read() failed: no such file or device.

このエラーを処理して、ジョイスティックを取り外して挿入し直した場合、コードが問題なく再度開くようにしたいと考えています。

上記のエラーが発生するとすぐに、デバイスを閉じて fd を -1 に設定して、ステップ 1 の一部としてデバイスが再度開かれるようにしました。しかし、これは機能していません。現在デバッグ中です。そのようなファイルまたはデバイスエラーが発生した後、close()が機能していないと思います。

この種の問題に遭遇したことがある場合、またはこの種のシナリオ (USB デバイスを開いた後に取り外して挿入した) の処理方法を知っている場合は、親切に情報を提供してください。

どうもありがとう。よろしく、エマーソン

4

0 に答える 0