シリアルポートを使用するUbuntuのコンソールアプリケーションを作成しています。シリアルポートから60Hzで読み書きする必要があります。POSIXシリアルポートのread()が遅い理由は何ですか?
私は、read()の呼び出しは、しばしば遅いが、必ずしも遅くないことがわかります。私はO_NDELAYを設定しているので、しばしば即座に(素晴らしい)返します。時には仕上げに50ミリ秒かかることがあり、それは私のアプリケーションにとっては遅すぎます。 read()を呼び出す前に、使用可能な文字数を調べるので、データを待ってはいけません。
これは時間がかかりすぎるread()とは何ですか?どうすればスピードアップできますか?私は、select()以前使用していのだが、それは問題に直交であることが判明:
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag &= ~IXON;
options.c_oflag = 0;
編集:ポート上の
オプションがあります。私の最新情報で更新されました。
を参照してください。おそらく、カーネルは少なくとも1バイトの全バイトを読み取る必要があります。 –
ハードウェアの特定の部分(たとえば、ハードウェア仕様でそうであること)が必要な場合や、OSにステータスを取得するためにOSに不具合があった場合などです。 –
@Basile:115200 – amo