Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost asio串行端口“;“文件结束”;_C++_Boost_Serial Port_Boost Asio - Fatal编程技术网

C++ Boost asio串行端口“;“文件结束”;

C++ Boost asio串行端口“;“文件结束”;,c++,boost,serial-port,boost-asio,C++,Boost,Serial Port,Boost Asio,我试图读取来自arduino的串行数据,但当我运行程序时,它只读取缓冲区中的所有数据,即程序启动前实际发送的数据。然后我以以下错误终止: terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >' what():

我试图读取来自arduino的串行数据,但当我运行程序时,它只读取缓冲区中的所有数据,即程序启动前实际发送的数据。然后我以以下错误终止:

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)
terminate在抛出“boost::exception\u detail::clone\u impl”的实例后调用
what():读取:文件结束
中止(堆芯转储)
我甚至不想要程序执行前的数据。这是我的C++代码:

#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();
}
#包括
#包括
#包括
#包括
使用名称空间boost;
int main(){
asio::io_服务io;
asio::串行_端口(io);
端口打开(“/dev/ttyUSB0”);
端口设置选项(asio::串行端口基本端口::波特率(115200));
chard;
while(true){
asio::读取(端口,asio::缓冲区(&d,1));

std::cout这对我来说是有效的。你需要给你的串行端口一个最小字符限制,以具有阻塞功能

stty -F /dev/ttyUSB5 115200 line 0 min 1 time 0
编辑:更好的选择似乎只是将端口设置为原始模式

stty -F /dev/ttyUSB0 raw

因此,我发现在以root用户身份运行Arduino IDE后,为了允许串行通信,我的程序停止工作,并且我得到了EOF错误。即使在Arduino IDE关闭后,它也无法工作,重新启动我的pc允许它再次工作


但是Atilla Filiz的回答解决了这个问题。

嗨,我也遇到了同样的问题。更糟糕的是,昨天工作的二进制文件和你今天遇到了同样的问题。可能是由于一些超时设置。所以我今天再次运行了完全相同的代码,使用完全相同的编译过程,现在它神奇地工作了……我应该把它放在哪里?如果使用Linux,运行程序之前的命令行。