2017-08-26 28 views
2

私はarduinoからのシリアルデータを読み込もうとしていますが、プログラムを実行すると、バッファ内のすべてのデータが読み込まれます。そして、私は次のエラーで終了します。ブーストasioシリアルポート "end of file"

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >' 
what(): read: End of file 
Aborted (core dumped) 

私はまたしても、プログラムが実行される前からのデータを望んでいません。ここに私のC++コードは次のようになります。私の知る限り、それは次の入力を待つように、read関数は、右、ブロッキングする必要があります知っているように

#include <iostream> 
#include <stdint.h> 

#include <boost/asio.hpp> 
#include <boost/asio/serial_port.hpp> 

using namespace boost; 

int main() { 
    asio::io_service io; 
    asio::serial_port port(io); 

    port.open("/dev/ttyUSB0"); 
    port.set_option(asio::serial_port_base::baud_rate(115200)); 

    char d; 

    while (true) { 
     asio::read(port, asio::buffer(&d, 1)); 
     std::cout << d << std::endl; 
    } 

    port.close(); 
} 

?それでは、どうすれば "ファイル"の終わりに到達できますか?

+0

こんにちは、私は同じ問題を抱えています。さらに悪いことに、昨日働いた*バイナリ*は今日あなたと同じ問題をもたらします。タイムアウトの設定が原因である可能性があります。 –

+0

今日はまったく同じコードをやり直しました。コンパイルのプロセスはまったく同じですが、今は魔法のように動作します... –

答えて

2

これは私のために働いたものです。ブロッキング機能を持たせるには、シリアルポートの文字制限を最小限にする必要があります。

stty -F /dev/ttyUSB5 115200 line 0 min 1 time 0 

EDIT:より良いオプションだけrawモードにポートを設定しているようです。

+0

私はこれをどこに置くのですか? –

+0

Linuxを使用している場合は、プログラムを実行する前にコマンドラインを使用してください。 –

+0

ありがとうございます、これは問題を解決したようです。 –

0

私はArduino IDEをrootとして実行した後、シリアル通信を許可するためにプログラムが動作しなくなり、EOFエラーが発生することがわかりました。 Arduino IDEが閉じられても、動作しません。私のPCを再起動すると、再び動作します。

しかし、Atilla Filizの回答はこれを解決します。

関連する問題