我正在尝试使用 boost asio 进行串行通信。我目前在 Windows 中工作,但最终会将代码转移到 Linux 中。当我重新启动我的计算机时,从程序发送的数据不是它应该是的(例如,我发送一个空值,后跟一个回车并得到二进制的“00111111 10000011”)并且它不一致(多个空值产生不同的二进制文件) .
但是,只要我使用任何其他程序将任何数据发送到串行端口并再次运行该程序,它就会完美运行。我想我在端口的初始化中一定遗漏了一些东西,但我的研究没有发现任何东西。
这是我打开端口的方式:
// An IOService to get the socket to work
boost::asio::io_service *io;
// An acceptor for getting connections
boost::shared_ptr<boost::asio::serial_port> port;
// Cnstructor Functions
void Defaults() {
io = new boost::asio::io_service();
// Set Default Commands
command.prefix = 170;
command.address = 3;
command.xDot[0] = 128;
command.xDot[1] = 128;
command.xDot[2] = 128;
command.throtle = 0;
command.button8 = 0;
command.button16 = 0;
command.checkSum = 131;
}
void Defaults(char * port, int baud) {
Defaults();
// Setup the serial port
port.reset(new boost::asio::serial_port(*io,port));
port->set_option( boost::asio::serial_port_base::baud_rate( baud ));
// This is for testing
printf("portTest: %i\n",(int)port->is_open());
port->write_some(boost::asio::buffer((void*)"\0", 1));
boost::asio::write(*port, boost::asio::buffer((void*)"\0", 1));
boost::asio::write(*port, boost::asio::buffer((void*)"\r", 1));
boost::asio::write(*port, boost::asio::buffer((void*)"\r", 1));
Sleep(2000);
}
编辑:为了删除不相关的代码,我不小心删除了设置波特率的行,我将其添加回来。此外,我正在使用空调制解调器和 Docklight 检查输出。除了波特率之外,我还使用了为升压串行端口指定的所有默认串行设置(我也尝试过明确设置它们但没有效果)。