2017-08-26 4 views
2

Ich versuche serielle Daten aus Arduino zu lesen, aber wenn ich mein Programm ausführen liest es nur alle Daten im Puffer, die Daten, die tatsächlich vor dem Programmstart gesendet wurde. Und dann endet i mit dem folgenden Fehler:Boost asio seriellen Port "Ende der Datei"

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) 

ich auch nicht einmal die Daten aus will, bevor das Programm ausgeführt wurde. Hier ist mein C++ Code:

#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(); 
} 

Soweit ich weiß, dass die Lesefunktion blockiert werden soll, so dass es für die nächste Eingabe wartet, nicht wahr? Wie kann es dann das Ende von "Datei" erreichen?

+0

Hallo, ich habe das gleiche Problem. Schlimmer noch, das * binary *, das gestern funktioniert hat, gibt das gleiche Problem wie heute. Möglicherweise aufgrund einiger Timeout-Einstellungen. –

+0

Also habe ich heute genau denselben Code ausgeführt, mit dem exakt gleichen Compilation-Prozess und jetzt funktioniert es auf magische Weise ... –

Antwort

2

Das hat bei mir funktioniert. Sie müssen Ihrem seriellen Port eine Mindestzeichenanzahl geben, um eine Blockierungsfunktion zu erhalten.

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

EDIT: Eine bessere Option scheint nur den Port auf Raw-Modus.

stty -F /dev/ttyUSB0 raw 
+0

Wo soll ich das hinstellen? –

+0

Wenn Sie Linux verwenden, verwenden Sie die Befehlszeile, bevor Sie Ihr Programm ausführen. –

+0

Danke, das scheint das Problem gelöst zu haben. –

0

So habe ich herausgefunden, dass nach dem Ausführen von Arduino IDE als root, serielle Kommunikation zu erlauben, meine Programme zu funktionieren und ich bekomme den EOF-Fehler. Auch nachdem Arduino IDE geschlossen wurde, funktioniert es nicht, Neustart meines PCs ermöglicht es wieder zu arbeiten.

Aber Atilla Filiz Antworten löst dies.