C++ Boost asio串行端口“;“文件结束”;
我试图读取来自arduino的串行数据,但当我运行程序时,它只读取缓冲区中的所有数据,即程序启动前实际发送的数据。然后我以以下错误终止: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():
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,运行程序之前的命令行。