我目前正在尝试使用Windows实现串口读取器类(已经使用Boost实现了一个,想要满足平台可能没有Boost的可能性)。
所有似乎都运行良好,除非我使用我的Boost串口编写器(一个单独的可执行文件)测试我的Windows串口读取器(可执行文件),编写器抛出一个访问被拒绝的异常。否则读者会工作,因为它似乎正在读取串口上的任何内容,直到作者再也无法写入为止。
无论编写器是先启动还是首先启动阅读器都没关系,一旦阅读器打开端口进行读取,编写器就无法再写入该端口。
我已尝试在CreateFile()方法中设置不同的参数但到目前为止无效,我希望以下代码片段能够正常工作,但事实并非如此。
m_serial = CreateFile(
m_port,
GENERIC_READ,
FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
作者代码可能无关紧要,但无论如何它仍然存在:
void writeLine(std::string line)
{
boost::asio::io_service io;
boost::asio::serial_port serial(io, m_port);
serial.set_option(boost::asio::serial_port_base::baud_rate(m_rate));
boost::asio::write(serial, boost::asio::buffer(line.c_str(), line.size()));
}
boost :: system :: system_error的.what()是:
open: Access is denied
有什么想法吗?
我看过这里:http://www.robbayer.com/files/serial-win.pdf(很棒的文章,但不会那么远)和http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx - 好像它应该是dwShareMode参数但是我不能让它工作。
编辑:我应该提到我正在使用这个串口仿真器http://www.eterlogic.com/Products.VSPE.html这可能是我的困境的原因,如果是这样那么无关紧要。当使用我的Boost阅读器和我的Boost编写器时,模拟器按预期工作(来自两个独立的可执行文件)。
答案 0 :(得分:0)
我能理解为什么现在没有回复。为了记录,打开串口的参数很好。问题是我试图为每次读取打开相同的端口而不关闭它,所以我只是把它打开直到我完成它。